Maze generation: Difference between revisions

Content added Content deleted
(add a typescript solution)
Line 2,526: Line 2,526:
#
#
background 000
background 000
func show_maze . .
proc show_maze . .
clear
clear
for i = 1 to len m[]
for i = 1 to len m[]
if m[i] = 0
if m[i] = 0
x = (i - 1) mod n
x = (i - 1) mod n
y = (i - 1) div n
y = (i - 1) div n
color 777
color 777
move x * f - f / 2 y * f - f / 2
move x * f - f / 2 y * f - f / 2
rect f * 1.5 f * 1.5
rect f * 1.5 f * 1.5
.
.
.
.
sleep 0.001
sleep 0.001
.
.
offs[] = [ 1 n -1 (-n) ]
offs[] = [ 1 n -1 (-n) ]
Line 2,543: Line 2,543:
brdr[] = [ -1 n - 2 -1 1 ]
brdr[] = [ -1 n - 2 -1 1 ]
#
#
func m_maze pos . .
proc m_maze pos . .
m[pos] = 0
m[pos] = 0
call show_maze
call show_maze
d[] = [ 1 2 3 4 ]
d[] = [ 1 2 3 4 ]
for i = 4 downto 1
for i = 4 downto 1
d = random i
d = random i
dir = d[d]
dir = d[d]
d[d] = d[i]
d[d] = d[i]
r = (pos - 1) div n
r = (pos - 1) div n
c = (pos - 1) mod n
c = (pos - 1) mod n
posn = pos + 2 * offs[dir]
if c <> brdc[dir] and r <> brdr[dir] and m[posn] <> 0
posn = pos + 2 * offs[dir]
posn = pos + 2 * offs[dir]
m[(pos + posn) div 2] = 0
if c <> brdc[dir] and r <> brdr[dir] and m[posn] <> 0
call m_maze posn
posn = pos + 2 * offs[dir]
m[pos + offs[dir]] = 0
.
call m_maze posn
.
.
.
.
.
func make_maze . .
proc make_maze . .
for i = 1 to len m[]
for i = 1 to len m[]
m[i] = 1
m[i] = 1
.
.
call m_maze startpos
call m_maze startpos
m[endpos] = 0
m[endpos] = 0
.
.
call make_maze
call make_maze