Spring til indhold
12+ år Øvet ⏱ 1-2 timer

Lav dit eget retrospil: Snake

Programmér klassikeren Snake i Python med Pygame Zero – slangen vokser, hver gang den spiser.

Illustration af en retro arkademaskine

Snake var et af de første spil på mobiltelefoner. Det er perfekt at kode selv, fordi det bruger nogle af de vigtigste idéer i programmering: lister, løkker og kollisioner.

Sådan gør du

  1. Installér Python og Pygame Zero: skriv pip install pgzero i en terminal (eller brug editoren Mu, hvor det er indbygget).
  2. Gem koden nedenfor som snake.py, og kør den med pgzrun snake.py.
  3. Styr slangen med piletasterne. Den lyserøde firkant er mad.
  4. Forstå koden: slangen er en liste af felter. Hver gang den bevæger sig, får den et nyt hoved – og mister halen, medmindre den har spist.

Eksempel (Pygame Zero)

import random

WIDTH, HEIGHT = 400, 400
CELLE = 20
slange = [(10, 10)]
retning = (1, 0)
mad = (5, 5)
point = 0
slut = False

def flyt():
    global mad, point, slut
    if slut:
        return
    hoved = (slange[0][0] + retning[0], slange[0][1] + retning[1])
    if hoved in slange or not (0 <= hoved[0] < 20 and 0 <= hoved[1] < 20):
        slut = True
        return
    slange.insert(0, hoved)
    if hoved == mad:
        point += 1
        mad = (random.randint(0, 19), random.randint(0, 19))
    else:
        slange.pop()

def on_key_down(key):
    global retning
    if key == keys.LEFT:  retning = (-1, 0)
    if key == keys.RIGHT: retning = (1, 0)
    if key == keys.UP:    retning = (0, -1)
    if key == keys.DOWN:  retning = (0, 1)

def draw():
    screen.fill((20, 20, 40))
    for x, y in slange:
        screen.draw.filled_rect(Rect(x * CELLE, y * CELLE, CELLE - 2, CELLE - 2), (132, 204, 22))
    screen.draw.filled_rect(Rect(mad[0] * CELLE, mad[1] * CELLE, CELLE - 2, CELLE - 2), (236, 72, 153))
    screen.draw.text(f'Point: {point}', (10, 10))
    if slut:
        screen.draw.text('GAME OVER', center=(200, 200), fontsize=60)

clock.schedule_interval(flyt, 0.15)

🧠 Udfordring – prøv selv

Gør slangen hurtigere for hver 5 point, og gem den højeste score i en fil, så den huskes til næste gang.