Sessie 9: Boss Battle
De eindbaas wacht op je. Hij beweegt heen en weer, schiet kogels en wordt steeds gevaarlijker naarmate zijn HP daalt. Jij schiet terug, houdt zijn HP bij op een balk, en overleeft drie fasen. Dit is de moeilijkste sessie, en de meest bevredigende als je hem haalt.
Wat je vandaag leert
- Een HP-balk tekenen op het scherm
- Een state machine: de baas gedraagt zich anders per fase
- De baas laten schieten met een kogeltimer
- Fasen activeren op HP-drempelwaarden
Stap 0: Installeren
- Open Thonny.
- Download de starter via deze link, pak de ZIP uit en open
main.pyin Thonny. - Klik op Run. Je ziet de baas bovenaan, jouw schip onderaan. Geen movement, geen kogels nog.
- Problemen? Vraag een coach.
Stap 1: Baas laten bewegen
De baas beweegt heen en weer over het scherm. Als hij de rand raakt, keert hij om.
Zoek # STAP 1 en voeg toe:
boss_rect.x += boss_speed
# Omdraaien bij de rand
if boss_rect.right >= WIDTH or boss_rect.left <= 0:
boss_speed = -boss_speedboss_speed = 3 staat al bovenaan. Klik Run: de baas dendert van links naar rechts!
Speler bewegen en schieten (zoek # SPELER):
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and player_rect.left > 0:
player_rect.x -= PLAYER_SPEED
if keys[pygame.K_RIGHT] and player_rect.right < WIDTH:
player_rect.x += PLAYER_SPEED
# Schiet (zoek # SCHIET in event-loop):
player_bullets.append(pygame.Rect(player_rect.centerx - 3, player_rect.top - 15, 6, 15))Stap 2: ✅ Basic: baas raken en HP-balk
Botsing speler-kogel met baas:
Zoek # STAP 2:
for b in player_bullets[:]:
b.y -= 8
if b.y < 0:
player_bullets.remove(b)
continue
pygame.draw.rect(screen, YELLOW, b)
if b.colliderect(boss_rect):
player_bullets.remove(b)
boss_hp -= 1
if boss_hp <= 0:
running = False # speler wint!HP-balk tekenen (zoek # HP BALK):
# Achtergrond van de balk
pygame.draw.rect(screen, DARK_RED, (10, 10, 300, 20))
# Gevulde balk op basis van huidige HP
breedte = int(300 * boss_hp / BOSS_MAX_HP)
pygame.draw.rect(screen, RED, (10, 10, breedte, 20))
# Label
hp_surf = font.render(f"Baas HP: {boss_hp}", True, WHITE)
screen.blit(hp_surf, (320, 10))Klik Run. Schiet op de baas: de HP-balk slinkt!
Stap 3: ⭐ Stretch: baas schiet terug
De baas schiet elke N frames een kogel naar beneden.
Zoek # STAP 3:
boss_shoot_timer += 1
if boss_shoot_timer >= boss_shoot_interval:
boss_shoot_timer = 0
boss_bullets.append(pygame.Rect(boss_rect.centerx - 4, boss_rect.bottom, 8, 16))Baas-kogels updaten:
for b in boss_bullets[:]:
b.y += 6
if b.y > HEIGHT:
boss_bullets.remove(b)
continue
pygame.draw.rect(screen, ORANGE, b)
if b.colliderect(player_rect):
boss_bullets.remove(b)
player_lives -= 1
if player_lives <= 0:
running = FalseTeken player_lives als hartjes of rode blokjes onderaan het scherm.
Stap 4: 🔥 Expert: drie fases
Nu reageert de baas op zijn HP:
- Fase 1 (HP 100 tot 50): normaal gedrag
- Fase 2 (HP 50 tot 25): sneller bewegen, vaker schieten
- Fase 3 (HP < 25): maximale snelheid, dubbele kogels
Zoek # STAP 4:
if boss_hp > 50:
boss_phase = 1
boss_speed_abs = 3
boss_shoot_interval = 60
elif boss_hp > 25:
boss_phase = 2
boss_speed_abs = 5
boss_shoot_interval = 35
else:
boss_phase = 3
boss_speed_abs = 7
boss_shoot_interval = 20
# Pas de snelheid aan zonder de richting te wisselen:
boss_speed = boss_speed_abs * (1 if boss_speed > 0 else -1)Fase 3: dubbele kogels (voeg toe in de shoot-code):
if boss_phase == 3:
boss_bullets.append(pygame.Rect(boss_rect.left + 10, boss_rect.bottom, 8, 16))
boss_bullets.append(pygame.Rect(boss_rect.right - 18, boss_rect.bottom, 8, 16))
else:
boss_bullets.append(pygame.Rect(boss_rect.centerx - 4, boss_rect.bottom, 8, 16))Win-scherm bij boss_hp <= 0:
screen.fill(BLACK)
win = font.render("BAAS VERSLAGEN!", True, YELLOW)
screen.blit(win, (WIDTH // 2 - win.get_width() // 2, HEIGHT // 2))
pygame.display.flip()
pygame.time.wait(3000)Showcase
Laat je spel zien aan een coach en een buddy. Wie haalt fase 3 en overleeft?
Tot de volgende keer!
“Volgende keer: jouw eigen spel, van nul, helemaal jouw idee.”
Neem mee naar huis
Probeer thuis één van deze uitbreidingen:
- Makkelijk: verander de kleur van de baas per fase (groen → oranje → rood).
- Middel: voeg een score toe: hoe sneller je de baas verslaat, hoe meer punten.
- Lastig: laat de baas in fase 2 ook diagonale kogels schieten (schuin links en rechts).
- Erg lastig: voeg een tweede speler toe die mee kan doen met WASD-toetsen.