Sessie 1: Catch the Stars
In deze sessie bouw je een mini-spel: een ster valt naar beneden en jij vangt hem op met een basket. Aan het einde van de sessie beweegt alles, houdt het spel bij hoeveel sterren je vangt, en heb je je eerste eigen game.
Wat je vandaag leert
- Variabelen gebruiken om objecten te positioneren
- De
draw()functie: wat je elke frame tekent - De
update()functie: wat er elke frame verandert - Toetsenbord-input: bewegen met pijltjestoetsen
Stap 0: Installeren
- Open Thonny.
- Download de starter via deze link, pak de ZIP uit en open
main.pyin Thonny. - Klik op de groene Run-knop. Je ziet een donkerblauw venster met een basket onderaan en een ster bovenaan, maar niks beweegt nog.
- Problemen? Kijk bij Thonny instellen.
Stap 1: Laat de ster vallen
De update() functie draait 60 keer per seconde. Alles wat je daarin zet, wordt dus 60 keer per seconde uitgevoerd. Dat is hoe beweging werkt in een game.
Op dit moment staat er alleen pass in update(). Dat betekent “doe niks”. Verwijder pass en voeg dit toe:
def update():
star.y = star.y + 3Klik op Run. De ster valt nu van boven naar beneden. Als hij het scherm uit valt, verdwijnt hij. Dat lossen we zo op.
Wat gebeurt hier? star.y is de verticale positie van de ster. Hoe groter y, hoe lager op het scherm. Door elke frame + 3 toe te voegen, zakt de ster steeds een beetje.
Het coördinatenstelsel: (0, 0) zit linksboven, niet linksonder zoals in wiskunde. x loopt naar rechts, y loopt naar beneden. De ster begint op y = 30 (bijna helemaal boven), de basket staat op y = 370 (bijna helemaal onder).
Beweeg je muis over het scherm hieronder om de coördinaten te zien:
Beweeg je muis over het scherm om de coördinaten te zien.
Wil je meer weten over hoe het scherm werkt? → Coördinaten uitgelegd
Pas de schuifbalken aan en kijk hoe actor.x en actor.y veranderen als de actor beweegt:
Stap 2: ✅ Basic: laat de basket bewegen
Tijd om de basket te besturen. Pygame Zero heeft een handige keyboard-variabele die bijhoudt welke toetsen ingedrukt zijn.
Voeg dit toe aan update(), na de regel over de ster:
def update():
star.y = star.y + 3
if keyboard.left:
basket.x = basket.x - 5
if keyboard.right:
basket.x = basket.x + 5Klik op Run en gebruik de pijltjestoetsen. De basket beweegt nu mee!
Tip (optioneel, telt als Stretch): Als je de basket te ver naar links of rechts beweegt, verdwijnt hij van het scherm. Kun jij een check toevoegen die dat voorkomt? Hint: gebruik WIDTH en vergelijk met basket.x.
Stap 3: ⭐ Stretch: vang de ster
Nu wil je dat er iets gebeurt als de basket de ster raakt. Daarvoor gebruik je colliderect. Die controleert of twee rechthoeken elkaar overlappen.
Voeg dit toe aan update():
if star.colliderect(basket):
star.y = 0De ster springt terug naar boven als je hem vangt. Maar wat als je hem mist? Voeg ook dit toe:
if star.y > HEIGHT:
star.y = 0Bonus: Laat de ster elke keer op een willekeurige plek terug verschijnen. Voeg bovenaan het bestand toe:
import randomVervang dan star.y = 0 (op beide plekken) door:
star.x = random.randint(20, WIDTH - 20)
star.y = 0Nu valt de ster steeds op een andere plek. Veel moeilijker te vangen!
Stap 4: 🔥 Expert: voeg een score toe
Een echte game houdt bij wat je scoort. Daarvoor heb je een variabele nodig die buiten de functies leeft: een globale variabele.
Klik op de knop hieronder om te zien hoe score verandert elke keer dat je een ster vangt:
Voeg dit toe bovenaan, buiten alle functies (na de regels over basket en star):
score = 0In draw(), voeg toe:
screen.draw.text(f"Score: {score}", topleft=(10, 10), color="white")In update(), pas de catch-code aan zodat de score omhoog gaat:
if star.colliderect(basket):
global score
score = score + 1
star.x = random.randint(20, WIDTH - 20)
star.y = 0global score vertelt Python: “ik bedoel de score van buiten deze functie, niet een nieuwe lokale variabele.” Zonder die regel krijg je een foutmelding.
Klik op Run. De score staat linksboven en telt op elke keer dat je een ster vangt!
Showcase
Laat je spel zien aan een coach en een buddy. Vertel wat je gemaakt hebt: wat werkt, en wat je nog extra hebt toegevoegd.
Tot de volgende keer!
“Volgende keer: dingen die TERUGSLAAN. En ze gaan BOEM, met echt geluid.”
Neem mee naar huis
Probeer thuis één van deze uitbreidingen. Bij elke staat een code-hint om je op weg te helpen.
Beperk levens — Voeg
levens = 3toe. Bij een misser (star.y > HEIGHT):levens -= 1. Stop het spel alslevens == 0metgame_over = Trueen toon “Game Over” indraw().Willekeurige ster-kleur — Bij elke vangst: geef de ster een nieuwe kleur met
random.randint(50, 255)voor rood, groen en blauw. Begin bij 50, niet bij 0 — anders is de ster soms zwart en onzichtbaar.Achtergrond — Teken vaste sterren op de achtergrond in
draw()voor de score. Gebruikscreen.draw.filled_circle(x, y, 2, "white")op 20 willekeurige posities. Zaairandom.seed(42)zodat ze niet flikkeren.Tweede ster — Maak
sterren = [star, Actor("star")]. Geef elke ster een eigenx. Werk ze allebei bij inupdate()en teken ze indraw().Hoge score — Houd
high_scorebij. Alsscore > high_score:high_score = score. Toonf"Beste: {high_score}"naast de score.Basket kleiner — Na elke 5 punten:
basket.width = max(30, basket.width - 5). Zetbasket.widthterug bij herstart.Bom — Voeg een rode cirkel toe die af en toe valt. Gebruik een timer
bom_timerenrandom.randintom te bepalen wanneer hij verschijnt. Als de basket de bom raakt:score -= 2.Moeilijkheidsgraad — Na elke 5 sterren: verhoog de valsnelheid met 1. Bouw een maximum in:
max(3, star_snelheid).