Dojo Defender Session 2: Cheatsheet

# Shooting with SPACE
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
# Make bullets move and remove them
for bullet in bullets[:]:
    bullet.y -= 8
    if bullet.y < -10:
        bullets.remove(bullet)
# Spawn an enemy
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)
# Enemy spawn interval
spawn_counter += 1
if spawn_counter >= spawn_interval:
    spawn_counter = 0
    spawn_enemy()
# Bullet hits enemy
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)
            score += 10
            break
# Waves
enemies_destroyed += 1
if enemies_destroyed % 10 == 0:
    wave += 1
    spawn_interval = max(60, spawn_interval - 10)
# Sine movement (import math)
enemy.x = enemy.start_x + math.sin(timer * 0.03 + enemy.strafe_offset) * 50
# Show wave text
if wave_display_timer > 0:
    screen.draw.text(f"WAVE {wave}!", center=(WIDTH/2, HEIGHT/2),
                     color="yellow", fontsize=60)