Votre premier programme Pygame¶
Avant de coder des “vrais” jeux, il faut réussir le tout premier objectif : ouvrir une fenêtre, la faire tourner sans bug, et pouvoir la fermer proprement.
Si vous arrivez à afficher une fenêtre qui ne freeze pas : vous aurez déjà réussi cette partie (et croyez pas, c'est pas si évident que ça).
Installer Pygame¶
Dans un terminal, tapez :
python -m pip install pygame
Remplacez potentiellement
pythonparpython3oupy -3.14en fonction de votre installation de Python. Plus de détails sur cette page du parcours Python.
Pour vérifier que c’est bon, vous pouvez lancer Python et faire :
import pygame
print(pygame.__version__)
Si ça affiche une version, c’est installé.
Le programme minimal en Pygame¶
Créez un fichier main.py et mettez ceci :
import pygame
pygame.init()
screen = pygame.display.set_mode((800, 600))
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((30, 30, 30)) # fond gris foncé
pygame.display.flip()
pygame.quit()
Exécutez-le.
- Une fenêtre s’ouvre
- Vous pouvez la fermer avec la croix
- Et le programme se termine sans erreur
- C'est un peu le "hello world" de Pygame
Explications¶
Décortiquons donc ce programme minimal.
pygame.init()
Cette ligne initialise pygame, et doit être appelé dans tout programme Pygame.
screen = pygame.display.set_mode((800, 600))
Ici on crée la fenêtre qui va contenir le jeu, vous pouvez remplacer screen par un autre nom de variable si vous le souhaitez.
running = True
while running:
...
Ça, C’est la boucle de jeu.
Un jeu, c’est juste un programme qui répète en boucle, et donc c'est ce qui se passe à l'intérieur de la boucle principale, qui définit ce que "fait" le jeu.
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
Ici, c'est la partie gestion d'évènements. On détecte si l'utilisateur appuie sur la croix de la fenêtre, et si c'est le cas, on sort de la boucle de jeu. On reparlera plus tard de pourquoi cette phase est indispensable.
screen.fill((30, 30, 30))
pygame.display.flip()
On remplit la fenêtre de gris foncé et on mets à jour l'écran.
pygame.quit()
Enfin, une fois qu'on sort de la boucle de jeu, on appelle cette fonction qui quitte pygame et ferme bien proprement la fenêtre.
Pourquoi on doit gérer les événements ?¶
Si vous ne lisez jamais les événements, la fenêtre va vite devenir “ne répond pas”.
C’est parce que Windows / Linux / macOS envoient en permanence des messages au programme (déplacement de la fenêtre, clic, fermeture, etc.). Si vous les ignorez, le système pense que le programme est bloqué.
Cette partie est donc indispensable :
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
Limiter les FPS¶
Pour l’instant, votre boucle tourne aussi vite que possible. Résultat :
- votre CPU monte à 100%
- votre jeu sera incontrôlable dès que vous ajouterez du mouvement
Il est donc indispensable d'ajouter une horloge :
import pygame
pygame.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Mon premier jeu")
clock = pygame.time.Clock()
running = True
while running:
clock.tick(60) # max 60 tours de boucle par seconde
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((30, 30, 30))
pygame.display.flip()
pygame.quit()
clock.tick(60) limite la boucle à environ 60 FPS.
Couleurs (RGB)¶
La couleur du fond est un triplet (R, G, B) entre 0 et 255.
Exemples :
| Couleur | RGB |
|---|---|
| Noir | (0, 0, 0) |
| Blanc | (255, 255, 255) |
| Rouge | (255, 0, 0) |
| Vert | (0, 255, 0) |
| Bleu | (0, 0, 255) |
Testez par exemple :
screen.fill((0, 120, 255))
Ou encore mieux, votre couleur préférée !
Quizz¶
import pygame
pygame.init()
screen = pygame.display.set_mode((800, 600))
running = True
while running:
screen.fill((0, 0, 0))
pygame.display.flip()
pygame.quit()
Que se passe-t-il quand on lance ce programme ?
- Il affiche une fenêtre et on peut la fermer normalement
- *La fenêtre va “ne pas répondre” (freeze)
- Il affiche une erreur immédiatement
> Il manque la gestion des événements (`pygame.event.get()`). Sans ça, le système considère que l’application ne répond pas.
Exercice pratique¶
Codez un programme Pygame qui :
- Ouvre une fenêtre 800x600
- Affiche un fond noir
- Se ferme proprement quand on clique sur la croix
- Tourne à 60 FPS
- Affiche dans le titre de la fenêtre votre FPS réel
Indices :
Récupérer le FPS moyen :
fps = clock.get_fps()
Changer le titre :
pygame.display.set_caption("Mon jeu")
clock.get_fps()renvoie 0 au tout début, c’est normal. Au bout d’une seconde, ça devient stable.
En résumé¶
Vous savez maintenant :
- Installer Pygame
- Ouvrir une fenêtre avec
pygame.display.set_mode - Faire une boucle de jeu qui ne freeze pas
- Gérer la fermeture avec
pygame.QUIT - Limiter les FPS avec
pygame.time.Clock()etclock.tick(60) - Afficher quelque chose avec
fill()etpygame.display.flip()
Maintenant qu’on a une fenêtre... on va pouvoir y mettre quelque chose qui bouge.