<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Session 5 : Breakout :: CoderDojo Python &amp; Pygame</title><link>https://python.coderdojohasselt.be/fr/sessions/python/05-breakout/index.html</link><description>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 :</description><generator>Hugo</generator><language>fr-BE</language><atom:link href="https://python.coderdojohasselt.be/fr/sessions/python/05-breakout/index.xml" rel="self" type="application/rss+xml"/><item><title>Session 5 : Notes du coach</title><link>https://python.coderdojohasselt.be/fr/sessions/python/05-breakout/mentor-notes/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://python.coderdojohasselt.be/fr/sessions/python/05-breakout/mentor-notes/index.html</guid><description>Objectif de cette session Après le checkpoint Basic, un ninja sait :
Faire bouger la balle à la verticale et la faire rebondir sur les quatre bords et sur la raquette. Jouer un son lors d’une collision. Diminuer les vies quand la balle atteint le bas. Préparation Le ZIP du starter prêt. Il contient sounds/hit.wav et sounds/explosion.wav. Teste si pygame.mixer fonctionne sur le laptop de la salle dojo (parfois le pilote audio manque). Dojo Defender : les ninjas ajoutent aujourd’hui des effets sonores à leur projet. Répartition du temps (3 heures) Temps Activité 0:00 à 0:10 Retour + intro son 0:10 à 0:30 Étape 1 à 2 : faire bouger la balle + rebonds 0:30 à 1:15 Étape 3 : casser des briques 1:15 à 1:50 Étape 4 : vies, son, victoire/game over 1:50 à 2:20 Dojo Defender : ajouter le son 2:20 à 2:50 Buffer / stretch / expert 2:50 à 3:00 Showcase + cliffhanger Questions fréquentes « Aucun son » Deux causes :</description></item><item><title>Session 5 : Cheatsheet</title><link>https://python.coderdojohasselt.be/fr/sessions/python/05-breakout/cheatsheet/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://python.coderdojohasselt.be/fr/sessions/python/05-breakout/cheatsheet/index.html</guid><description>Charger et jouer un son import os import pygame pygame.mixer.init() # os.path.abspath(__file__) donne le dossier de ce fichier, pas le dossier depuis lequel tu lances le script. # Sans ça, le son ne marche que si tu ouvres le script depuis le même dossier. _DIR = os.path.dirname(os.path.abspath(__file__)) try: snd_hit = pygame.mixer.Sound(os.path.join(_DIR, 'sounds/hit.wav')) except: snd_hit = None if snd_hit: snd_hit.play() La balle rebondit sur les murs if ball.left &lt;= 0 or ball.right >= WIDTH: ball_dx = -ball_dx if ball.top &lt;= 0: ball_dy = -ball_dy La balle rebondit sur la raquette if ball.colliderect(paddle): ball_dy = -ball_dy Casser des briques (dict dans une liste) # Créer une brique stenen.append({'rect': pygame.Rect(x, y, b, h), 'kleur': (220, 60, 60)}) # Vérifier la collision for steen in stenen[:]: if ball.colliderect(steen['rect']): stenen.remove(steen) ball_dy = -ball_dy score += 10 break Dessiner les briques for steen in stenen: pygame.draw.rect(screen, steen['kleur'], steen['rect']) Vies : remettre la balle en place if ball.top > HEIGHT: levens -= 1 ball.center = (paddle.centerx, paddle.top - 12) ball_dy = -4 Victoire / game over if not stenen: txt = font.render("TU GAGNES !", True, (255, 220, 0)) screen.blit(txt, (WIDTH//2 - txt.get_width()//2, HEIGHT//2)) if levens &lt;= 0: txt = font.render("GAME OVER", True, (220, 50, 50)) screen.blit(txt, (WIDTH//2 - txt.get_width()//2, HEIGHT//2))</description></item><item><title>Session 5 : Enregistrement de la démo</title><link>https://python.coderdojohasselt.be/fr/sessions/python/05-breakout/demo/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://python.coderdojohasselt.be/fr/sessions/python/05-breakout/demo/index.html</guid><description>Lance la solution : cd code/sessions/05-breakout/solution &amp;&amp; uv run python main.py.
Enregistre ~12 secondes : casse plusieurs rangées de briques et fais monter le score. Enregistre le fichier sous breakout.gif dans static/sessions/05-breakout/. Taille visée : ~600×500 pixels, ≤ 2 MB.</description></item></channel></rss>