RosettaCodeData/Task/Maze-solving/EasyLang/maze-solving.easy

82 lines
1.4 KiB
Text
Raw Permalink Normal View History

2023-07-01 11:58:00 -04:00
size = 15
n = 2 * size + 1
f = 100 / (n - 0.5)
len m[] n * n
#
2025-06-11 20:16:52 -04:00
gbackground 000
proc show_maze .
gclear
sz = f * 1.5
f2 = f / 2
2023-07-01 11:58:00 -04:00
for i = 1 to len m[]
if m[i] = 0
x = (i - 1) mod n
y = (i - 1) div n
2025-06-11 20:16:52 -04:00
gcolor 999
grect x * f - f2 y * f - f2 sz sz
2023-07-01 11:58:00 -04:00
.
.
sleep 0.01
.
offs[] = [ 1 n -1 (-n) ]
2025-06-11 20:16:52 -04:00
proc m_maze pos .
2023-07-01 11:58:00 -04:00
m[pos] = 0
2023-09-16 17:28:03 -07:00
show_maze
2023-07-01 11:58:00 -04:00
d[] = [ 1 2 3 4 ]
for i = 4 downto 1
2026-04-30 12:34:36 -04:00
d = random 1 i
2023-07-01 11:58:00 -04:00
dir = offs[d[d]]
d[d] = d[i]
if m[pos + dir] = 1 and m[pos + 2 * dir] = 1
m[pos + dir] = 0
2023-09-16 17:28:03 -07:00
m_maze pos + 2 * dir
2023-07-01 11:58:00 -04:00
.
.
.
endpos = n * n - 1
2025-06-11 20:16:52 -04:00
proc make_maze .
2026-04-30 12:34:36 -04:00
for i = 1 to len m[] : m[i] = 1
2023-07-01 11:58:00 -04:00
for i = 1 to n
m[i] = 2
m[n * i] = 2
m[n * i - n + 1] = 2
m[n * n - n + i] = 2
.
2026-04-30 12:34:36 -04:00
h = 2 * random 1 size - n + n * 2 * random 1 size
2023-09-16 17:28:03 -07:00
m_maze h
2023-07-01 11:58:00 -04:00
m[endpos] = 0
.
2023-09-16 17:28:03 -07:00
make_maze
show_maze
2023-07-01 11:58:00 -04:00
#
2025-06-11 20:16:52 -04:00
proc mark pos col .
2023-07-01 11:58:00 -04:00
x = (pos - 1) mod n
y = (pos - 1) div n
2025-06-11 20:16:52 -04:00
gcolor col
gcircle x * f + f / 4 y * f + f / 4 f / 3.5
2023-07-01 11:58:00 -04:00
.
2025-06-11 20:16:52 -04:00
found = 0
proc solve dir0 pos .
if found = 1 : return
2023-09-16 17:28:03 -07:00
mark pos 900
2023-07-01 11:58:00 -04:00
sleep 0.05
if pos = endpos
found = 1
2023-09-16 17:28:03 -07:00
return
2023-07-01 11:58:00 -04:00
.
2026-04-30 12:34:36 -04:00
of = random 0 3
2023-07-01 11:58:00 -04:00
for h = 1 to 4
dir = (h + of) mod1 4
posn = pos + offs[dir]
2023-09-16 17:28:03 -07:00
if dir <> dir0 and m[posn] = 0
solve (dir + 1) mod 4 + 1 posn
2023-07-01 11:58:00 -04:00
if found = 0
2023-09-16 17:28:03 -07:00
mark posn 888
2023-07-01 11:58:00 -04:00
sleep 0.08
.
.
.
.
sleep 1
2023-09-16 17:28:03 -07:00
solve 0 n + 2