Session 5 : Breakout
Une balle rebondit dans tous les sens et casse des rangées de briques colorées. Tu contrôles la raquette pour garder la balle en l’air. Et cette fois, tu l’entends aussi : il y a des effets sonores à chaque collision.
Ce que tu vas apprendre aujourd’hui
- Charger et jouer un son avec
pygame.mixer - Les collisions avec plusieurs objets (une liste de briques)
- Faire rebondir la balle dans la bonne direction
- Construire un écran de victoire et de défaite
É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 la raquette, la balle et les briques. La balle bouge déjà à l’horizontale mais pas à la verticale. C’est à toi de changer ça.
Étape 1 : Fais bouger la balle à la verticale
Cherche cette ligne dans le starter :
ball_dx, ball_dy = 4, 0
# ball_dy = -4 ← supprime le # pour faire bouger la balle !Supprime le # devant ball_dy = -4. La balle a maintenant une vitesse verticale. Ajoute le mouvement dans la game loop (cherche la section update) :
ball.x += ball_dx
ball.y += ball_dyClique sur Run. La balle bouge en diagonale mais disparaît par les bords.
Étape 2 : ✅ Basic : la balle rebondit sur les murs et la raquette
Ajoute les rebonds :
# Bord supérieur, gauche et droit
if ball.left <= 0 or ball.right >= WIDTH:
ball_dx = -ball_dx
if ball.top <= 0:
ball_dy = -ball_dy
# Raquette
if ball.colliderect(paddle):
ball_dy = -ball_dy
if snd_hit:
snd_hit.play()Vies : si la balle atteint le bas, tu perds une vie :
if ball.top > HEIGHT:
levens -= 1
# Remets la balle au-dessus de la raquette
ball.center = (paddle.centerx, paddle.top - BALL_SIZE)
ball_dy = -4Étape 3 : ⭐ Stretch : casser des briques
Vérifie la collision avec chaque brique dans la boucle :
for steen in stenen[:]:
if ball.colliderect(steen['rect']):
stenen.remove(steen)
ball_dy = -ball_dy
score += 10
if snd_hit:
snd_hit.play()
break # casser une seule brique par frameCondition de victoire : si toutes les briques sont parties, le ninja a gagné. Affiche un message :
if not stenen:
# affiche l'écran de victoireÉtape 4 : 🔥 Expert : vies, son d’explosion et vitesse
Son d’explosion quand une brique casse (utilise snd_explode du starter) :
if snd_explode:
snd_explode.play()Game over à 0 vie : affiche un écran et arrête la balle.
Vitesse qui augmente à mesure qu’il reste moins de briques :
snelheid_factor = 1 + (1 - len(stenen) / totaal_stenen) * 0.5
ball_dx_huidig = ball_dx * snelheid_factorUne nouvelle rangée de briques quand tout est parti : rappelle stenen = maak_stenen() et augmente la difficulté.
Showcase
Qui enlève le plus de briques ? Compare les scores et montre à ton coach ta plus longue série.
À la prochaine !
« La prochaine fois : la gravité. Ton personnage tombe, et c’est à toi de le faire sauter de plateforme en plateforme. »
À emporter chez toi
- Facile : change les couleurs des briques pour tes couleurs préférées.
- Moyen : rends certaines briques deux fois plus solides (il faut les toucher deux fois).
- Difficile : ajoute un power-up qui élargit la raquette pendant un temps.
- Très difficile : ajoute une deuxième balle qui apparaît quand score > 50.
Regarde le cheatsheet de cette session
Dojo Defender
Dojo Defender reçoit un menu et de nouveaux types d’ennemis ! Télécharge le starter. Tu n’étais pas là ? Télécharge la solution de la session 3. Fiche de travail : Dojo Defender Session 4.