logo

Introduction à Pygame

Le code de base

Voici le code qui permet d'ouvrir la fenêtre et d'activer le bouton en haut à droite pour la fermer.

from pygame import *

fenetre = display.set_mode((620,350))
display.set_caption('Tutoriel pygame')
init()

#les images

#les spritesheets
        
#paramètres de départ
jouer = True

#les fonctions du jeu

while jouer:
    for events in event.get():
         if events.type == QUIT:
             jouer=False
             quit()

Ecran de fond

On peut choisir une couleur ou une image pour fond d'écran

Couleur de fond

Voici le code pour changer la couleur de fond de notre fenêtre : fenetre.fill((255,255,0)) où le triplet (255,255,0) est code RGB.
suivi de : display.flip() pour afficher.

from pygame import *

fenetre = display.set_mode((620,350))
display.set_caption('Tutoriel pygame')
init()

#les images

#les spritesheets
        
#paramètres de départ
jouer = True

#les fonctions du jeu

while jouer:
    for events in event.get():
         if events.type == QUIT:
             jouer=False
             quit()
    fenetre.fill((255,255,0))
    display.flip()

Les images avec Pygame

Pour insérer une image dans notre fenetre Pygame, il y a trois étapes :

from pygame import *

fenetre = display.set_mode((620,350))
display.set_caption('Tutoriel pygame')
init()

#les images
fond = image.load('fond-ecran.jpg')
fond = fond.convert()

#les spritesheets
        
#paramètres de départ
jouer = True

#les fonctions du jeu

while jouer:
    for events in event.get():
         if events.type == QUIT:
             jouer=False
             quit()
    fenetre.blit(fond, (0,0))
    display.flip()

Gérer plusieurs écrans

Un jeu est souvent composé de plusieurs écrans :

On utilisera des touches (ou la souris) pour passer d'un écran à un autre.

Voilà un exemple avec deux écrans, le premier avec un fond jaune et un texte expliquant comment passer à l'autre écran, le second écran contindra l'image de fond.

from pygame import *

fenetre = display.set_mode((620,350))
display.set_caption('Tutoriel pygame')
init()

#les images
fond = image.load('fond-ecran.jpg')
fond = fond.convert()

#les spritesheets
        
#paramètres de départ
jouer = True
etat = 0

#les fonctions du jeu

while jouer:
    for events in event.get():
         if events.type == QUIT:
             jouer=False
             quit()
    
    k = key.get_pressed()
    
    if etat == 0:
        fenetre.fill((255,255,0))
        fonte = font.SysFont('comicsansms', 36)
        text = fonte.render('Appuyer sur ENTER', True, (0, 255, 0), (0, 5, 255))
        fenetre.blit(text, (20, 20))
        if k[K_RETURN]:
            etat=1
    if etat == 1:
        fenetre.blit(fond, (0,0))
        if k[K_r]:
            etat=0
    display.flip()
Attention aux choix des touches, il peut y avoir des problèmes avec les claviers AZERTY qui sont confondus avec les QWERTY. Donc tester pour savoir.

Et tout ça avec un sprite animé

Un spritesheet est une image composée de plusieurs images plus petites ( sprites ) et / ou animations. La combinaison des petites images en une seule grande image améliore les performances du jeu, réduit l'utilisation de la mémoire et accélère le temps de démarrage et de chargement du jeu.

Dans le prochain tuto, on verra comme gérer un spritesheet. Voici le résultat avant l'explication :

Tester ce code après avoir enregistré le spritesheet du dragon ci-dessus :

from pygame import *

fenetre = display.set_mode((620,350))
display.set_caption('Tutoriel pygame')
init()

#les images
fond = image.load('fond-ecran.jpg')
fond = fond.convert()

#les spritesheets
perso = image.load('Dragon Rouge.png')
#On associe les touches aux images
imageSprite = {K_DOWN:[perso.subsurface(x,0,96,96)for x in range(0,384,96)],
               K_LEFT:[perso.subsurface(x,96,96,96)for x in range(0,384,96)],
               K_RIGHT:[perso.subsurface(x,192,96,96)for x in range(0,384,96)],
               K_UP:[perso.subsurface(x,288,96,96)for x in range(0,384,96)]}

#paramètres de départ
jouer = True
etat = 0
xSprite,ySprite = 202,202
direction = K_DOWN
index_img = 0


#les fonctions du jeu
def deplacementPerso():
    global xSprite,ySprite,direction,index_img
    if k[K_LEFT]:
        direction = K_LEFT
        index_img = (index_img+1)%4
        xSprite = xSprite - k[K_LEFT]*8
    elif k[K_RIGHT]:
        direction = K_RIGHT
        index_img = (index_img+1)%4
        xSprite = xSprite + k[K_RIGHT]*8
    elif k[K_DOWN]:
        direction = K_DOWN
        index_img = (index_img+1)%4
        ySprite = ySprite + k[K_DOWN]*8
    elif k[K_UP]:
        direction = K_UP
        index_img = (index_img+1)%4
        ySprite = ySprite - k[K_UP]*8
    
while jouer:
    for events in event.get():
        if events.type == QUIT:
            quit()

    k = key.get_pressed()

    if etat==0:
        fonte = font.SysFont('comicsansms', 36)
        text = fonte.render('Appuyer sur ENTER', True, (0, 255, 0), (0, 5, 255))
        fenetre.fill((255,255,0))
        fenetre.blit(text, (20, 20))
        if k[K_RETURN]:
            etat=1
    
    if etat==1:
        #on execute les fonctions
        deplacementPerso()
        #On affiche les images
        fenetre.blit(fond, (0,0))
        fenetre.blit(imageSprite[direction][index_img],(xSprite,ySprite))
        if k[K_r]:
            etat=0

    display.flip()
    #définir les FPS on fait une pause 50ms entre chaque frame
    time.wait(50)