Sessie 8: Coach-notities
Doel van deze sessie
Aan het einde van de Basic checkpoint kan een ninja:
- De achtergrond naadloos laten scrollen met de dubbele-blit techniek.
- Obstakels van rechts naar links bewegen en verwijderen als ze het scherm uit zijn.
- Levens aftrekken bij een botsing en het spel stoppen bij 0 levens.
Wat niet verwacht wordt na sessie 8: sterren, moeilijkheidsscaling, game over scherm. Die zijn Stretch/Expert-materiaal.
Voorbereiding (30 min vóór de sessie)
- De achtergrondafbeelding in de starter moet precies
WIDTHpixels breed zijn (standaard 800px) zodat de dubbele-blit naadloos werkt. speedis een float. Wijs ninjas erop datpygame.Rectalleen integers accepteert. De starter gebruiktint(scroll_x)al; controleer dat ninjas dit niet verwijderen.- Spawn-timer: de starter gebruikt
pygame.USEREVENT + 1. Leg kort uit hoepygame.time.set_timerwerkt: het stuurt automatisch een event elke N milliseconden.
Tijdsindeling (3 uur)
| Tijd | Activiteit |
|---|---|
| 0:00 tot 0:10 | Welkom, terugblik sessie 7 |
| 0:10 tot 0:20 | Projector: scrollende achtergrond uitleggen |
| 0:20 tot 1:30 | Zelfstandig werken: stap 1 en 2 |
| 1:30 tot 2:15 | Stretch (sterren) |
| 2:15 tot 2:45 | Expert (snelheid schalen) + buffer |
| 2:45 tot 3:00 | Showcase + cliffhanger |
Veelgestelde vragen
“De achtergrond flikkert”
int(scroll_x) ontbreekt bij het blitten. pygame.Surface.blit verwacht integers; als je een float doorgeeft, maakt pygame er intern één van maar dit kan frameconsistentieproblemen geven. Controleer beide blit-aanroepen.
“Obstakels worden niet verwijderd”
Controleer dat de obstacles.remove(obs) binnen de colliderect-check staat, niet erbuiten. Veelvoorkomend: de if staat op de verkeerde inspringing.
“Speed wordt steeds sneller maar obstakels spawnen niet vaker”
pygame.time.set_timer moet elke frame opnieuw aangeroepen worden als het interval verandert. Voeg dit toe aan de game loop, niet eenmalig bij initialisatie. Alternatief: gebruik een frame-teller in plaats van een timer.
“Game over scherm verdwijnt meteen”
pygame.time.wait(3000) werkt buiten de game loop. Maar als running = False al gezet is vóór de extra blit en wait, werkt het niet. Zorg dat de game over blit en wait na de while running loop staan, of gebruik een aparte game_over-vlag.
Hints voor Stretch en Expert
Stretch: sterren:
Sterren zijn ook pygame.Rect-objecten. Wijs ninjas erop dat star.center een tuple (x, y) geeft, handig voor pygame.draw.circle.
Expert: snelheid schalen:
speed = BASE_SPEED + score * 0.1 is eenvoudig maar effectief. Leg uit waarom we max(500, ...) gebruiken bij het spawn-interval: zonder minimum zou het interval negatief of nul worden bij een hoge score.
Dojo Defender vandaag
Sessie 7 van Dojo Defender = ninja’s kiezen en bouwen hun eigen feature. Dit gebeurt in de tweede helft van de sessie (na Sky Highway).
Voorbereiding
- Starter ZIP:
dojo-defender-s8-starter.zipincode/sessions/08-sky-highway/dojo-defender-starter/— dit is de complete DD S6 oplossing (met boss). - Print de planning-sjablonen uit de Dojo Defender worksheet.
- Spreek met coaches af wie welke ninja’s begeleidt tijdens het Dojo Defender deel.
Tijd
| Tijd | Activiteit |
|---|---|
| 1:15 tot 1:30 | Dojo Defender intro |
| 1:30 tot 1:45 | Feature kiezen + plannen |
| 1:45 tot 2:30 | Zelfstandig bouwen |
| 2:30 tot 2:50 | Showcase |
Mogelijke features (voor coaches)
- Power-ups (makkelijk): vijanden droppen power-ups (spread shot, shield, speed boost) met 20% kans.
- High score (makkelijk): bewaar hoogste score in
highscore.txt, toon op menu en game-over. - Moeilijkheid (makkelijk): pas spawn-interval, vijand-snelheid of aantal levens aan.
- Nieuwe vijand (moeilijk): een vijand die een spoor van deeltjes achterlaat.
- Eigen idee (alle niveaus): ninja bedenkt zelf een feature.
Bewaken: Ninja’s willen vaak te veel tegelijk. Help ze de kleinste werkende versie kiezen.
Cliffhanger-script
Lees dit voor aan de groep:
“Vandaag heeft je schip een eindeloze weg gevlogen. Volgende keer komt er iemand die TERUGVECHT: een baas met drie fases, een HP-balk, en kogels die op jou afkomen. Kan jij hem verslaan?”