Maze solving: Difference between revisions

Line 1,100:
[https://easylang.online/apps/_r_maze.html Run it]
 
<lang># maze generation and solving
#
'n = 51
'size = 25
# n must be odd
'visitedn = 2 * 'size + 1
'free = 1
'endpos = 'n * 'n - 'n - 3
'startpos = 2 * 'n + 2
#
'f# = 100 / 'n
'f2# = 'f# / 2
#
func draw_square pos col . .
x = pos mod 'n
y = pos / 'n
color 777col
move x * 'f# y * 'f#
rect 'f# * 1.05 'f# * 1.05
Line 1,128 ⟶ 1,129:
color 000
rect 100 100
color 777
for i range len m[]
if m[i] = 'free
call draw_square i 777
.
.
call draw_square 'startpos 900
color 900
call draw_square 'startpos
func make_outside . .
for i range 'n
m[i] = 'visited
m['n * i] = 'visited
m['n * i + 'n - 1] = 'visited
m['n * ('n - 1) + i] = 'visited
.
.
offs[] = [ 1 'n -1 (-'n) ]
Line 1,152 ⟶ 1,143:
.
.
func make_mazem_maze pos . .
m[pos] = 'visitedfree
repeat
call visited pos res
Line 1,159 ⟶ 1,150:
dir = random 4
posn = pos + 2 * offs[dir]
if m[posn] <> 'visitedfree
m[pos + offs[dir]] = 'free
call make_mazem_maze posn
.
.
func make_outsidemake_maze . .
for i range 'n
m[i] = 'visitedfree
m['n * i] = 'visitedfree
m['n * i + 'n - 1] = 'visitedfree
m['n * ('n - 1) + i] = 'visitedfree
.
call m_maze 'startpos
m['endpos] = 'free
.
func solve dir0 pos . found .
call mark pos
sleep 0.0105
if pos = 'endpos
sleep 0.5
call show_maze
found = 1
else
Line 1,177 ⟶ 1,176:
if dir <> dir0 and m[posn] = 'free and found = 0
call solve (dir + 2) mod 4 posn found
if found = 10
call markdraw_square posn 777
sleep 0.505
.
.
Line 1,184:
.
.
#
call make_outside
call make_maze 'startpos
m['endpos] = 'free
call show_maze
sleep 0.51
found = 0
call solve -1 'startpos found
</lang>
2,083

edits