Aller au contenu

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 python par python3 ou py -3.14 en 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
Fenetre pygame
Fenetre Pygame par défaut

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 :

  1. Ouvre une fenêtre 800x600
  2. Affiche un fond noir
  3. Se ferme proprement quand on clique sur la croix
  4. Tourne à 60 FPS
  5. 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() et clock.tick(60)
  • Afficher quelque chose avec fill() et pygame.display.flip()

Maintenant qu’on a une fenêtre... on va pouvoir y mettre quelque chose qui bouge.