Dojo Defender: Sessie 2

Je schip heeft nu een wapen. Vijanden komen eraan. Schiet ze neer voordat ze de bodem bereiken. Elke 10 vijanden betekent een nieuwe wave — en het wordt steeds moeilijker.

Wat je vandaag leert

  • Schieten met de spatiebalk en een cooldown
  • Lijsten voor kogels en vijanden
  • Collision tussen kogels en vijanden
  • Golven (waves) die steeds moeilijker worden
  • Vijanden die sinus-bewegingen maken

Stap 0: Open de starter

  1. Open Thonny.
  2. Download de Dojo Defender starter voor vandaag, pak de ZIP uit en open main.py.
  3. Was je er vorige keer niet bij? Download de oplossing van sessie 1 en begin daarmee.
  4. Klik op Run. Je ziet hetzelfde spel als vorige keer: schip, asteroïden, explosies.
  5. Problemen? Kijk bij Thonny instellen.

Stap 1: Schieten met SPATIE

Je schip heeft een laserkanon. Voeg een lijst voor kogels toe bovenaan:

bullets = []

Gebruik on_key_down — die wordt maar één keer aangeroepen als je een toets indrukt (in tegenstelling tot update die blijft herhalen):

def on_key_down(key):
    if key == keys.SPACE:
        bullet = Actor('bullet')
        bullet.x = ship.x
        bullet.y = ship.y - 20
        bullets.append(bullet)

Laat de kogels omhoog bewegen in update() en verwijder ze als ze uit beeld zijn:

for bullet in bullets[:]:
    bullet.y -= 8
    if bullet.y < -10:
        bullets.remove(bullet)

Vergeet niet de kogels te tekenen in draw():

for bullet in bullets:
    bullet.draw()

Stap 2: ✅ Basic: schiet-cooldown

Zonder cooldown vuur je tientallen kogels per seconde. Voeg een timer toe:

shoot_cooldown = 0

In update():

if shoot_cooldown > 0:
    shoot_cooldown -= 1

Pas on_key_down aan zodat je alleen kunt schieten als de cooldown 0 is:

def on_key_down(key):
    global shoot_cooldown
    if key == keys.SPACE and shoot_cooldown == 0:
        bullet = Actor('bullet')
        bullet.x = ship.x
        bullet.y = ship.y - 20
        bullets.append(bullet)
        shoot_cooldown = 15

Stap 3: ⭐ Stretch: vijanden toevoegen

Vijanden spawnen bovenaan en vallen naar beneden. Voeg een lijst toe:

enemies = []

Een spawn-functie:

def spawn_enemy():
    enemy = Actor('enemy_drone')
    enemy.x = random.randint(30, WIDTH - 30)
    enemy.y = -30
    enemy.speed = random.uniform(1, 3)
    enemies.append(enemy)

Roep spawn_enemy() aan in update() met een spawn-interval:

# bovenaan:
spawn_counter = 0
spawn_interval = 120

# in update():
spawn_counter += 1
if spawn_counter >= spawn_interval:
    spawn_counter = 0
    spawn_enemy()

Teken vijanden in draw():

for enemy in enemies:
    enemy.draw()

Stap 4: 🔥 Expert: collision + waves

Kogel raakt vijand: verwijder beide, +10 punten:

for bullet in bullets[:]:
    bullet.y -= 8
    if bullet.y < -10:
        bullets.remove(bullet)
        continue
    for enemy in enemies[:]:
        if bullet.colliderect(enemy):
            bullets.remove(bullet)
            enemies.remove(enemy)
            global score
            score += 10
            break

Vijand raakt bodem of schip: verlies een leven (zelfde als asteroïde).

Waves: elke 10 vijanden een nieuwe wave. Vijanden spawnen sneller:

# bovenaan:
wave = 1
enemies_destroyed = 0

# bij destroy:
enemies_destroyed += 1
if enemies_destroyed % 10 == 0:
    wave += 1
    spawn_interval = max(60, spawn_interval - 10)

Toon de huidige wave in draw():

screen.draw.text(f"Wave: {wave}", (10, 70), color="yellow", fontsize=24)

Toon “WAVE N!” in het groot bij een nieuwe wave (gebruik een timer).

Sinus-beweging: laat vijanden links-rechts zwenken:

import math  # bovenaan

enemy.x = enemy.start_x + math.sin(timer * 0.03 + enemy.strafe_offset) * 50

Showcase

Laat je Dojo Defender zien aan een coach. Hoeveel waves haal jij? Heb je de sinus-beweging werkend? Vergelijk scores met een buddy.

Tot de volgende keer!

“Volgende keer: POWER-UPS. Schilden, speed-boosts en spread-shots. Je schip wordt steeds sterker naarmate je langer overleeft.”

Neem mee naar huis

Probeer thuis één van deze uitbreidingen:

  1. Vijandvariatie — Gebruik enemy_charger.png voor een snellere vijand die geen sinus maakt, maar recht op je af komt.
  2. Geluid — Voeg sounds/laser.wav en sounds/explosion.wav toe.
  3. Harde modus — Vijanden spawnen steeds sneller, tot maximaal elke 30 frames.
  4. Score multiplier — Hoe hoger de wave, hoe meer punten per kill: score += 10 * wave.

Download Dojo Defender