Snake
Notitie
Vereist: sessie 5 afgerond.
De slang beweegt vanzelf. Jij stuurt met de pijltjestoetsen. Eet een stuk fruit: de slang groeit één vakje. Raak de muur of jezelf: game over.
Opstarten
Download de startcode en pak de ZIP uit. Open main.py in Thonny en klik Run. Je ziet een leeg raster. De besturing en de tijdmeting staan al klaar. Jij vult de functies nieuw_fruit(), zet_stap() en teken() in.
Hoe werkt het?
Snake speelt op een rooster. De slang is een lijst van (kolom, rij) coördinaten. Elke stap voeg je een nieuw hoofd toe aan de voorkant van de lijst en verwijder je het laatste element. Eet de slang fruit, dan laat je het laatste element staan, waardoor de slang groeit.
TILE = 20 # grootte van één vakje in pixels
COLS = WIDTH // TILE
ROWS = HEIGHT // TILE
slang = [(10, 10), (9, 10), (8, 10)] # lijst van (kolom, rij)
dx, dy = 1, 0 # richting: 1 stap naar rechtsAfbeeldingen laden en schalen
De fruitplaatjes zijn 64×64 pixels. Dat is te groot voor één vakje van 20×20. Je laadt ze met pygame.image.load() en schaalt ze daarna met pygame.transform.scale(). Dit staat al klaar in de startcode.
surf = pygame.image.load('images/apple.png').convert_alpha()
fruit_images['apple'] = pygame.transform.scale(surf, (TILE, TILE))convert_alpha() zorgt dat de transparantie van het plaatje goed werkt. pygame.transform.scale() geeft een nieuwe Surface terug op het gevraagde formaat. Het origineel blijft ongewijzigd.
Om een geschaald plaatje op het scherm te zetten, gebruik je screen.blit():
screen.blit(fruit_surf, (fruit_pos[0] * TILE, fruit_pos[1] * TILE))✅ Basic
- Vul
nieuw_fruit()in: kies een willekeurig fruit, zoek een vrij vakje en sla de positie en Surface op. - Vul
zet_stap()in: bereken het nieuwe hoofd, voeg het toe aan de voorkant van de lijst, verwijder het laatste element. - Vul
teken()in: teken het raster (pygame.draw.line), het fruit (screen.blit), en elke slangbol (pygame.draw.circle). Toon de score metfont.render()enscreen.blit(). - Spawn fruit als de slang het eet: laat
slang.pop()weg en roepnieuw_fruit()aan.
⭐ Stretch
- Game over als het hoofd buiten het raster valt.
- Game over als het hoofd een eigen segment raakt (
nieuw_hoofd in slang[1:]). - Toon een game-over scherm met de score. Druk op R om opnieuw te starten.
🔥 Expert
- Verhoog de snelheid naarmate de score stijgt: verlaag
STAP_MSop basis van de score (max(60, BASISINTERVAL - score * 10)). - Sla de hoogste score op en toon hem naast de huidige score, ook na een herstart.
- Zorg dat fruit nooit spawnt op een vakje dat de slang al bezet.
Downloads
- Startcode:
main.pymet de besturing en tijdmeting klaar; jij vult de functies in. - Fruitafbeeldingen: als je zonder startcode begint (al inbegrepen in de startcode-ZIP).
Fruit: Kenney Food Kit, CC0 (publiek domein). kenney.nl