Sessie 5: Breakout
Een bal kaatst heen en weer en beukt rijen gekleurde stenen kapot. Jij bestuurt de paddle om de bal in de lucht te houden. En deze keer hoor je het ook: er zijn geluidseffecten bij elke botsing.
Wat je vandaag leert
- Geluid laden en afspelen met
pygame.mixer - Botsingen met meerdere objecten (lijst van stenen)
- De bal laten stuiteren in de juiste richting
- Win- en verlies-scherm bouwen
Stap 0: Installeren
- Open Thonny.
- Download de starter via deze link, pak de ZIP uit en open
main.py. - Klik op Run. Je ziet de paddle, de bal en de stenen. De bal beweegt al horizontaal maar niet verticaal. Dat ga jij aanpassen.
Stap 1: Laat de bal verticaal bewegen
Zoek deze regel in de starter:
ball_dx, ball_dy = 4, 0
# ball_dy = -4 ← verwijder de # om de bal te laten bewegen!Verwijder de # voor ball_dy = -4. Nu heeft de bal een verticale snelheid. Voeg beweging toe in de game loop (zoek de update-sectie):
ball.x += ball_dx
ball.y += ball_dyKlik op Run. De bal beweegt diagonaal maar verdwijnt door de randen.
Stap 2: ✅ Basic: bal stuitert op muren en paddle
Voeg stuiteren toe:
# Boven-, links- en rechtsrand
if ball.left <= 0 or ball.right >= WIDTH:
ball_dx = -ball_dx
if ball.top <= 0:
ball_dy = -ball_dy
# Paddle
if ball.colliderect(paddle):
ball_dy = -ball_dy
if snd_hit:
snd_hit.play()Levens: Als de bal de onderkant bereikt, verlies je een leven:
if ball.top > HEIGHT:
levens -= 1
# Reset bal bovenop de paddle
ball.center = (paddle.centerx, paddle.top - BALL_SIZE)
ball_dy = -4Stap 3: ⭐ Stretch: stenen breken
Controleer collision met elke steen in de loop:
for steen in stenen[:]:
if ball.colliderect(steen['rect']):
stenen.remove(steen)
ball_dy = -ball_dy
score += 10
if snd_hit:
snd_hit.play()
break # slechts één steen per frame brekenWin-conditie: Als alle stenen weg zijn, heeft de ninja gewonnen. Toon een bericht:
if not stenen:
# toon win-schermStap 4: 🔥 Expert: levens, explosiegeluid en snelheid
Explosiegeluid als een steen breekt (gebruik snd_explode uit de starter):
if snd_explode:
snd_explode.play()Game over bij 0 levens: toon een scherm en stop de bal.
Snelheid verhogen naarmate er minder stenen overblijven:
snelheid_factor = 1 + (1 - len(stenen) / totaal_stenen) * 0.5
ball_dx_huidig = ball_dx * snelheid_factorNieuwe rij stenen als alles weg is: roep stenen = maak_stenen() opnieuw aan en verhoog de moeilijkheidsgraad.
Showcase
Wie haalt de meeste stenen weg? Vergelijk scores en laat je coach de hoogste streak zien.
Tot de volgende keer!
“Volgende keer: zwaartekracht. Jouw karakter valt, en jij moet hem laten springen op platforms.”
Neem mee naar huis
- Makkelijk: verander de kleuren van de stenen naar jouw favoriete kleuren.
- Middel: maak sommige stenen twee keer zo sterk (ze moeten tweemaal geraakt worden).
- Lastig: voeg een power-up toe die de paddle tijdelijk breder maakt.
- Erg lastig: voeg een tweede bal toe die spawnt als score > 50.
Bekijk de cheatsheet voor deze sessie
Dojo Defender
Dojo Defender krijgt een menu en nieuwe vijandtypes! Download de starter. Was je er niet bij? Download de oplossing van sessie 3. Werkblad: Dojo Defender Sessie 4.