Ce que vous allez apprendre
Ce premier chapitre pose les fondations de tout jeu Pygame : la boucle de jeu. Sans elle, aucun jeu ne pourrait fonctionner. Vous allez comprendre comment une fenetre apparait, comment le programme attend vos actions, et comment il redessine l'ecran des dizaines de fois par seconde pour creer l'illusion du mouvement.
Le concept
Un jeu video n'est pas un programme classique qui attend une saisie puis affiche un resultat. C'est une boucle infinie qui repete trois actions en permanence :
- Gerer les evenements : l'utilisateur a-t-il appuye sur une touche, bouge la souris, ferme la fenetre ?
- Mettre a jour l'etat : deplacer les objets, verifier les collisions, compter les points.
- Dessiner : effacer l'ecran precedent et tout redessiner dans la nouvelle position.
Cette boucle tourne environ 60 fois par seconde (60 FPS). Chaque passage s'appelle une frame. L'horloge (pygame.time.Clock) garantit que la boucle ne tourne pas trop vite : elle freine le programme pour respecter le nombre de FPS souhaite.
Avant la boucle, il faut initialiser Pygame avec pygame.init(). Cet appel prepare tous les sous-systemes (video, son, clavier). Ensuite, on cree la fenetre avec pygame.display.set_mode() en lui passant les dimensions souhaitees sous forme de tuple (largeur, hauteur).
Etape par etape
1. Initialisation
On commence par importer Pygame et initialiser tous ses sous-systemes. On definit aussi nos constantes : taille de la fenetre, nombre d'images par seconde, et couleur de fond.
import pygame
import sys
# Initialize Pygame
pygame.init()
# Constants
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
FPS = 60
BG_COLOR = (20, 20, 40) # Dark blue background
La couleur (20, 20, 40) est un tuple RGB : Rouge=20, Vert=20, Bleu=40. C'est un bleu tres sombre, plus agreable qu'un noir pur pour un jeu.
2. Creer la fenetre
set_mode() cree la fenetre du jeu. set_caption() definit le titre affiche dans la barre. L'horloge servira a reguler la vitesse.
# Create the window
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Brick Breaker - Chapter 1")
# Clock for controlling frame rate
clock = pygame.time.Clock()
3. La boucle principale
Voici le coeur du programme. pygame.event.get() recupere tous les evenements en attente. On verifie si l'utilisateur a ferme la fenetre (QUIT) ou appuye sur Echap. screen.fill() remplit l'ecran avec notre couleur de fond. pygame.display.flip() affiche le resultat a l'ecran. clock.tick(FPS) attend le temps necessaire pour ne pas depasser 60 FPS.
running = True
while running:
# 1. Handle events
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
running = False
# 2. Update game state
# (nothing to update yet)
# 3. Draw everything
screen.fill(BG_COLOR)
# 4. Flip the display
pygame.display.flip()
# 5. Tick the clock
clock.tick(FPS)
4. Nettoyage
Quand la boucle se termine, on appelle pygame.quit() pour liberer les ressources, puis sys.exit() pour quitter proprement le programme.
pygame.quit()
sys.exit()
Points cles a retenir
Astuce : si vous oubliez pygame.event.get() dans votre boucle, votre fenetre semblera gelee car le systeme d'exploitation pensera que le programme ne repond plus.
Piege courant : ne confondez pas pygame.display.flip() (met a jour tout l'ecran) avec pygame.display.update() (peut ne mettre a jour qu'une partie). Pour l'instant, flip() est le bon choix.
Fonctions Pygame utilisees :
pygame.init(): initialise tous les modulespygame.display.set_mode(): cree la fenetrepygame.display.set_caption(): titre de la fenetrepygame.event.get(): recupere les evenementsscreen.fill(): remplit la surface avec une couleurpygame.display.flip(): affiche le renduclock.tick(): regule la vitesse de la boucle
Code complet
"""Brick Breaker - Chapter 1: The Game Loop"""
import pygame
import sys
# Initialize Pygame
pygame.init()
# Constants
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
FPS = 60
BG_COLOR = (20, 20, 40) # Dark blue background
# Create the window
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Brick Breaker - Chapter 1")
# Clock for controlling frame rate
clock = pygame.time.Clock()
# Main game loop
running = True
while running:
# 1. Handle events
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
running = False
# 2. Update game state
# (nothing to update yet)
# 3. Draw everything
screen.fill(BG_COLOR)
# 4. Flip the display
pygame.display.flip()
# 5. Tick the clock
clock.tick(FPS)
# Clean up
pygame.quit()
sys.exit()
Telechargement
Telecharger le code source de ce chapitre : brick-breaker-ch01.zip
