Dojo Defender Sessie 6: Coach-notities
Doel van deze sessie
Na deze sessie kan een ninja:
- Een state machine bouwen voor een boss (PHASE_1/2/3/EXPLODING)
- Een HP-balk tekenen met dynamische vulgraad en kleur
- Doelzoekende kogels maken met vector-wiskunde (dx / dist * speed)
- Screen shake implementeren via willekeurige teken-offset
- Fase-overgangen tonen met visuele effecten (knipperen)
Voorbereiding (30 min vóór de sessie)
- Starter ZIPs klaar op USB en de site:
dojo-defender-s7-starter.zipendojo-defender-s7-solution.zip. - De starter éénmaal draaien op de dojoruimte-laptop.
- Controleer of
boss.pngenboss_minion.pngin deimages/map van de starter zitten. - Leg de state machine uit op het bord: teken een cirkeldiagram met 4 toestanden (PHASE_1 → PHASE_2 → PHASE_3 → EXPLODING) en pijlen ertussen.
- Leg eenheidsvector uit: “dx / dist” geeft een richting met lengte 1. Handig voor kogels in élke richting.
Tijdsindeling (3 uur)
Deze sessie is integraal onderdeel van de normale sessie 7 (Bug Zapper). Gebruik de tijd als volgt:
| Tijd | Activiteit |
|---|---|
| 0:00 tot 1:15 | Sessie 7: Bug Zapper (Stap 1-4) |
| 1:15 tot 1:30 | Dojo Defender intro: state machine op het bord |
| 1:30 tot 2:00 | Stap 1: boss-variabelen (Basic) |
| 2:00 tot 2:20 | Stap 2: boss spawnen + HP-balk (Stretch) |
| 2:20 tot 2:50 | Stap 3: boss AI + 3 fases (Expert) |
| 2:50 tot 3:00 | Stap 4: boss verslaan + showcase |
Veelgestelde vragen
“De boss verschijnt niet op wave 5”
Check of check_boss_wave() wordt aangeroepen na wave += 1. Ook: de check wave >= 5 and wave % 5 == 0 moet kloppen. Wave 5, 10, 15, etc.
“De boss schiet niet”
fire_boss_bullet() wordt alleen aangeroepen als de timer telt en reset. Controleer of boss_shoot_timer wordt opgehoogd en gereset.
“Minions spawnen de hele tijd”
De spawn_boss_minion() functie heeft een timer van 180 frames (~3 seconden op 60fps). Ninja’s kunnen dit aanpassen.
**“Het scherm schudt ook na de boss”"
screen_shake_x en screen_shake_y moeten worden teruggezet naar 0 als de boss weg is. Zet een else-tak: screen_shake_x = 0.
“De HP-balk is leeg”
boss_hp / boss_hp_max kan 0 zijn als boss_hp niet correct wordt geïnitialiseerd. Controleer of start_boss() echt boss_hp = boss_hp_max zet.
“Bullets raken de boss niet”
De boss collision check moet ná de enemy-loop maar vóór de volgende bullet-iteratie. Ninja’s vergeten soms if boss_active: toe te voegen.
Hints voor Stretch en Expert
Stretch: Boss spawnen + HP-balk
De HP-balk is een aparte teken-opdracht die niet in de GameObject.draw() past. Ninja’s moeten pygame.draw.rect() direct gebruiken voor de balk. Laat ze eerst een lege balk tekenen, dan de vulling, dan de rand.
Expert: boss AI De state machine is het moeilijkste concept. Teken op het bord:
- PHASE_1: langzaam, 1 kogel per 60 frames
- PHASE_2: sneller, 1 kogel per 40 frames + minions
- PHASE_3: snel, 2 kogels per 20 frames + minions + screen shake
De fase-overgang gebeurt op HP-grenzen (66% en 33%). Laat ninja’s de grenzen uitrekenen: 50 * 0.66 ≈ 33, 50 * 0.33 ≈ 16.
Screen shake:
Willekeurige offset toevoegen aan teken-coördinaten is simpel, maar het moet overal: sterren, particles, vijanden, de boss zelf. De eenvoudigste manier: draw_stars(screen, screen_shake_x, screen_shake_y) en de offset doorgeven als parameters.
Cliffhanger-script
“Vandaag heb je een eindbaas gebouwd met 3 fases, doelzoekende kogels en screen shake. Volgende keer: de gepolijste versie. Een menu-scherm, geluidseffecten, high scores — en daarna mag je er je eigen ding van maken.”