<?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: Sessie 5 :: CoderDojo Python &amp; Pygame</title><link>https://python.coderdojohasselt.be/dojo-defender/session-5/index.html</link><description>Vandaag geef je Dojo Defender een diepte-effect met een parallax sterrenachtergrond en explosie-deeltjes. Asteroïden worden ook vernietigbaar: grote asteroïden splitsen in kleinere.
Wat je vandaag leert Parallax rekenen: meerdere lagen sterren met eigen snelheid Deeltjeslijsten: een lijst van dictionaries voor particles Positie-gebaseerde effecten: particles spawnen op de juiste plek Recursief splitsen: grote asteroïde → 2 medium → 2 klein → weg Stap 0: Download de starter De starter is de oplossing van sessie 4 — Dojo Defender met menu, drie vijandtypes en waves.</description><generator>Hugo</generator><language>nl</language><atom:link href="https://python.coderdojohasselt.be/dojo-defender/session-5/index.xml" rel="self" type="application/rss+xml"/><item><title>Dojo Defender Sessie 5: Cheatsheet</title><link>https://python.coderdojohasselt.be/dojo-defender/session-5/cheatsheet/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://python.coderdojohasselt.be/dojo-defender/session-5/cheatsheet/index.html</guid><description>Parallax sterren 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) Particles aanmaken 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]), }) Particles updaten en tekenen 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)) Uitlaatgassen 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), ) Explosie puin 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), ) Splitsende asteroïden 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 Sessie 5: Coach-notities</title><link>https://python.coderdojohasselt.be/dojo-defender/session-5/mentor-notes/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://python.coderdojohasselt.be/dojo-defender/session-5/mentor-notes/index.html</guid><description>Doel van deze sessie Na deze sessie kan een ninja:
Een parallax sterrenachtergrond maken met drie lagen Een particle systeem bouwen met lijsten van dictionaries Positie-gebaseerde effecten toevoegen (uitlaatgassen, explosies) Recursief splitsen toepassen op asteroïden Voorbereiding (30 min vóór de sessie) Starter ZIPs klaar op USB en de site: dojo-defender-s6-starter.zip en dojo-defender-s6-solution.zip. De starter éénmaal draaien op de dojoruimte-laptop. Controleer of asteroid_med.png en asteroid_small.png in de images/ map van de starter zitten. Die zijn toegevoegd aan de shared assets en moeten in de ZIP zitten. Leg parallax uit op het bord: teken drie lagen sterren met verschillende snelheden. Leg de particle levenscyclus uit: geboren → beweegt → vervaagt → sterft. Tijdsindeling (3 uur) Deze sessie is integraal onderdeel van de normale sessie 6 (Platformer). Gebruik de tijd als volgt:</description></item><item><title>Dojo Defender Sessie 5: Demo</title><link>https://python.coderdojohasselt.be/dojo-defender/session-5/demo/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://python.coderdojohasselt.be/dojo-defender/session-5/demo/index.html</guid><description>Hoe demonstreer je de oplossing Open een terminal in de projectmap. Voer uit: uv run python3 code/sessions/06-platformer/dojo-defender-solution/main.py Laat zien:
In het MENU zie je de parallax sterrenachtergrond scrollen (drie snelheden) SPACE start het spel Beweeg het schip — zie oranje uitlaatgassen onder de motor Schiet een vijand — 8-12 deeltjes vliegen alle kanten op Laat een vijand ontsnappen — 3-5 witte vonkjes aan de onderkant Schiet een grote asteroïde — hij splitst in twee medium Schiet een medium asteroïde — hij splitst in twee kleine Schiet een kleine asteroïde — hij verdwijnt met een particle-explosie Code-highlights om te tonen:</description></item></channel></rss>