<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Session 7 : Bug Zapper :: CoderDojo Python &amp; Pygame</title><link>https://python.coderdojohasselt.be/fr/sessions/python/07-bug-zapper/index.html</link><description>Les bugs tombent du haut vers le bas. Toi, tu tires vers le haut pour les toucher. Dans cette session, tu apprends la POO : tu écris ta première classe à toi (Bug), puis deux sous-classes : une qui oscille et une qui plonge sur toi. Les classes sont les briques de presque tous les gros programmes.
Ce que tu vas apprendre aujourd’hui Écrire une classe avec __init__ et tes propres méthodes L’héritage : une sous-classe qui étend une classe existante Garder les projectiles dans une liste La détection de collision entre les projectiles et les bugs Étape 0 : Installation Ouvre Thonny. Télécharge le starter via ce lien, décompresse le ZIP et ouvre main.py dans Thonny. Clique sur Run. Tu vois un écran avec un joueur en bas, mais pas encore de bugs et pas de projectiles. Des problèmes ? Demande à un coach. Étape 1 : Faire apparaître des bugs et tirer La classe Bug</description><generator>Hugo</generator><language>fr-BE</language><atom:link href="https://python.coderdojohasselt.be/fr/sessions/python/07-bug-zapper/index.xml" rel="self" type="application/rss+xml"/><item><title>Session 7 : Notes du coach</title><link>https://python.coderdojohasselt.be/fr/sessions/python/07-bug-zapper/mentor-notes/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://python.coderdojohasselt.be/fr/sessions/python/07-bug-zapper/mentor-notes/index.html</guid><description>Objectif de cette session À la fin du checkpoint Basic, un ninja sait :
Écrire une classe avec __init__, des attributs et une méthode update(). Instancier des bugs et les garder dans une liste. Appliquer la détection de collision entre les projectiles et les bugs. Ce qui n’est pas attendu après la session 7 : les sous-classes, le mouvement avec math.sin, le DuikBug. Ça, c’est du matériel Stretch/Expert.
Préparation (30 min avant la session) Expliquer les classes en 5 minutes au projecteur. C’est le concept nouveau le plus important. Utilise un exemple simple : class Hond: avec self.naam et une méthode blaf(). Demande aux ninjas des analogies. import math est déjà dans le starter, donc les ninjas ne doivent pas le chercher eux-mêmes pour l’étape 3. Vérifie le timer de spawn dans le starter (par défaut toutes les 90 frames). Adapte-le si le niveau de difficulté ne colle pas à ton groupe. Répartition du temps (3 heures) Temps Activité 0:00 à 0:10 Accueil, récapitulatif de la session 6 0:10 à 0:25 Projecteur : explication des classes et des instances 0:25 à 1:30 Travail en autonomie : étapes 1 et 2 1:30 à 2:15 Stretch (SlingerBug) 2:15 à 2:45 Expert (DuikBug) + buffer 2:45 à 3:00 Showcase + cliffhanger Questions fréquentes « AttributeError: ‘Bug’ object has no attribute ‘alive’ » self.alive = True manque dans __init__. Fais vérifier le __init__ au ninja : l’indentation est correcte ? Il y a bien self. devant alive ?</description></item><item><title>Session 7 : Cheatsheet</title><link>https://python.coderdojohasselt.be/fr/sessions/python/07-bug-zapper/cheatsheet/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://python.coderdojohasselt.be/fr/sessions/python/07-bug-zapper/cheatsheet/index.html</guid><description>Écrire une classe class Bug: def __init__(self, x, y): self.x = x self.y = y self.alive = True def update(self): self.y += 2 def draw(self, screen): pygame.draw.circle(screen, GREEN, (int(self.x), int(self.y)), 15) Utiliser une classe mijn_bug = Bug(200, 0) # créer mijn_bug.update() # appeler une méthode mijn_bug.draw(screen) Sous-classe (héritage) class SlingerBug(Bug): def __init__(self, x, y): super().__init__(x, y) # appelle Bug.__init__ self.timer = 0 def update(self): # remplace Bug.update self.timer += 0.05 self.x = self.start_x + math.sin(self.timer) * 60 self.y += 1.5 math.sin pour osciller import math self.x = start_x + math.sin(timer) * amplitude # augmenter le timer à chaque frame : timer += 0.05 Garder les projectiles dans une liste bullets = [] # Créer : bullets.append(pygame.Rect(x - 3, y - 20, 6, 12)) # Déplacer : for b in bullets[:]: b.y -= 10 if b.y &lt; 0: bullets.remove(b) Collision projectile ↔ bug bug_rect = pygame.Rect(bug.x - 15, bug.y - 15, 30, 30) for bullet in bullets[:]: if bullet.colliderect(bug_rect): bug.alive = False bullets.remove(bullet) score += 1 break Timer de spawn avec USEREVENT SPAWN = pygame.USEREVENT + 1 pygame.time.set_timer(SPAWN, 1500) # toutes les 1,5 secondes for event in pygame.event.get(): if event.type == SPAWN: bugs.append(Bug(random.randint(30, WIDTH - 30), -20))</description></item><item><title>Session 7 : Enregistrement de la démo</title><link>https://python.coderdojohasselt.be/fr/sessions/python/07-bug-zapper/demo/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://python.coderdojohasselt.be/fr/sessions/python/07-bug-zapper/demo/index.html</guid><description>La session 7 utilise du pygame pur. Montre un GIF de la solution sur la page de la session.
Comment enregistrer Lance la solution : cd code/sessions/07-bug-zapper/solution &amp;&amp; python main.py. Utilise un enregistreur d’écran : Linux : Peek ou SimpleScreenRecorder. Windows : ScreenToGif. macOS : QuickTime → exporte en GIF via ffmpeg ou Kap. Enregistre ~15 secondes : montre un Bug normal, un SlingerBug et un DuikBug qui se font descendre. Enregistre le fichier sous bug-zapper.gif dans static/sessions/07-bug-zapper/. Fais-y référence dans la fiche de travail via : ![Demo](/sessions/07-bug-zapper/bug-zapper.gif). Taille visée : ~800×500 pixels, ≤ 2 MB.</description></item></channel></rss>