Maze solving: Difference between revisions

m
Line 1,440:
endpos = n * n - 2
startpos = n + 1
f = 100 / n
#
f = 100 / (n - 0.5)
func draw_square pos col . .
x = pos mod n
y = pos div n
set_color col
move_pen x * f y * f
draw_rect f * 1.05 f * 1.05
.
func mark pos . .
x = pos mod n
y = pos div n
set_color 900
move_pen x * f + f / 2 y * f + f / 2
draw_circle f / 4
.
len m[] n * n
#
Line 1,463 ⟶ 1,449:
for i range len m[]
if m[i] = 0
callx draw_square= i 777mod n
x y = posi moddiv n
set_color col777
move_pen x * f - f / 2 y * f - f / 2
draw_rect f * 1.055 f * 1.055
.
.
call draw_square startpos 900
sleep 0.001
.
Line 1,476 ⟶ 1,465:
if dir = 0 and c <> n - 2 or dir = 1 and r <> n - 2 or dir = 2 and c <> 1 or dir = 3 and r <> 1
posn = pos + 2 * offs[dir]
.
.
func visited pos . res .
res = 0
for dir range 4
call getposn pos dir posn
if posn <> -1
res += m[posn]
.
.
.
Line 1,490 ⟶ 1,470:
m[pos] = 0
call show_maze
d[] = [ 0 1 2 .3 ]
repeat
for i call= visited3 posdownto res0
until resd = 0random (i + 1)
dir = random 4d[d]
foundd[d] = 1d[i]
call getposn pos dir posn
if posn <> -1 and m[posn] <> 0
Line 1,507 ⟶ 1,488:
call m_maze startpos
m[endpos] = 0
.
func solve dir0 pos . found .
call mark pos
sleep 0.05
if pos = endpos
found = 1
else
for dir range 4
posn = pos + offs[dir]
if dir <> dir0 and m[posn] = 0 and found = 0
call solve (dir + 2) mod 4 posn found
if found = 0
call draw_square posn 777
sleep 0.05
.
.
.
.
.
#
call make_maze
call show_maze</lang>
sleep 5
call solve -1 startpos found</lang>
 
=={{header|EGL}}==
2,041

edits