TUTORIAL · UITDAGING · 90 MIN

Maak Snake met Pygame

Bestuur een slang, verzamel voedsel en houd een score bij.

1

Installeer Pygame

Open onderaan PyCharm de Terminal en voer dit commando uit. Gebruik de Python-interpreter van je project.

Terminal
python -m pip install pygame
Controleer: Er verschijnt geen fout bij import pygame.
2

Maak een venster

Maak snake.py en start een venster van 640 bij 480 pixels.

snake.py
import pygame
pygame.init()
scherm = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Mijn Snake")
klok = pygame.time.Clock()

actief = True
while actief:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            actief = False
    scherm.fill((18, 43, 65))
    pygame.display.flip()
    klok.tick(10)
pygame.quit()
Controleer: Er opent een donker venster dat je kunt sluiten.
3

Volledig basisgame

Vervang snake.py door de code. Beweeg met de pijltjestoetsen. Bij botsing met de rand of jezelf eindigt het spel.

snake.py
import random
import pygame

pygame.init()
BLOK = 20
BREEDTE, HOOGTE = 640, 480
scherm = pygame.display.set_mode((BREEDTE, HOOGTE))
pygame.display.set_caption("Snake")
klok = pygame.time.Clock()
lettertype = pygame.font.SysFont(None, 34)
slang = [(10, 10), (9, 10), (8, 10)]
richting = (1, 0)
voedsel = (20, 12)
score = 0
actief = True
while actief:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            actief = False
        if event.type == pygame.KEYDOWN:
            opties = {pygame.K_UP:(0,-1), pygame.K_DOWN:(0,1),
                       pygame.K_LEFT:(-1,0), pygame.K_RIGHT:(1,0)}
            nieuw = opties.get(event.key)
            if nieuw and nieuw != (-richting[0], -richting[1]):
                richting = nieuw
    kop = (slang[0][0] + richting[0], slang[0][1] + richting[1])
    if not (0 <= kop[0] < BREEDTE // BLOK and 0 <= kop[1] < HOOGTE // BLOK):
        break
    eet = kop == voedsel
    if kop in (slang if eet else slang[:-1]):
        break
    slang.insert(0, kop)
    if eet:
        score += 1
        while True:
            voedsel = (random.randrange(BREEDTE//BLOK), random.randrange(HOOGTE//BLOK))
            if voedsel not in slang:
                break
    else:
        slang.pop()
    scherm.fill((18, 43, 65))
    for x, y in slang:
        pygame.draw.rect(scherm, (64, 159, 211), (x*BLOK, y*BLOK, BLOK-2, BLOK-2))
    pygame.draw.rect(scherm, (255, 212, 59), (voedsel[0]*BLOK, voedsel[1]*BLOK, BLOK-2, BLOK-2))
    tekst = lettertype.render(str(score), True, (255,255,255))
    scherm.blit(tekst, (10,10))
    pygame.display.flip()
    klok.tick(8)
pygame.quit()
Controleer: De slang beweegt; voedsel verhoogt de score.
4

Uitbreiding

Bouw een startscherm, een knop om opnieuw te beginnen of een topscore die je in een tekstbestand bewaart.

Controleer: Test de game op een pc waarop pygame geïnstalleerd is.

Klaar met de tutorial?

Bewaar het project in PyCharm. Je kunt later nog verbeteringen toevoegen.

Andere tutorials