1
1
import random
2
2
import constants
3
+ import pygame
3
4
4
5
# I followed along with this guide to implement this algorithm into my program.
5
6
# https://medium.com/swlh/fun-with-python-1-maze-generator-931639b4fb7e
6
7
7
8
8
- def algorithm (grid , draw ):
9
+ def algorithm (grid , draw , win ):
9
10
# Choose a random starting point and reset all nodes
10
11
grid , walls = init_path (grid )
11
12
12
13
while walls :
14
+
15
+ for event in pygame .event .get ():
16
+ if event .type == pygame .QUIT :
17
+ pygame .quit ()
18
+
19
+ if pygame .mouse .get_pressed (3 )[0 ]:
20
+ pos = pygame .mouse .get_pos ()
21
+ if 660 <= pos [1 ] <= 690 :
22
+ if 150 <= pos [0 ] <= 270 :
23
+ if win .speed == "Fast" :
24
+ win .speed = "Medium"
25
+ elif win .speed == "Medium" :
26
+ win .speed = "Slow"
27
+ else :
28
+ win .speed = "Fast"
29
+
30
+ if win .speed == "Medium" :
31
+ pygame .time .wait (10 )
32
+ elif win .speed == "Slow" :
33
+ pygame .time .wait (50 )
13
34
14
35
# Pick a random wall
15
36
wall = walls .pop (int (random .random () * len (walls )) - 1 )
16
37
38
+ row , col = wall
39
+
17
40
# Check if wall is to the left of the path
18
- if wall [ 1 ] != 0 :
19
- if grid [wall [ 0 ]][ wall [ 1 ] - 1 ].is_default () and grid [wall [ 0 ]][ wall [ 1 ] + 1 ].is_path ():
41
+ if col != 0 :
42
+ if grid [row ][ col - 1 ].is_default () and grid [row ][ col + 1 ].is_path ():
20
43
neighbours = get_path_neighbours (wall , grid )
21
44
22
45
if neighbours < 2 :
23
46
# Denote the new path
24
- grid [wall [ 0 ]][ wall [ 1 ] ].draw_path ()
47
+ grid [row ][ col ].draw_path ()
25
48
26
49
walls , grid = top_wall (wall , walls , grid )
27
50
walls , grid = bottom_wall (wall , walls , grid )
28
51
walls , grid = left_wall (wall , walls , grid )
29
52
30
53
# Check if wall is above the path
31
- if wall [ 0 ] != 0 :
32
- if grid [wall [ 0 ] - 1 ][wall [ 1 ]] .is_default () and grid [wall [ 0 ] + 1 ][wall [ 1 ] ].is_path ():
54
+ if row != 0 :
55
+ if grid [row - 1 ][col ] .is_default () and grid [row + 1 ][col ].is_path ():
33
56
neighbours = get_path_neighbours (wall , grid )
34
57
35
58
if neighbours < 2 :
36
59
# Denote the new path
37
- grid [wall [ 0 ]][ wall [ 1 ] ].draw_path ()
60
+ grid [row ][ col ].draw_path ()
38
61
39
62
# Mark the new walls
40
63
walls , grid = top_wall (wall , walls , grid )
41
64
walls , grid = left_wall (wall , walls , grid )
42
65
walls , grid = right_wall (wall , walls , grid )
43
66
44
67
# Check if wall is below the path
45
- if wall [ 0 ] != constants .rows - 1 :
46
- if grid [wall [ 0 ] + 1 ][wall [ 1 ]] .is_default () and grid [wall [ 0 ] - 1 ][wall [ 1 ] ].is_path ():
68
+ if row != constants .rows - 1 :
69
+ if grid [row + 1 ][col ] .is_default () and grid [row - 1 ][col ].is_path ():
47
70
neighbours = get_path_neighbours (wall , grid )
48
71
49
72
if neighbours < 2 :
50
73
# Denote the new path
51
- grid [wall [ 0 ]][ wall [ 1 ] ].draw_path ()
74
+ grid [row ][ col ].draw_path ()
52
75
53
76
# Mark the new walls
54
77
walls , grid = bottom_wall (wall , walls , grid )
55
78
walls , grid = left_wall (wall , walls , grid )
56
79
walls , grid = right_wall (wall , walls , grid )
57
80
58
81
# Check if wall is to the right of the path
59
- if wall [ 1 ] != constants .cols - 1 :
60
- if grid [wall [ 0 ]][ wall [ 1 ] + 1 ].is_default () and grid [wall [ 0 ]][ wall [ 1 ] - 1 ].is_path ():
82
+ if col != constants .cols - 1 :
83
+ if grid [row ][ col + 1 ].is_default () and grid [row ][ col - 1 ].is_path ():
61
84
neighbours = get_path_neighbours (wall , grid )
62
85
63
86
if neighbours < 2 :
64
87
# Denote the new path
65
- grid [wall [ 0 ]][ wall [ 1 ] ].draw_path ()
88
+ grid [row ][ col ].draw_path ()
66
89
67
90
# Mark the new walls
68
91
walls , grid = right_wall (wall , walls , grid )
@@ -75,41 +98,45 @@ def algorithm(grid, draw):
75
98
76
99
77
100
def top_wall (wall , walls , grid ):
78
- if wall [0 ] != 0 :
79
- if not grid [wall [0 ] - 1 ][wall [1 ]].is_path ():
80
- grid [wall [0 ] - 1 ][wall [1 ]].place_wall ()
81
- if [wall [0 ] - 1 , wall [1 ]] not in walls :
82
- walls .append ([wall [0 ] - 1 , wall [1 ]])
101
+ row , col = wall
102
+ if row != 0 :
103
+ if not grid [row - 1 ][col ].is_path ():
104
+ grid [row - 1 ][col ].place_wall ()
105
+ if [row - 1 , col ] not in walls :
106
+ walls .append ([row - 1 , col ])
83
107
84
108
return walls , grid
85
109
86
110
87
111
def left_wall (wall , walls , grid ):
88
- if wall [1 ] != 0 :
89
- if not grid [wall [0 ]][wall [1 ] - 1 ].is_path ():
90
- grid [wall [0 ]][wall [1 ] - 1 ].place_wall ()
91
- if [wall [0 ], wall [1 ] - 1 ] not in walls :
92
- walls .append ([wall [0 ], wall [1 ] - 1 ])
112
+ row , col = wall
113
+ if col != 0 :
114
+ if not grid [row ][col - 1 ].is_path ():
115
+ grid [row ][col - 1 ].place_wall ()
116
+ if [row , col - 1 ] not in walls :
117
+ walls .append ([row , col - 1 ])
93
118
94
119
return walls , grid
95
120
96
121
97
122
def bottom_wall (wall , walls , grid ):
98
- if wall [0 ] != constants .rows - 1 :
99
- if not grid [wall [0 ] + 1 ][wall [1 ]].is_path ():
100
- grid [wall [0 ] + 1 ][wall [1 ]].place_wall ()
101
- if [wall [0 ] + 1 , wall [1 ]] not in walls :
102
- walls .append ([wall [0 ] + 1 , wall [1 ]])
123
+ row , col = wall
124
+ if row != constants .rows - 1 :
125
+ if not grid [row + 1 ][col ].is_path ():
126
+ grid [row + 1 ][col ].place_wall ()
127
+ if [row + 1 , col ] not in walls :
128
+ walls .append ([row + 1 , col ])
103
129
104
130
return walls , grid
105
131
106
132
107
133
def right_wall (wall , walls , grid ):
108
- if wall [1 ] != constants .cols - 1 :
109
- if not grid [wall [0 ]][wall [1 ] + 1 ].is_path ():
110
- grid [wall [0 ]][wall [1 ] + 1 ].place_wall ()
111
- if [wall [0 ], wall [1 ] + 1 ] not in walls :
112
- walls .append ([wall [0 ], wall [1 ] + 1 ])
134
+ row , col = wall
135
+ if col != constants .cols - 1 :
136
+ if not grid [row ][col + 1 ].is_path ():
137
+ grid [row ][col + 1 ].place_wall ()
138
+ if [row , col + 1 ] not in walls :
139
+ walls .append ([row , col + 1 ])
113
140
114
141
return walls , grid
115
142
@@ -186,13 +213,22 @@ def finish_path(grid, draw):
186
213
187
214
def get_path_neighbours (node , grid ):
188
215
neighbours = 0
189
- if grid [node [0 ] - 1 ][node [1 ]].is_path ():
216
+ row , col = node
217
+
218
+ # Up
219
+ if grid [row - 1 ][col ].is_path ():
190
220
neighbours += 1
191
- if grid [node [0 ] + 1 ][node [1 ]].is_path ():
221
+
222
+ # Down
223
+ if grid [row + 1 ][col ].is_path ():
192
224
neighbours += 1
193
- if grid [node [0 ]][node [1 ] - 1 ].is_path ():
225
+
226
+ # Left
227
+ if grid [row ][col - 1 ].is_path ():
194
228
neighbours += 1
195
- if grid [node [0 ]][node [1 ] + 1 ].is_path ():
229
+
230
+ # Right
231
+ if grid [row ][col + 1 ].is_path ():
196
232
neighbours += 1
197
233
198
234
return neighbours
0 commit comments