Dojo Defender Sessie 2: Coach-notities

Doel van deze sessie

Na deze sessie kan een ninja:

  • Kogels aanmaken met on_key_down en 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.zip en dojo-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:

TijdActiviteit
0:00 tot 1:00Sessie 3: Space Blaster (Stap 1-4)
1:00 tot 1:15Dojo Defender terugblik + starter downloaden
1:15 tot 1:45Stap 1-2: schieten + cooldown
1:45 tot 2:15Stap 3: vijanden spawnen + bewegen
2:15 tot 2:45Stap 4: collision + waves
2:45 tot 3:00Showcase + 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.”