Première fenêtre

Première fenêtre avec Pygame

Avant de commencer, deux choses importantes :

  • une animation est une suite de dessins qui défilent les uns après les autres (voir les premières animations de Mickey Mouse). Cette répétition s’appelle un loop. Dans Pygame (contrairement à Pygame Zero), il faut coder ce loop.

  • pour fabriquer nos animations / jeux, nous allons superposer des surfaces (ou des calques si c'est plus simple à comprendre).

Par exemple, on peut superposer ces 3 surfaces :

  • la fenêtre du jeu
  • l’image du décor du jeu
  • l’image du personnage du jeu

La première surface que nous allons créer est la fenêtre :

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
ETAPE 1 :
Premier programme avec Pygame : afficher la fenêtre graphique 

Author : YF
Dernière mise à jour : sept 2022

"""

import pygame

# constantes
SCREENSIZE = (800,600)          # (LARGEUR, HAUTEUR) de la fenêtre (en pixels)
LIGHTGREY = (110,110,110)       # couleur GRIS CLAIR
YELLOW = (240,255,0)            # couleur JAUNE
BGCOLOR = LIGHTGREY             # couleur de fond
TITLE = "Tutoriel Pygame"       # Titre qui s'affiche dans la fenêtre

pygame.init()

# création de la fenêtre principale
screen = pygame.display.set_mode(SCREENSIZE)
pygame.display.set_caption(TITLE)

#  boucle principale
## variable qui détermine l'état de la boucle : True = la boucle est active, la fenêtre s'affiche
running = True

# tant que running est vraie
while running:

    # remplir la fenêtre avec une couleur
    screen.fill(BGCOLOR)

    # rafraîchir la fenêtre
    pygame.display.update() 

pygame.quit()

Comprendre le programme :

  • import du module Pygame contenant les objets et méthodes dont nous avons besoin.
  • définition des constantes qui déterminent la taille de l’écran et la couleur:
  • SCREENSIZE : taille de l'écran (largeur, hauteur) en pixels
  • TITLE : le titre de la fenêtre
  • initialisation de pygame pygame.init()
  • création de la fenêtre avec la méthode set_mode() et définition du titre avec la méthode set_caption(). Ces méthodes font partie du module display (affichage) de pygame.
  • la boucle (ou loop : tant que la variable running est vraie, on remplit la fenêtre de blanc et on rafraîchit l'affichage avec une autre méthode du module display : pygame.display.update()
  • définition d'une horloge (pygame.time.Clock()) qui va définir la vitesse de rafraîchissement de l'écran. On la règle à 60 images par secondes (60 Frames Par Seconde) avec clock.tick()

Mayday ! Ma fenêtre ne peut pas se fermer!

Pas de panique ! Notre code est effectivement incomplet. Il faut prévoir la fermeture de la fenêtre.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
ETAPE 2 :
On reprend la version précédente qui affiche la fenêtre graphique 
On ajoute la gestion des évènements du clavier pour déclencher la fermeture de la fenêtre

Author : YF
Dernière mise à jour : sept 2022

Etat : à vérifier (cohérence par rapport à la suite)
"""

import pygame

# constantes
SCREENSIZE = (800,600)          # (LARGEUR, HAUTEUR) de la fenêtre (en pixels)
LIGHTGREY = (110,110,110)       # couleur GRIS CLAIR
YELLOW = (240,255,0)            # couleur JAUNE
BGCOLOR = LIGHTGREY             # couleur de fond
TITLE = "Tutoriel Pygame"       # Titre qui s'affiche dans la fenêtre

pygame.init()

# création de la fenêtre principale
screen = pygame.display.set_mode(SCREENSIZE)
pygame.display.set_caption(TITLE)

#  boucle principale
## variable qui détermine l'état de la boucle : True = la boucle est active, la fenêtre s'affiche
running = True

# tant que running est vraie
while running:

    # remplir la fenêtre avec une couleur
    screen.fill(BGCOLOR)

    # événement fermeture de la fenêtre
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # rafraîchir la fenêtre
    pygame.display.update() 

pygame.quit()

Comprendre le programme :

Une partie Gestion des saisies clavier a été ajoutée:

  • pygame.event.get() : on surveille tous les évènements qui ont lieu avec la méthode get() du module event.
  • pygame.QUIT : si l'utilisateur clique sur la croix (pygame.QUIT), on sort de la boucle et ferme la session pygame et on sort de la boucle.
  • _event.type == pygame.KEYDOWN and event.key == pygame.KESCAPE : si l'utilisateur appuie sur une touche pygame.KEYDOWN et si cette touche est la touche Echap (_pygame.KESCAPE), là encore, on sort de la boucle.
  • on surveille tous les évènements qui ont lieu avec la méthode _get()__ du module event. Si l'utilisateur clique sur la croix (pygame.QUIT), on sort de la boucle et ferme la session pygame et on sort du programme.