Skip to main content

Snake lesmatriaal

Deze opdrachten worden gebruikt om in de lessen uiteleg te geven en samen aan de code te werken.

OpdrachtDeel 1

(dit hoort bij 4 van de les)

In deze code zit een bug: "de slangenkop" gaat van links naar rechts, maar niet op en en neer. Kijk hoe het werkt, leg uit wat er fout is en pas de code aan.

import pgzrun

WIDTH = 600
HEIGHT = 400

snake_x = 200
snake_y = 200
tile_size = 20
step = 5
richting = "right"

def draw():
    screen.clear()
    screen.draw.filled_rect(Rect((snake_x, snake_y), (tile_size, tile_size)), "green")

def update():
    global snake_x, snake_y, richting

    if richting == "left":
        snake_x -= step
    elif richting == "right":
        snake_x += step
    elif richting == "up":
        snake_y -= step
    elif richting == "down":
        snake_y += step

    # 🧠 Hier controleren we of de slang de rand raakt
    if snake_x < 0:
        richting = "right"
    elif snake_x + tile_size > WIDTH:
        richting = "left"
    elif snake_y < 0:
        richting = "up"
    elif snake_y + tile_size > HEIGHT:
        richting = "down"

def on_key_down(key):
    global richting

    if key == keys.LEFT:
        richting = "left"
    elif key == keys.RIGHT:
        richting = "right"
    elif key == keys.UP:
        richting = "up"
    elif key == keys.DOWN:
        richting = "down"

pgzrun.go()

OpdrachtDeel 2

(deze hoort bij de laatste opdracht 10)

We maken een sprongetje in de opdrachten en tekenen nu een slang die wat langer is.

  1. Test de code en maak de slang nog een beetje (minimaal 2 blokjes) langer.
  2. Oops dezelfde fout als zit weer in de code (stupid programmer!) - pas dit weer aan zodat de slang op ale randen 'bounced'

We 'bouncen' nu op de zijkanten, in Snake kan je het ook zo maken dat als je op de rand botst het "Game over" is.
'bouncen' kan niet omdat je dan je eigen staart raakt en dat mag niet in de Snake game.

Question: Stel we willen niet bouncen, en geen Game Over bij het contact van de rand, hoe zou het moeten dan moeten werken?

Beschrijf stap-voor-stap hoe het zou moeten werken in de vorm van een AI prompt.

import pgzrun

WIDTH = 600
HEIGHT = 400

tile_size = 20
step = 5
richting = "right"

# Slang met 4 blokjes (lijst van segmenten)
snake = [(200, 200), (180, 200), (160, 200), (140, 200)]

def draw():
    screen.clear()
    for (x, y) in snake:
        screen.draw.filled_rect(Rect((x, y), (tile_size, tile_size)), "green")

def update():
    global snake, richting

    # huidige kop
    head_x, head_y = snake[0]

    if richting == "left":
        head_x -= step
    elif richting == "right":
        head_x += step
    elif richting == "up":
        head_y -= step
    elif richting == "down":
        head_y += step

    # nieuwe kop aan het begin van de lijst
    new_head = (head_x, head_y)
    snake = [new_head] + snake[:-1]   # schuif de slang door

    # Randcheck
    if head_x < 0:
        richting = "right"
    elif head_x + tile_size > WIDTH:
        richting = "left"
    elif head_y < 0:
        richting = "up"
    elif head_y + tile_size > HEIGHT:
        richting = "down"

def on_key_down(key):
    global richting

    if key == keys.LEFT:
        richting = "left"
    elif key == keys.RIGHT:
        richting = "right"
    elif key == keys.UP:
        richting = "up"
    elif key == keys.DOWN:
        richting = "down"

pgzrun.go()