Programmation des bases d'un jeu vidéo sous Pygame

De TravauxIndse
Aller à la navigation Aller à la recherche

Programmation des bases d'un jeu vidéo sous Pygame

ATTENTION ce tutoriel convient à une personne ayant des bases en python.( Le fonctionnement des commandes if, elif,etc, n'est pas expliqué.)

Importer Pygame[modifier]

J'ai déjà fait une autre page wiki pour expliquer comment installer Pygame. Maintenant, je vais vous expliquer comment importer les fonctions Pygame dans Python. Les commandes à utiliser sont :

-"import pygame" qui va importer tous les éléments pygame
-"from pygame.locals import *" cette fonction permet de savoir exactement ce qu'on importe de pygame, vous devez écrire une commande à la place de l'astérisque.
-"pygame.init()" va initialiser tous les éléments que nous avons importer.

Première fenêtre[modifier]

Les commandes à utiliser sont :

-"win = pygame.display.set_mode((x,y))" permet de crée la fenêtre à la taille désirée.
-"pygame.display.set_caption("name")" permet de nommer la fenêtre.

Pour pouvoir fermer la fenêtre:

-Vous devez d'abord créer une variable "continuer", vous pouvez lui donner la valeur "1"
-Créer votre boucle principale "while continuer ==1"
-Ensuite le code permettant de fermer la fenêtre doit ressembler à ça :
    -for event in pygame.event.get():(Cela permet de prendre en compte tous les événements qui suivent)
       -if event.type == pygame.QUIT:( = si l’événement effectué est "fermer la fenêtre")
           -continuer = 0 (la valeur de continuer devient 0 stoppant la boucle)
           -pygame.quit() (cette fonction arrête le programme)
           -exit() (cette fonction ferme la fenêtre)

Premiers déplacements, limites de l'écran[modifier]

-D'abord nous allons attribuer au mot keys commande de pression d'une touche, comme cela "keys = pygame.key.get_pressed()"
- Nous allons créer une variable "vel=x" le x sera la valeur du déplacement vers la droite ou la gauche
- nous allons faire sorte que "si la touche gauche est pressée on modifie la coordonnée x du personnage de -vel sinon si la touche droite est pressée on modifie la coordonné du personnage de + vel", Voici le code :  
   

51.if keys[pygame.K_LEFT] and x > vel :

       52.x -= vel
       53.left = True
       54.right=False
   55.elif keys[pygame.K_RIGHT] and x < 500 - width - vel :
       56.x += vel
       57.left=False
       58.right=True
   59.else:
       60.right=False
       61.left=False
       62.walcount=0

- dans if et elif (ligne 51 et 55) les deux deuxièmes conditions vont limiter l'écran en empêchant la commande keys de s'activer si on se trouve à une certaine position ( width est une variable qui représente la largeur du personnage dans mon programme sa valeur est 64)

Faire sauter son personnage[modifier]

Tout d'abord, il faut créer une variable isjump=False et une variable jumpcount=10. Ensuite, dans notre boucle principale qui resemblera à cela :

63.if not (isJump) :

       64.if keys[pygame.K_SPACE] :
           65.isjump = True
           66.right=False
           67.left=False
           68.walkcount=0
   69.else:
       70.if jumpCount >= -10 :
           71.neg = 1
           72.if jumpCount < 0:
               73.neg = -1
           74.y-= (jumpCount ** 2) * 0.5 * neg
           75.jumpCount -= 1
       76.else:
           77.isJump = False
           78.jumpCount = 10

- En 64, si l'on presse la barre espace, la variable "sauter" devient vrai, la variable devient vrai donc on passe au else, car au début on était sous une commande if not. - De 70 à 75, si le compteur de saut est entre -10 compris et 0, o aura la variable neg=-1 qui permettra en 74 de modifier la valeur du y du personnage effectuant le saut. Et tant qu'il est en saut, la ligne 75 fait baisser le compteur isjump. Jusqu’à ce que la valeur ne soit plus propice au saut. Ainsi, on entre dans le else en 76 qui arrête le saut et rétablis le compteur

Animer la marche[modifier]

D'abord, vous devrez crée des listes regroupant vos sprites, comme cela.

13.walkright = [pygame.image.load('ninjaM1.png'), pygame.image.load('ninjaM2.png'), pygame.image.load('ninjaM3.png'), pygame.image.load('ninjaM4.png'), pygame.image.load('ninjaM5.png'), pygame.image.load('ninjaM6.png')] 14.walkleft = [pygame.image.load('ninjaM1.1.png'), pygame.image.load('ninjaM2.2.png'), pygame.image.load('ninjaM3.3.png'), pygame.image.load('ninjaM4.4.png'), pygame.image.load('ninjaM5.5.png'), pygame.image.load('ninjaM6.6.png')] 15.bg= pygame.image.load('bg.jpg') 16.char= pygame.image.load('standing.png')

-la ligne 13 est simplement l'animation vers la droite, 14 vers la gauche. 15 et 16 ne sont pas des listes, ce sont simplement l'mage de fond et l'image du personnage statique. Ensuite, vous devrez créer des fonctions left=False, right=False, un walkcount=0 et hors de la boucle principale il vous faudra un programme qui ressemble à cela.

28.def redrawGameWindow():

  29. global walkcount
  30. win.blit(bg, (0,0))
   31.if walkcount+1>=18:
       32.walkcount=0
   33.if left:
       34.win.blit(walkleft[walkcount//3], (x,y))
       35.walkcount += 1
   36.elif right:
       37.win.blit(walkright[walkcount//3], (x,y))
       38.walkcount +=1
   39.else:
       40.win.blit(char, (x,y))  
   41.pygame.display.update()

- En 28, la commande def permet de crée la fonction redrawGameWindow. Au passage un "blit" est un rafraîchissement d'image. - En 31, si l'on augmente le compteur de pas de 1 et que ainsi, cela excède 18, le compteur retombera à 0 rétablissant les sprites au début de l'animation. On a choisi 18 comme valeur, car j'ai 6 images et j'ai choisi un compte de 3 pour que l'animation n'aille pas trop vite, donnant ainsi, un valeur max de 18. A vous de trouver le bon compromis pour votre jeu. - En 33, si l'on va vers la gauche, on rafraîchit l'image, par le sprite qui est égale à la division entière(//) du compteur de pas par 3. Ex : walkcount =13, 13//3=4, on charge le quatrième sprite. - Même chose en 36 et en 39, si l'on ne se déplace ni vers la gauche ni vers la droite, on charge la position statique.

Ensuite dans notre boucle principale qui ressemble à cela. 42.continuer=1 43.while continuer==1:

   44.clock.tick(18)
   45.for event in pygame.event.get():
       46.if event.type == pygame.QUIT:
           47.continuer = 0
           48.pygame.quit()
           49.exit()
   50.keys = pygame.key.get_pressed()
   51.if keys[pygame.K_LEFT] and x > vel :
       52.x -= vel
       53.left = True
       54.right=False
   55.elif keys[pygame.K_RIGHT] and x < 500 - width - vel :
       56.x += vel
       57.left=False
       58.right=True
   59.else:
       60.right=False
       61.left=False
       62.walcount=0
   63.if not (isJump) :
       64.if keys[pygame.K_SPACE] :
           65.isJump = True
           66.right=False
           67.left=False
           68.walkcount=0
   69.else:
       70.if jumpCount >= -10 :
           71.neg = 1
           72.if jumpCount < 0:
               73.neg = -1
           74.y-= (jumpCount ** 2) * 0.5 * neg
           75.jumpCount -= 1
       76.else:
           77.isJump = False
           78.jumpCount = 10
   79.redrawGameWindow()

- Simplement, en 51; 55; 64, en fonction de si l'on va à droite, à gauche ou on saute, on activera ou désactivera les variables droite et gauche qui interviennent dans notre commande redrawGameWindow() - En 79 on fait fonctionner notre commande personnalisée dans notre boucle.

Objectif pour l'examen[modifier]

Durant l'examen, je vais créer un programme équivalent, avec d'autres ressources.(sprites, fond, fps,...)