Dojo Defender Sessie 4: Coach-notities
Doel van deze sessie
Na deze sessie kan een ninja:
- Een state machine toepassen (MENU → PLAYING → GAME_OVER)
- Een reset-functie schrijven die alle globale variabelen terugzet
- Verschillende vijand-AI implementeren (drone, zigzag, charger)
- Een wave-systeem bouwen dat de moeilijkheidsgraad opvoert
Voorbereiding (30 min vóór de sessie)
- Starter ZIPs klaar op USB en de site:
dojo-defender-s5-starter.zipendojo-defender-s5-solution.zip. - De starter éénmaal draaien op de dojoruimte-laptop.
- Controleer of
enemy_zigzag.pngenenemy_charger.pngin deimages/map van de starter zitten. - Leg de state machine uit op het bord: teken drie blokken (MENU, PLAYING, GAME_OVER) met pijlen ertussen.
Tijdsindeling (3 uur)
Deze sessie is integraal onderdeel van de normale sessie 5 (Breakout). Gebruik de tijd als volgt:
| Tijd | Activiteit |
|---|---|
| 0:00 tot 1:15 | Sessie 5: Breakout (Stap 1-4) |
| 1:15 tot 1:30 | Dojo Defender intro: state machine op het bord tekenen |
| 1:30 tot 2:00 | Stap 1-2: menu + game over + reset (Basic) |
| 2:00 tot 2:30 | Stap 3: drie vijandtypes (Stretch) |
| 2:30 tot 2:50 | Stap 4: enhanced waves (Expert) |
| 2:50 tot 3:00 | Showcase + cliffhanger |
Veelgestelde vragen
“Mijn game-over scherm is zwart”
Je tekent waarschijnlijk niets in de elif state == "GAME_OVER" tak. Zorg dat screen.fill() en het tekenen van de GAME OVER tekst in die tak zitten. Gebruik dezelfde achtergrond als PLAYING.
“De reset werkt niet helemaal”
De reset_game() functie vergeet vaak één variabele. De meest vergeten: shoot_cooldown, explosion_active, explosion_frame, spawn_counter. Laat de ninja controleren of ALLES teruggezet wordt.
“De zigzag vliegt van het scherm”
De zigzag kan aan de rand blijven “plakken” als enemy.dx niet wordt omgekeerd. Controleer of de check enemy.rect.left <= 0 or enemy.rect.right >= WIDTH voor de beweging staat — nee, hij moet na de beweging komen, of de check moet goed zijn. De volgorde is: beweeg x, dan check of ie eruit is, dan keer om. Let op: als de snelheid te hoog is kan hij nog steeds door de rand schieten.
“De charger is te snel / te langzaam”
Pas de * 0.8 factor aan. Bij * 1.0 is de charger even snel naar beneden als horizontaal. Experimenteer. Tip: vertraag de charger iets meer voor beginners, maak hem sneller naarmate de wave hoger is.
“SPACE schiet ook nog in het menu”
De SPACE-toets moet eerst checken wat state is. Laat ninja’s de KEYDOWN-logic herschrijven zoals in stap 1. Als de volgorde verkeerd is (eerst schieten checken, dan pas menu) dan schiet de speler per ongeluk in het menu.
“Mijn game stopt niet na game over”
state = "GAME_OVER" moet gezet worden als lives <= 0. Controleer of dit op alle plekken gebeurt waar de speler schade oploopt (asteroïde raakt schip, vijand raakt schip, vijand bereikt onderkant).
Hints voor Stretch en Expert
Stretch: drie vijandtypes
De makkelijkste fout: de enemy.type niet zetten in de spawn-functie. Dan is enemy.type ongedefinieerd en doet de bewegings-logic niets. Laat ninja’s een print(enemy.type) toevoegen om te debuggen.
Expert: enhanced waves
Het wave-systeem is de kers op de taart. Alleen als Stap 3 werkt. Laat ninja’s eerst een spawn_enemy() functie maken die de drie anderen aanroept. Daarna kunnen ze de wave-logic toevoegen.
Uitdaging voor snelle ninja’s: “Wat gebeurt er als de charger naar links/rand stuurt? En wat als je de snelheid van de charger laat oplopen met de wave?”
Cliffhanger-script
“Jullie hebben Dojo Defender een menu gegeven, drie vijandtypes en een wave-systeem dat steeds moeilijker wordt. Volgende keer: POWER-UPS. Schilden die je beschermen, speed-boosts en spread-shots die drie kogels tegelijk schieten. Houd je vast.”