Sessie 6: Coach-notities

Doel van deze sessie

Aan het einde van de Basic checkpoint kan een ninja:

  • De speler laten vallen dankzij vel_y en zwaartekracht.
  • Correct stoppen op platforms via colliderect.
  • Springen met SPATIE (alleen als on_ground True is).

Wat niet verwacht wordt na sessie 6: geluid, win-scherm, dubbele sprong. Die zijn Expert-materiaal.


Voorbereiding (30 min vóór de sessie)

  • Test de starter ZIP op een dojoruimte-laptop. Controleer dat pygame geïnstalleerd is (niet pgzero; dit is de eerste sessie met pure pygame).
  • sounds/jump.wav aanwezig? Controleer dat het geluidsbestand in de ZIP zit.
  • Projecteer Stap 1 live op het scherm voordat ninjas beginnen. De sprong van pgzrun naar pygame is een mentale drempel. Leg uit dat pygame dezelfde bibliotheek is, maar zonder de pgzrun-wrapper.

Tijdsindeling (3 uur)

TijdActiviteit
0:00 tot 0:10Welkom, recapitulatie sessie 5
0:10 tot 0:25Projector: uitleg pygame game loop vs. pgzrun
0:25 tot 1:30Zelfstandig werken: stap 1 en 2
1:30 tot 2:15Stretch en Expert
2:15 tot 2:45Buffer / rondlopen / helpen
2:45 tot 3:00Showcase + cliffhanger

Veelgestelde vragen

“De speler valt door de platforms heen” Controleer de volgorde: vel_y ophogen → player_rect.y aanpassen → platform-loop. Als de platform-loop vóór de beweging staat, werkt het niet. Laat de ninja de volgorde in zijn code vergelijken met de worksheet.

“De speler springt terwijl hij in de lucht is” on_ground wordt niet correct ingesteld. Controleer dat on_ground = False staat vóór de platform-loop en alleen op True gezet wordt wanneer een botsing gedetecteerd wordt. Veelvoorkomende fout: on_ground staat globaal op True.

“Geen geluid” Twee oorzaken:

  1. pygame.mixer.init() staat niet vóór pygame.mixer.Sound(...).
  2. Het script wordt vanuit een andere map gestart. Python zoekt dan sounds/jump.wav in de werkmap, niet naast main.py. De starter gebruikt _DIR = os.path.dirname(os.path.abspath(__file__)) om dit op te lossen.

“Het venster sluit meteen bij het win-scherm” running = False stopt de game loop. Als de ninja wil dat het scherm blijft, vervang running = False door een eigen wacht-loop: pygame.time.wait(3000) gevolgd door break.


Hints voor Stretch en Expert

Geef hints, geen volledige code.

Stretch: sterren verzamelen: Wijs op stars[:]. Zonder de kopie-slice zou je een RuntimeError krijgen bij het verwijderen tijdens het itereren. Dit is een goed leermoment over lijst-mutatie.

Expert: geluid: Als pygame.mixer een fout geeft, controleer dan of het systeem een audiodevice heeft. In een VM of op sommige Chromebooks ontbreekt audio-output. Als fallback: sla het geluid over en focus op het win-scherm.


Dojo Defender vandaag

Dojo Defender sessie 5 wordt geïntegreerd in deze sessie. De snapshot voegt toe:

  • Parallax sterren (drie lagen, scrollen ook in menu)
  • Particle systeem (spawn/update/draw met alpha-fade)
  • Uitlaatgassen, explosiepuin, vonkjes
  • Vernietigbare asteroïden (big → med → small → particles)

Zie content/dojo-defender/session-5/ voor de volledige worksheet.

De starter ZIP staat op: /sessions/06-platformer/dojo-defender-s6-starter.zip. De oplossing ZIP staat op: /sessions/06-platformer/dojo-defender-s6-solution.zip.

Tijdsverdeling: De eerste 75 minuten werk je aan de platformer, de resterende tijd aan Dojo Defender.


Cliffhanger-script

Lees dit voor aan de groep:

“Vandaag heeft je speler gesprongen en sterren verzameld. Volgende keer schrijven we onze EIGEN klassen: bugs die naar beneden vallen, en jij moet ze ZAP-pen voor ze je raken. En je maakt ze zelf, van nul.”