Frogger

Notitie

Vereist: sessie 5 (Breakout) afgerond.

Een kikker wil de overkant bereiken. Daarvoor moet hij een drukke weg oversteken én een gevaarlijke rivier. Auto’s rijden in drie banen, houtblokken drijven op het water. Eén verkeerde stap en het is gedaan.

Opstarten

Download de startcode en pak de ZIP uit. Open main.py in Thonny en klik Run. Je ziet het speelveld maar de kikker beweegt nog niet. Jij vult de functies in.

Hoe werkt het?

Het scherm is opgedeeld in horizontale banen van 40 pixels:

  • Boven: 5 vijvers waar de kikker veilig moet geraken
  • Rivier (3 banen): houtblokken drijven voorbij. Op een blok ben je veilig, in het water verdrink je.
  • Gras berm: veilige rustplek in het midden
  • Weg (3 banen): auto’s rijden heen en weer. Geraakt worden = dood.
  • Onder: startpositie van de kikker
TEGEL = 40
KOLOMMEN, RIJEN = 13, 14

# Banen: (rij, richting, snelheid)
AUTO_BANEN = [
    (6,  1, 2),   # rechts, traag
    (7, -1, 4),   # links, snel
    (8,  1, 3),   # rechts, gemiddeld
]

Auto’s en houtblokken zijn pygame.Rect-objecten in een lijst. Elk frame verschuif je ze allemaal en verwijder je ze als ze buiten het scherm vallen.

De kikker beweegt in vaste stappen van TEGEL pixels. Druk op een pijltjestoets en de kikker springt één vakje in die richting.

Botsingen check je met rect.colliderect(andere_rect).

✅ Basic

  • Kikker verplaatsen: vang de pijltjestoetsen in KEYDOWN en pas kikker.x en kikker.y aan met TEGEL.
  • Auto’s spawnen: vul spawn_auto(). Kies een willekeurige baan, maak een Rect net buiten het scherm, voeg toe aan auto_lijst.
  • Auto’s bewegen: in update(): verschuif elke auto met rect.x += richting * snelheid. Verwijder auto’s buiten het scherm. Houd minstens 6 auto’s.
  • Houtblokken spawnen: vul spawn_hout(). Hetzelfde principe, maar met HOUT_BANEN en een grotere breedte.
  • Houtblokken bewegen: in update(): verschuif en verwijder zoals bij auto’s. Houd minstens 4 blokken.
  • Auto-botsing: als kikker.colliderect(auto): roep sterf() aan.
  • Verdrinking: als de kikker in de rivier is (rij 2, 3 of 4) en niet op een houtblok: sterf().
  • Vijver check: als de kikker dicht bij een onbezette vijver is: zet huizen_gevuld[i] = True, score += 10, reset de kikker. 5 vijvers vol = gewonnen.

Klaar? Je hebt een werkende Frogger!

⭐ Stretch

  • Levenden teller: het levens-systeem staat al klaar. Zorg dat het spel stopt als levens <= 0 en toon “GAME OVER”.
  • Timer: voeg een timer toe. Start met 30 seconden per level. Als de timer afloopt verlies je een leven. Toon de timer in de HUD. Bij elke gevulde vijver krijg je 5 seconden extra.
  • Moeilijkheidsgraad: verhoog de snelheid van auto’s en houtblokken naarmate de score stijgt (snelheid = basis + score // 50).

🔥 Expert

  • Bonusvlieg: een groen insect verschijnt willekeurig op de kaart en beweegt rond. Vang het voor 20 bonuspunten. Laat het na 5 seconden verdwijnen.
  • High score: sla de hoogste score op in een variabele high_score. Toon hem naast de huidige score. Werk bij als de speler een nieuw record zet.
  • Verschillende voertuigen: voeg vrachtwagens toe (2 vakjes breed, trager) en motoren (1 vakje, sneller). Gebruik een aparte lijst of een type-veld.
  • Animatie: laat de kikker kort knipperen als hij sterft (dood_timer staat al klaar). Teken een kleine plons als de kikker verdrinkt.

Downloads

  • Startcode: main.py met het speelveld, de kikker en alle teken-code klaar; jij vult de logica in.

Geïnspireerd op het klassieke Frogger (1981, Konami). Tekeningen met pygame.draw.