Première fenêtre

Pygame, c’est quoi ?

Pygame est une bibliothèque (un ensemble de fonctions prêtes à l’emploi – plus précisément un ensemble d’objets avec leurs méthodes) qui permet de développer des animations ou des jeux en 2D (2 dimensions).

La documentation officielle est ici. Elle est entièrement en anglais.

Des exemples de ce que l'on peut faire avec sont visibles ici :

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.