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.Rectpour les rectangles et les collisions- Faire rebondir la balle (inverser la vitesse)
- Compter les points pour deux joueurs
Étape 0 : Installation
- Ouvre Thonny.
- Télécharge le starter via ce lien, décompresse le ZIP et ouvre
main.py. - 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_dySupprime 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, 4Clique 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_dxLa 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 = -4Le 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.05Pré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
- Facile : change la couleur de la balle ou des raquettes.
- Moyen : agrandis une raquette au fur et à mesure que ce joueur perd (handicap).
- Difficile : ajoute un adversaire IA : la raquette de droite suit automatiquement la balle.
- 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.