Session 4 : Pong

Deux raquettes, une balle : le Pong classique. Mais il y a une surprise : dans cette session, tu écris le jeu en vrai pygame, sans pgzrun. Tu apprends à installer toi-même la game loop. C’est comme ça que marchent la plupart des vrais jeux.

Ce que tu vas apprendre aujourd’hui

  • La game loop pygame : events, update, draw
  • pygame.Rect pour les rectangles et les collisions
  • Faire rebondir la balle (inverser la vitesse)
  • Compter les points pour deux joueurs

Étape 0 : Installation

  1. Ouvre Thonny.
  2. Télécharge le starter via ce lien, décompresse le ZIP et ouvre main.py.
  3. Clique sur Run. Tu vois deux raquettes et une balle jaune au milieu, mais la balle ne bouge pas encore.

Différence avec pgzrun : il n’y a plus de fonctions draw() et update(). Tout est dans une seule boucle while running:.

Étape 1 : Fais bouger la balle

Cherche les lignes :

# bal.x += ball_dx  # active ceci quand tu as fini
# ball.y += ball_dy

Supprime le # devant les deux lignes. Mais règle d’abord une vitesse de départ. Cherche ball_dx, ball_dy = 0, 0 et remplace par :

ball_dx, ball_dy = 4, 4

Clique sur Run. La balle bouge maintenant, mais elle disparaît par le bord. On règle ça à l’étape 2.

Étape 2 : ✅ Basic : la balle rebondit sur les murs et les raquettes

Ajoute ceci après ball.x += ball_dx et ball.y += ball_dy :

# Rebondir sur le bord supérieur et inférieur
if ball.top <= 0 or ball.bottom >= HEIGHT:
    ball_dy = -ball_dy

# Rebondir sur les raquettes
if ball.colliderect(left_paddle) or ball.colliderect(right_paddle):
    ball_dx = -ball_dx

La balle rebondit maintenant à l’infini. Ajoute aussi des limites pour les raquettes pour qu’elles ne sortent pas de l’écran. Regarde le code qui est déjà dans le starter.

Étape 3 : ⭐ Stretch : compter les points

Si la balle sort à gauche, le joueur de droite marque. Si elle sort à droite, c’est celui de gauche :

# Balle sortie à gauche → la droite marque
if ball.left <= 0:
    score_right += 1
    ball.center = (WIDTH // 2, HEIGHT // 2)
    ball_dx = 4

# Balle sortie à droite → la gauche marque
if ball.right >= WIDTH:
    score_left += 1
    ball.center = (WIDTH // 2, HEIGHT // 2)
    ball_dx = -4

Le score s’affiche déjà dans draw(). Vérifie que les variables sont correctes.

Étape 4 : 🔥 Expert : condition de victoire et vitesse qui augmente

Gagner à 5 points : ajoute une variable won. Quand un joueur atteint 5, arrête le jeu :

if score_left >= 5:
    won = "La gauche gagne !"
if score_right >= 5:
    won = "La droite gagne !"

Affiche le gagnant à l’écran et arrête le mouvement.

Vitesse qui augmente : après chaque échange, la balle devient un peu plus rapide :

if ball.colliderect(left_paddle) or ball.colliderect(right_paddle):
    ball_dx = -ball_dx * 1.05   # 5 % plus rapide
    ball_dy = ball_dy * 1.05

Prévois un maximum : ball_dx = max(-12, min(12, ball_dx)).

Showcase

Joue une partie contre un buddy. Le premier à 5 points gagne. Montre-le à un coach.

À la prochaine !

« La prochaine fois : Breakout. La balle casse des briques. Et il y a du SON. »

À emporter chez toi

  1. Facile : change la couleur de la balle ou des raquettes.
  2. Moyen : agrandis une raquette au fur et à mesure que ce joueur perd (handicap).
  3. Difficile : ajoute un adversaire IA : la raquette de droite suit automatiquement la balle.
  4. Très difficile : ajoute des power-ups : un item qui double la balle ou agrandit la raquette.

Dojo Defender

Aujourd’hui, Dojo Defender passe au vrai Pygame ! Télécharge le starter. Tu n’étais pas là ? Télécharge la solution de la session 2. Fiche de travail : Dojo Defender Session 3.


Regarde le cheatsheet de cette session