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

  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 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_dy

Clique 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 frame

Condition 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_factor

Une 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

  1. Facile : change les couleurs des briques pour tes couleurs préférées.
  2. Moyen : rends certaines briques deux fois plus solides (il faut les toucher deux fois).
  3. Difficile : ajoute un power-up qui élargit la raquette pendant un temps.
  4. 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.