Sessie 6: Platformer
In deze sessie bouw je een micro-platformer. Je speler heeft zwaartekracht, kan springen, en verzamelt sterren op platforms. Je gebruikt voor het eerst pygame direct, zonder pgzrun, en voegt geluidseffecten toe met pygame.mixer.
Wat je vandaag leert
- Zwaartekracht simuleren met een
vel_yvariabele - Springen door
vel_ynegatief te maken - Platformbotsingen detecteren met
pygame.Rect - Items verzamelen (collision met sterren)
- Geluiden afspelen met
pygame.mixer
Stap 0: Installeren
- Open Thonny.
- Download de starter via deze link, pak de ZIP uit en open
main.pyin Thonny. - Klik op de groene Run-knop. Je ziet een venster met een speler, platforms en sterren, maar de speler valt nog niet.
- Problemen? Vraag een coach.
Stap 1: Zwaartekracht
In een platformer valt de speler continu naar beneden, tenzij hij op een platform staat. We simuleren dat met vel_y: een verticale snelheid die elke frame groter wordt door zwaartekracht.
Zoek de # STAP 1 comment in main.py en vervang de pass door:
# Zwaartekracht toepassen
vel_y += GRAVITY
player_rect.y += vel_y
# Controleer of speler op een platform staat
on_ground = False
for platform in platforms:
if (player_rect.colliderect(platform) and vel_y > 0):
player_rect.bottom = platform.top
vel_y = 0
on_ground = TrueGRAVITY = 0.5 staat al bovenaan het bestand. Klik Run. De speler valt nu naar het dichtstbijzijnde platform en blijft daar staan.
Wat gebeurt hier? Elke frame wordt vel_y iets groter (de speler versnelt naar beneden). Als de speler een platform raakt terwijl hij naar beneden valt (vel_y > 0), zet je zijn onderkant (bottom) precies op de bovenkant van het platform en stop je de val (vel_y = 0).
Stap 2: ✅ Basic: springen
Een platformer zonder springen is maar half af. Druk op SPATIE om te springen: dat is niets anders dan vel_y plotseling negatief maken.
Zoek de # STAP 2 comment en voeg toe:
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player_rect.x -= SPEED
if keys[pygame.K_RIGHT]:
player_rect.x += SPEED
# Springen — alleen als je op de grond staat
if keys[pygame.K_SPACE] and on_ground:
vel_y = -12Klik Run en test:
- Pijltjestoetsen: beweeg links/rechts
- SPATIE: spring omhoog
Tip: Als de speling te hoog of te laag voelt, verander dan -12 in -10 (lager springen) of -15 (hoger springen).
Stap 3: ⭐ Stretch: sterren verzamelen
Laten we iets te verzamelen toevoegen. De starter heeft al een lijst stars met pygame.Rect-objecten. Jij schrijft de botsingsdetectie.
Zoek de # STAP 3 comment:
for star in stars[:]: # [:] zodat je veilig kunt verwijderen tijdens het loopen
if player_rect.colliderect(star):
stars.remove(star)
score += 1En in de tekenfunctie (zoek # TEKEN STERREN):
for star in stars:
pygame.draw.polygon(screen, YELLOW, star_points(star.centerx, star.centery, 12, 5))star_points() is al gedefinieerd in de starter. Die berekent de punten van een 5-puntige ster.
Bovenaan het spel staat score = 0. Teken de score op het scherm (zoek # TEKEN SCORE):
score_surf = font.render(f"Sterren: {score}", True, WHITE)
screen.blit(score_surf, (10, 10))Stap 4: 🔥 Expert: geluid en win-scherm
Nu voeg je een springgeluid toe en een win-scherm als alle sterren verzameld zijn.
Geluid laden (dit staat al klaar in de starter; controleer dat jump.wav in de sounds/ map zit):
pygame.mixer.init()
jump_snd = pygame.mixer.Sound("sounds/jump.wav")Geluid afspelen bij springen: voeg toe aan de sprong-code:
if keys[pygame.K_SPACE] and on_ground:
vel_y = -12
jump_snd.play()Win-scherm: voeg toe na de ster-loop:
if len(stars) == 0:
win_surf = font.render("Gewonnen! Alle sterren verzameld!", True, YELLOW)
screen.blit(win_surf, (WIDTH // 2 - win_surf.get_width() // 2, HEIGHT // 2))
pygame.display.flip()
pygame.time.wait(3000)
running = FalseShowcase
Laat je spel zien aan een coach en een buddy. Kun je alle sterren verzamelen voor de tijd om is?
Dojo Defender
De Dojo Defender snapshot van vandaag bouwt verder op sessie 5:
- Parallax sterrenachtergrond — drie lagen sterren met eigen snelheid
- Particle effects — uitlaatgassen, explosiepuin, vonkjes
- Vernietigbare asteroïden — big → med → small → weg
Download de Dojo Defender starter of oplossing.
Tot de volgende keer!
“Volgende keer: klik op bugs en ZAP ze weg, met je eigen klassen.”
Neem mee naar huis
Probeer thuis één van deze uitbreidingen:
- Makkelijk: verander de kleur van de speler als hij in de lucht is.
- Middel: voeg een timer toe. De speler heeft 30 seconden om alle sterren te verzamelen.
- Lastig: voeg een vijand toe die heen en weer loopt op een platform; als de speler hem raakt, herstart het spel.
- Erg lastig: laat de speler dubbel springen (twee keer SPATIE voor een tweede sprong in de lucht).