CHAPITRE 3
Gérer les événements⚓︎
Présentation⚓︎
Les événements sont la base des interfaces Humain-Machine (IHM)1 : frappe au clavier, mouvement ou clic de souris etc. ils sont stockés dans une file d'attente appelée buffer. Ci-dessous un exemple de buffer qui contient 5 événements :
pygame nous offre le moyen de parcourir ce buffer pour y récupérer les events :
pygame.event.get()
: l'accès au buffer- la boucle
for
Les concepts
Voici comment parcourir les events :
for event in pygame.event.get():
# ici nous allons traiter l'événement event
Les différents type d'event
Lorsqu'on a un event, on a accès à son type : event.type
. Pygame définit un certain nombre de type d'event dont voici les principaux :
type d'événement | provoqué par... |
---|---|
pygame.QUIT |
fermeture de la fenêtre |
pygame.KEYDOWN |
enfoncement d'une touche du clavier |
pygame.KEYUP |
relâchement d'une touche du clavier |
pygame.MOUSEMOTION |
mouvement de la souris |
pygame.MOUSEBUTTONUP |
enfoncement d'un bouton de la souris |
pygame.MOUSEBUTTONDOWN |
relâchement d'un bouton de la souris |
Nous pouvons modifier notre classe Jeu
pour quitter lorsque la croix de la fenêtre est utilisée :
class Jeu:
...
def loop(self):
fini = False
while not fini:
for event in pygame.event.get():
if event.type == pygame.QUIT:
fini = True
Mais, vous vous rendez-compte que notre variable booléenne fini
ne sert pas à grand-chose puisque dès qu'on clique sur la croix de toute façon la fenêtre se ferme, quittant tout.
snake_05.py
import pygame
from constantes import *
class Jeu:
def __init__(self):
self.ecran = pygame.display.set_mode((LARGEUR, HAUTEUR))
def start(self):
pygame.init()
self.loop()
def loop(self):
fini = False
while not fini:
for event in pygame.event.get():
if event.type == pygame.QUIT:
fini = True
mon_jeu = Jeu()
mon_jeu.start()
Exercice⚓︎
À faire vous-même
Dans un fichier snake_06.py
changer votre précédent script pour :
- Afficher un coucou (comme au début) lorsque l'utilisateur clique ;
- Quitter en disant
Au revoir
, lorsqu'on appuie sur une touche du clavier
import pygame
from constantes import *
class Jeu:
def __init__(self):
self.ecran = pygame.display.set_mode((LARGEUR, HAUTEUR))
def start(self):
pygame.init()
self.loop()
def loop(self):
fini = False
while not fini:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
fini = True
if event.type == pygame.MOUSEBUTTONDOWN:
print('Vous avez cliqué')
self.stop()
def stop(self):
print('Au revoir')
pygame.quit()
snake_game = Jeu()
snake_game.start()
Nous constatons que les événements sont très pratiques et nous pouvons maintenant les manipuler. Lorsque l'on a un événement d'un certain type, cet événement possède des propriétés liées à ce type. Par exemple, si event
est de type pygame.KEYDOWN
alors la propriété key
permet de savoir à quelle touche on a à faire.
Il existe une constante pygame pour chaque touche. On trouve ce tableau ici : les constantes pygame pour les touches.
Par exemple si le test event.key == pygame.K_UP
est vrai cela signifie qu'on a pressé la touche flèche vers le haut de notre clavier.
Tout est pratiquement en place pour commencer à modéliser notre jeu SNAKE. Rendez-vous au chapitre suivant.
-
Écouter Wendy Mackay, spécialiste des interfaces Humain-Machine, lors de la leçon inaugurale de la chaire d'Informatique 2021--2022, au Collège de France. ↩