Maze generation: Difference between revisions

m
→‎{{header|Icon}} and {{header|Unicon}}: more prep for solver, mark entrance/exit
m (→‎{{header|Icon}} and {{header|Unicon}}: more prep for solver, mark entrance/exit)
Line 1,051:
end
 
$define SEEN 16 32 # bread crumbs for generator
$define FOYER 16 # entrance and exit
$define NORTH 8 # sides ...
$define EAST 4
$define SOUTH 2
$define WEST 1
$define EMPTY 0 # like new
 
procedure GenerateMaze(r,c) #: Depth First Maze Generation
Line 1,068 ⟶ 1,069:
c := ?w # ... col,
case 2 ^(?4 - 1) of { # ... side
NORTH : maze[r := 1,c] +:= NORTH + FOYER
EAST : maze[r, c := w] +:= EAST + FOYER
SOUTH : maze[r := h,c] +:= SOUTH + FOYER
WEST : maze[r,c := 1] +:= WEST + FOYER
}
}
rd := [NORTH, EAST, SOUTH, WEST] # initial list of all directions
GenerateMaze(r,c) # recurse through maze
every r := 1 to *maze & c := 1 to *maze[r] do # keep only directions
maze[r,c] := iand(maze[r,c],NORTH+EAST+SOUTH+WEST)
return 1(.maze,maze := &null) # return maze and reset for next
}
Anonymous user