Dojo Defender Sessie 3: Coach-notities
Doel van deze sessie
Na deze sessie kan een ninja:
- Het verschil uitleggen tussen pgzero en raw pygame
- De game loop zelf schrijven (
while running: clock.tick(60)) - Actors omzetten naar GameObject met Surface en Rect
- Input afhandelen met
pygame.key.get_pressed()enKEYDOWN - Geluid laden en afspelen met
pygame.mixer
Voorbereiding (30 min vóór de sessie)
- Starter ZIPs klaar op USB en de site:
dojo-defender-s4-starter.zipendojo-defender-s4-solution.zip. - De starter éénmaal draaien op de dojoruimte-laptop.
- Zorg dat de sounds klaar staan in
dojo-defender-assets/sounds/, óf verwijs ninja’s naar de oplossing. - Leg uit waarom we overstappen: “pgzero is een trainingswieltje. Nu worden jullie échte Pygame-developers.”
Tijdsindeling (3 uur)
Deze sessie is integraal onderdeel van de normale sessie 4 (Pong). Gebruik de tijd als volgt:
| Tijd | Activiteit |
|---|---|
| 0:00 tot 1:15 | Sessie 4: Pong (Stap 1-4) |
| 1:15 tot 1:30 | Dojo Defender intro: pgzero vs pygame uitleg |
| 1:30 tot 2:00 | Verken de code + restart (Basic) |
| 2:00 tot 2:30 | Geluid toevoegen (Stretch) |
| 2:30 tot 2:50 | Expert: mute-knop, volume, particles |
| 2:50 tot 3:00 | Showcase + cliffhanger |
Veelgestelde vragen
“De afbeeldingen worden niet geladen”
Waarschijnlijk mist de .png extensie. In pgzero deed die dat automatisch, in pygame niet. Controleer: GameObject('player_ship.png', ...).
"pygame.image.load geeft een fout"
Het pad moet kloppen. De starter gebruikt _DIR om het script-pad te bepalen. Zet print(_DIR) om te debuggen.
“Het geluid werkt niet”
Controleer of pygame.mixer.init() is aangeroepen. Zonder die regel doet pygame.mixer.Sound() niets.
“Ik hoor niks bij bg_music”
pygame.mixer.music.play(-1) is nodig — zonder -1 speelt het maar één keer.
“Waarom zit alles in één while-lus?”
Omdat pygame geen draw() en update() functies heeft. Alles gebeurt in de loop. Dit is hoe echte games werken: elke frame, alles opnieuw.
Hints voor Stretch en Expert
Stretch: geluid
De simpelste aanpak: kopieer de sounds uit de oplossingsmap. Of download de dojo-defender-assets apart.
Expert: mute
Gebruik één muted boolean. pygame.mixer.music.set_volume(0) dempt de muziek. Voor SFX moet je elke play() omwikkelen met if not muted:.
Expert: particle-effect Een simpele particle: sla (x, y, dx, dy, levensduur) op in een dict. Laat ze elke frame bewegen en vervagen. Verwijder als levensduur 0 is.
Cliffhanger-script
“Jullie hebben Dojo Defender overgezet naar echte pygame en geluid toegevoegd. Volgende keer: POWER-UPS. Schilden, speed-boosts, spread-shots. En een échte baas aan het einde van de waves.”