Sessie 2: Dodge Meteors
Je ruimteschip zweeft in de donkere ruimte terwijl meteoren van boven naar beneden komen. Ontwijk ze, of verlies een leven. Hoe langer je overleeft, hoe sneller ze gaan. En deze keer bouw je ook Dojo Defender: het grotere project dat elke sessie groeit.
Wat je vandaag leert
- Lijsten gebruiken om meerdere objecten bij te houden
- Objecten spawnen (aanmaken) en verwijderen
- Levens bijhouden en een game-over scherm tonen
- Dojo Defender: je eigen ruimteschip toevoegen aan het grotere project
Stap 0: Installeren
- Open Thonny.
- Download de starter via deze link, pak de ZIP uit en open
main.py. - Klik op Run. Je ziet je ruimteschip onderaan, maar er vallen nog geen meteoren.
- Problemen? Kijk bij Thonny instellen.
Stap 1: Laat meteoren spawnen
Vul de functie spawn_meteor() in. Een meteoor is een Actor die bovenaan het scherm begint op een willekeurige x-positie:
import random
def spawn_meteor():
rock = Actor('meteor')
rock.x = random.randint(30, WIDTH - 30)
rock.y = 0
meteors.append(rock)Roep de functie aan in update(), maar niet élke frame, anders wordt het scherm meteen volgestort. De update() functie draait 60 keer per seconde. Gebruik dat om een teller bij te houden:
Zie hieronder hoe snel een meteoor beweegt bij verschillende snelheden en hoeveel pixels dat per seconde is:
Gebruik een teller:
# bovenaan, buiten de functies:
timer = 0
def update():
global timer
timer += 1
if timer % 60 == 0: # elke seconde (60 frames)
spawn_meteor()Klik op Run. Na een seconde verschijnt de eerste meteoor, maar hij beweegt nog niet.
Stap 2: ✅ Basic: meteoren laten vallen en verdwijnen
Laat alle meteoren in de lijst zakken, en verwijder ze als ze het scherm uit vallen:
def update():
global timer
timer += 1
if timer % 60 == 0:
spawn_meteor()
for rock in meteors[:]: # [:] = kopie zodat je veilig kunt verwijderen
rock.y += 4
if rock.y > HEIGHT + 30:
meteors.remove(rock)Collision detecteren: Als een meteoor het schip raakt, verlies je een leven. Voeg dit toe in de loop:
if rock.colliderect(ship):
meteors.remove(rock)
global lives
lives -= 1
if lives <= 0:
# TODO: game over (stap 3)
passStap 3: ⭐ Stretch: game over en snelheid opvoeren
Game over: Voeg een variabele game_over = False toe bovenaan. Als lives == 0, zet game_over = True. In draw(), toon een tekst als game_over True is:
if game_over:
screen.draw.text(
"GAME OVER",
center=(WIDTH / 2, HEIGHT / 2),
color="red",
fontsize=60,
)Stop het bewegen in update() als game_over True is:
def update():
if game_over:
return
...Snelheid verhogen: Laat meteoren sneller gaan naarmate de score stijgt:
snelheid = 3 + score // 5 # elke 5 punten +1 snelheid
rock.y += snelheidStap 4: 🔥 Expert: score en meerdere meteoorgroottes
Score: Elke seconde dat je overleeft, +1 punt. Voeg global score toe en verhoog in update():
if timer % 60 == 0:
global score
score += 1
spawn_meteor()Meerdere groottes: Maak kleine, middel en grote meteoren. Gebruik een schaal-variabele en pas de hitbox aan:
def spawn_meteor():
rock = Actor('meteor')
rock.x = random.randint(30, WIDTH - 30)
rock.y = 0
rock.schaal = random.choice([0.5, 1.0, 1.5])
meteors.append(rock)Kleinere meteoren bewegen sneller; grotere zijn moeilijker te ontwijken maar geven meer punten.
Dojo Defender
Download de Dojo Defender starter voor vandaag. Dit is de basis van het project dat elke sessie groeit. Voeg vandaag je ruimteschip toe en laat het bewegen met de pijltjestoetsen.
Was je er vorige keer niet bij? Geen probleem — download de oplossing van vorige keer en je kan meteen mee.
Het volledige Dojo Defender werkblad vind je op de Dojo Defender pagina.
Showcase
Laat je spel zien aan een coach en een buddy. Hoe lang overleef jij? Wie haalt de hoogste score?
Tot de volgende keer!
“Volgende keer: je eigen ruimteschip SCHIET TERUG. Vijanden in formatie, en jij blast ze weg.”
Neem mee naar huis
- Makkelijk: verander de achtergrondkleur naar dieppaars of donkergroen.
- Middel: voeg een geluid toe als een meteoor het schip raakt (
sounds/hit.wav). - Lastig: maak meteoren sneller naarmate er meer op het scherm zijn (niet alleen de score).
- Erg lastig: voeg power-ups toe: een gouden ster die je een extra leven geeft als je hem aanraakt.