68 lines
1.3 KiB
Plaintext
68 lines
1.3 KiB
Plaintext
"""
|
|
we use the following conventions:
|
|
directions 0: up, 1: left, 2: down: 3: right
|
|
|
|
pixel white: True, black: False
|
|
|
|
turn right: True, left: False
|
|
"""
|
|
|
|
# number of iteration steps per frame
|
|
# set this to 1 to see a slow animation of each
|
|
# step or to 10 or 100 for a faster animation
|
|
|
|
STEP = 100
|
|
count = 0
|
|
|
|
def setup():
|
|
global x, y, direction
|
|
|
|
# 100x100 is large enough to show the
|
|
# corridor after about 10000 cycles
|
|
size(100, 100, P2D)
|
|
|
|
background(255)
|
|
x = width / 2
|
|
y = height / 2
|
|
direction = 0
|
|
|
|
def draw():
|
|
global count
|
|
for i in range(STEP):
|
|
count += 1
|
|
pix = get(x, y) != -1 # white =-1
|
|
setBool(x, y, pix)
|
|
|
|
turn(pix)
|
|
move()
|
|
|
|
if (x < 0 or y < 0 or x >= width or y >= height):
|
|
println("finished")
|
|
noLoop()
|
|
break
|
|
|
|
if count % 1000 == 0:
|
|
println("iteration {}".format(count))
|
|
|
|
def move():
|
|
global x, y
|
|
if direction == 0:
|
|
y -= 1
|
|
elif direction == 1:
|
|
x -= 1
|
|
elif direction == 2:
|
|
y += 1
|
|
elif direction == 3:
|
|
x += 1
|
|
|
|
def turn(rightleft):
|
|
global direction
|
|
direction += 1 if rightleft else -1
|
|
if direction == -1:
|
|
direction = 3
|
|
if direction == 4:
|
|
direction = 0
|
|
|
|
def setBool(x, y, white):
|
|
set(x, y, -1 if white else 0)
|