-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdraw.py
59 lines (45 loc) · 1.43 KB
/
draw.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
from turtle import RawTurtle, Screen
def rotate_right(dx, dy):
return dy, -dx
def rotate_left(dx, dy):
return -dy, dx
def draw_maze(maze, scale, *, screen = None, tracer = False, delay = 0, speed = 0, updates = False, start_x = 0, start_y = 0):
if screen is None:
screen = Screen()
width = scale * maze.width
height = scale * maze.height
original_tracer = screen.tracer()
original_delay = screen.delay()
screen.tracer(tracer)
screen.delay(delay)
turtle = RawTurtle(screen, visible=False)
turtle.speed(speed)
turtle.setpos(start_x, start_y)
turtle.setheading(0)
turtle.showturtle()
x, y, dx, dy = 0, 0, 1, 0
while True:
sx, sy = rotate_right(dx, dy)
print(x, y, maze[x, y])
if maze[x, y][sx, sy]:
if maze[x, y][rotate_left(sx, sy)]:
print('a')
turtle.forward(scale - 1)
turtle.left(90)
dx, dy = rotate_left(dx, dy)
else:
print('b')
turtle.forward(scale)
x, y = x + dx, y + dy
else:
print('c')
turtle.right(90)
turtle.forward(1)
dx, dy = rotate_right(dx, dy)
x, y = x + dx, y + dy
if (x, y, dx, dy) == (0, 0, 1, 0):
break
screen.tracer(original_tracer)
screen.delay(original_delay)
screen.update()
return screen