Snake lesmatriaal
Deze opdrachten worden gebruikt om in de lessen uiteleg te geven en samen aan de code te werken.
Deel 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()
Deel 2
(deze hoort bij de laatste opdracht 10)
We maken een sprongetje in de opdrachten en tekenen nu een slang die wat langer is.
- Test de code en maak de slang nog een beetje (minimaal 2 blokjes) langer.
- 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 (array in array: lijst van lijsten)
snake = [[200, 200], [180, 200], [160, 200], [140, 200]]
def draw():
screen.clear()
for position in snake:
x = position[0]
y = position[1]
screen.draw.filled_rect(Rect((x, y), (tile_size, tile_size)), "green")
def update():
global snake, richting
# huidige kop
head_x = snake[0][0]
head_y = snake[0][1]
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()