Dojo Defender Sessie 2: Coach-notities
Doel van deze sessie
Na deze sessie kan een ninja:
- Kogels aanmaken met
on_key_downen een cooldown-mechanisme - Enemy-objecten spawnen en laten bewegen met sinus-oscillatie
- Collision detectie tussen kogels en vijanden (geneste loop)
- Wavesysteem opzetten met oplopende moeilijkheid
Voorbereiding (30 min vóór de sessie)
- Starter ZIPs klaar op USB en de site:
dojo-defender-s3-starter.zipendojo-defender-s3-solution.zip. - De starter zelf éénmaal draaien op de dojoruimte-laptop.
- Ninjas die S1 misten: verwijs naar de S1-oplossing.
Tijdsindeling (3 uur)
Deze sessie is integraal onderdeel van de normale sessie 3 (Space Blaster). Gebruik de tijd als volgt:
| Tijd | Activiteit |
|---|---|
| 0:00 tot 1:00 | Sessie 3: Space Blaster (Stap 1-4) |
| 1:00 tot 1:15 | Dojo Defender terugblik + starter downloaden |
| 1:15 tot 1:45 | Stap 1-2: schieten + cooldown |
| 1:45 tot 2:15 | Stap 3: vijanden spawnen + bewegen |
| 2:15 tot 2:45 | Stap 4: collision + waves |
| 2:45 tot 3:00 | Showcase + cliffhanger |
Veelgestelde vragen
"‘on_key_down’ wordt niet herkend"
Dit is een Pgzero-callback — de functie moet exact on_key_down heten met key als parameter. Geen typo’s.
“Mijn kogels verdwijnen meteen”
Kogels hebben y -= 8 maar beginnen op ship.y - 20. Check of bullet.y niet meteen onder -10 zit. Als het schip te hoog staat, kan dat gebeuren.
“RuntimeError: list changed during iteration”
De ninja gebruikt for enemy in enemies (zonder [:]) terwijl hij enemies.remove() aanroept. Leg uit dat [:] een kopie maakt.
“De vijanden bewegen niet sinus-achtig”
De sinus-oscillatie heeft start_x, strafe_amplitude en strafe_speed nodig als velden op de Actor. Nieuwere ninjas kunnen eerst een eenvoudige ping-pong beweging doen.
“De wave-teller klopt niet”
enemies_destroyed % 10 == 0 triggert elke 10 kills. Als de ninja enemies_destroyed niet global declareert in de functie, werkt de teller niet.
Hints voor Stretch en Expert
Basic: schiet-cooldown Leg uit waarom cooldown nodig is: zonder cooldown vuurt de computer duizenden kogels per seconde bij ingedrukte SPATIE.
Stretch: vijanden
spawn_interval = 120 is 2 seconden bij 60 fps. Naarmate de score stijgt, daalt het interval naar 60 (1 seconde).
Expert: collision + waves
De geneste loop (kogels × vijanden) is het moeilijkste concept. Teken het uit op het bord: voor elke kogel controleer je álle vijanden. break is nodig om te stoppen na een hit.
Expert: sinus-beweging
math.sin(timer * speed + offset) * amplitude is een golf. timer zorgt dat de golf steeds verder gaat. Zonder start_x zweeft de vijand weg van zijn beginpositie.
Cliffhanger-script
“Vandaag heb je vijanden neergeschoten en waves overleefd. Volgende keer: POWER-UPS. Schilden die je beschermen, speed-boosts die je sneller maken, en spread-shots die drie kogels tegelijk vuren. Je schip wordt sterker naarmate je langer overleeft.”