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.zip en dojo-defender-s7-solution.zip.
  • De starter éénmaal draaien op de dojoruimte-laptop.
  • Controleer of boss.png en boss_minion.png in de images/ 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:

TijdActiviteit
0:00 tot 1:15Sessie 7: Bug Zapper (Stap 1-4)
1:15 tot 1:30Dojo Defender intro: state machine op het bord
1:30 tot 2:00Stap 1: boss-variabelen (Basic)
2:00 tot 2:20Stap 2: boss spawnen + HP-balk (Stretch)
2:20 tot 2:50Stap 3: boss AI + 3 fases (Expert)
2:50 tot 3:00Stap 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.”