<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Dojo Defender : Session 5 :: CoderDojo Python &amp; Pygame</title><link>https://python.coderdojohasselt.be/fr/dojo-defender/session-5/index.html</link><description>Aujourd’hui, tu donnes à Dojo Defender un effet de profondeur avec un fond étoilé en parallaxe et des particules d’explosion. Les astéroïdes deviennent aussi destructibles : les grands se divisent en plus petits.
Ce que tu vas apprendre aujourd’hui Calcul de parallaxe : plusieurs couches d’étoiles avec leur propre vitesse Listes de particules : une liste de dictionnaires pour les particules Effets basés sur la position : les particules apparaissent au bon endroit Division récursive : grand astéroïde → 2 moyens → 2 petits → disparu Étape 0 : Télécharge le starter Le starter est la solution de la session 4 — Dojo Defender avec menu, trois types d’ennemis et waves.</description><generator>Hugo</generator><language>fr-BE</language><atom:link href="https://python.coderdojohasselt.be/fr/dojo-defender/session-5/index.xml" rel="self" type="application/rss+xml"/><item><title>Dojo Defender Session 5 : Cheatsheet</title><link>https://python.coderdojohasselt.be/fr/dojo-defender/session-5/cheatsheet/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://python.coderdojohasselt.be/fr/dojo-defender/session-5/cheatsheet/index.html</guid><description>Étoiles en parallaxe stars = [] def init_stars(): global stars stars = [] layers = [ (40, 0.3, 2, 120), (40, 0.7, 3, 180), (30, 1.5, 4, 255), ] for count, speed, size, brightness in layers: for _ in range(count): stars.append({ 'x': random.randint(0, WIDTH), 'y': random.randint(0, HEIGHT), 'speed': speed, 'size': size, 'brightness': brightness, }) def update_stars(): for star in stars: star['y'] += star['speed'] if star['y'] > HEIGHT + star['size']: star['y'] = -star['size'] star['x'] = random.randint(0, WIDTH) def draw_stars(surface): for star in stars: c = (star['brightness'], star['brightness'], star['brightness']) if star['size'] &lt;= 2: pygame.draw.rect(surface, c, (star['x'], star['y'], star['size'], star['size'])) else: pygame.draw.circle(surface, c, (int(star['x']), int(star['y'])), star['size'] // 2) Créer des particules particles = [] def spawn_particles(x, y, count, colors, speed_range, size_range, life_range): for _ in range(count): angle = random.uniform(0, 2 * math.pi) speed = random.uniform(speed_range[0], speed_range[1]) particles.append({ 'x': x, 'y': y, 'vx': math.cos(angle) * speed, 'vy': math.sin(angle) * speed, 'life': random.randint(life_range[0], life_range[1]), 'max_life': life_range[1], 'color': random.choice(colors), 'size': random.uniform(size_range[0], size_range[1]), }) Mettre à jour et dessiner les particules def update_particles(): for p in particles[:]: p['x'] += p['vx'] p['y'] += p['vy'] p['life'] -= 1 if p['life'] &lt;= 0: particles.remove(p) def draw_particles(surface): for p in particles: ratio = p['life'] / p['max_life'] color = tuple(int(c * ratio) for c in p['color']) pygame.draw.circle(surface, color, (int(p['x']), int(p['y'])), int(p['size'] * ratio)) Gaz d’échappement if moving and ship.visible: spawn_particles( ship.rect.centerx, ship.rect.bottom, 1, [(255, 100, 0), (255, 60, 0)], (0.5, 1.5), (2, 4), (10, 20), ) Débris d’explosion spawn_particles( enemy.rect.centerx, enemy.rect.centery, random.randint(8, 12), [(255, 140, 0), (255, 0, 0), (255, 255, 0), (255, 255, 255)], (1, 4), (2, 5), (20, 40), ) Astéroïdes qui se divisent def spawn_asteroid(size='big'): rock = GameObject(f'asteroid_{size}.png', random.randint(30, WIDTH - 30), -30) rock.speed = random.uniform(3, 5) rock.asteroid_size = size asteroids.append(rock) return rock def split_asteroid(rock): spawn_particles( rock.rect.centerx, rock.rect.centery, random.randint(8, 12), [(255, 140, 0), (255, 0, 0), (255, 255, 0), (255, 255, 255)], (1, 4), (2, 5), (20, 40), ) if rock.asteroid_size == 'big': for _ in range(2): r = spawn_asteroid('med') r.rect.center = rock.rect.center r.rect.x += random.randint(-20, 20) r.speed = random.uniform(2, 4) elif rock.asteroid_size == 'med': for _ in range(2): r = spawn_asteroid('small') r.rect.center = rock.rect.center r.rect.x += random.randint(-15, 15) r.speed = random.uniform(1, 3) asteroids.remove(rock)</description></item><item><title>Dojo Defender Session 5 : Démo</title><link>https://python.coderdojohasselt.be/fr/dojo-defender/session-5/demo/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://python.coderdojohasselt.be/fr/dojo-defender/session-5/demo/index.html</guid><description>Comment montrer la solution Ouvre un terminal dans le dossier du projet. Lance : uv run python3 code/sessions/06-platformer/dojo-defender-solution/main.py Montre :
Dans le MENU, tu vois le fond étoilé en parallaxe défiler (trois vitesses) ESPACE lance le jeu Bouge le vaisseau — tu vois les gaz d’échappement orange sous le moteur Tire sur un ennemi — 8-12 particules volent dans tous les sens Laisse un ennemi s’échapper — 3-5 étincelles blanches en bas Tire sur un grand astéroïde — il se divise en deux moyens Tire sur un astéroïde moyen — il se divise en deux petits Tire sur un petit astéroïde — il disparaît dans une explosion de particules Points de code à montrer :</description></item><item><title>Dojo Defender Session 5 : Notes du coach</title><link>https://python.coderdojohasselt.be/fr/dojo-defender/session-5/mentor-notes/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://python.coderdojohasselt.be/fr/dojo-defender/session-5/mentor-notes/index.html</guid><description>Objectif de cette session Après cette session, un ninja sait :
Créer un fond étoilé en parallaxe avec trois couches Construire un système de particules avec des listes de dictionnaires Ajouter des effets basés sur la position (gaz d’échappement, explosions) Appliquer une division récursive aux astéroïdes Préparation (30 min avant la session) Les ZIP du starter prêts sur USB et sur le site : dojo-defender-s6-starter.fr.zip et dojo-defender-s6-solution.fr.zip. Lancer le starter une fois sur le portable de la salle dojo. Vérifie que asteroid_med.png et asteroid_small.png se trouvent dans le dossier images/ du starter. Ces images ont été ajoutées aux shared assets et doivent être dans le ZIP. Explique la parallaxe au tableau : dessine trois couches d’étoiles avec des vitesses différentes. Explique le cycle de vie d’une particule : naît → bouge → s’estompe → meurt. Répartition du temps (3 heures) Cette session fait partie intégrante de la session normale 6 (Platformer). Utilise le temps comme ceci :</description></item></channel></rss>