Sessie 3: Space Blaster
Vijanden staan in formatie bovenaan het scherm. Jij staat onderaan met een ruimteschip en één doel: ze allemaal uitschakelen voordat ze de bodem bereiken. Druk op SPATIE om te schieten, en mis niet.
Wat je vandaag leert
- Kogels bijhouden in een lijst
- Een kogel aanmaken als je op SPATIE drukt
- Collision tussen kogels en vijanden
- Game over als een vijand de bodem raakt
Stap 0: Installeren
- Open Thonny.
- Download de starter via deze link, pak de ZIP uit en open
main.py. - Klik op Run. Je ziet het schip onderaan en 12 vijanden in een raster, maar niks beweegt en je kunt nog niet schieten.
Stap 1: Laat het schip bewegen
Het schip beweegt al met de pijltjestoetsen. Controleer de code in update(). Zorg dat het schip niet buiten het scherm gaat:
if keyboard.left and ship.x > 30:
ship.x -= 5
if keyboard.right and ship.x < WIDTH - 30:
ship.x += 5Stap 2: ✅ Basic: schieten met SPATIE
Vul de functie shoot() in. Een kogel is een Actor die begint op de positie van het schip:
def shoot():
kogel = Actor('bullet')
kogel.x = ship.x
kogel.y = ship.y - 20
bullets.append(kogel)Roep shoot() aan als de spatiebalk wordt ingedrukt. Gebruik on_key_down (Pgzero-stijl):
def on_key_down(key):
if key == keys.SPACE:
shoot()Laat de kogels omhoog bewegen in update() en verwijder ze als ze het scherm uit gaan:
for kogel in bullets[:]:
kogel.y -= 8
if kogel.y < -10:
bullets.remove(kogel)Stap 3: ⭐ Stretch: vijanden raken
colliderect controleert of de rechthoekige hitbox van twee actors overlapt. Beweeg je muis over het scherm hieronder om te zien wanneer dat gebeurt:
Controleer in update() of een kogel een vijand raakt:
for kogel in bullets[:]:
kogel.y -= 8
if kogel.y < -10:
bullets.remove(kogel)
continue
for vijand in enemies[:]:
if kogel.colliderect(vijand):
bullets.remove(kogel)
enemies.remove(vijand)
global score
score += 10
breakWin-conditie: Als enemies leeg is, heb je gewonnen:
if not enemies:
screen.draw.text("JE WINT!", center=(WIDTH/2, HEIGHT/2), color="yellow", fontsize=60)Stap 4: 🔥 Expert: vijanden bewegen en game over
Laat de vijanden langzaam naar beneden komen. Gebruik een timer:
vijand_timer = 0
def update():
global vijand_timer
vijand_timer += 1
if vijand_timer % 90 == 0: # elke 1,5 seconde
for vijand in enemies:
vijand.y += 20Game over als een vijand de bodem bereikt:
for vijand in enemies:
if vijand.y > HEIGHT - 30:
global game_over
game_over = TrueSnellere schietfrequentie: Bouw een cooldown in zodat de ninja niet oneindig snel kan schieten:
shoot_cooldown = 0
def update():
global shoot_cooldown
if shoot_cooldown > 0:
shoot_cooldown -= 1
def on_key_down(key):
global shoot_cooldown
if key == keys.SPACE and shoot_cooldown == 0:
shoot()
shoot_cooldown = 15Showcase
Laat je spel zien aan een coach. Hoe snel maak jij alle vijanden weg? Vergelijk scores met een buddy.
Tot de volgende keer!
“Volgende keer: twee spelers, één bal: PONG. En je leert echte pygame zonder pgzrun.”
Neem mee naar huis
- Makkelijk: verander de kleur van de kogels of de vijanden.
- Middel: laat vijanden links en rechts bewegen (één richting per stap, keer om aan de rand).
- Lastig: voeg een second wave toe: als alle vijanden weg zijn, spawn een nieuwe rij die sneller daalt.
- Erg lastig: laat vijanden ook terugschieten: willekeurig een kogel omlaag sturen elke N frames.
Bekijk de cheatsheet voor deze sessie
Dojo Defender
Download de Dojo Defender starter voor vandaag.
Was je er vorige keer niet bij? Download de oplossing van sessie 1 en begin daarmee.
Het volledige werkblad: Dojo Defender Sessie 2.