Maze generation: Difference between revisions
Content added Content deleted
No edit summary |
|||
Line 6,114: | Line 6,114: | ||
| | | | |
| | | | |
||
+---+---+---+---+---+---+---+---+---+---+ |
+---+---+---+---+---+---+---+---+---+---+ |
||
</pre> |
|||
=={{header|Picat}}== |
|||
<lang Picat>main => |
|||
gen_maze(8,8). |
|||
main([RStr,CStr]) => |
|||
MaxR = to_int(RStr), |
|||
MaxC = to_int(CStr), |
|||
gen_maze(MaxR,MaxC). |
|||
gen_maze(MaxR,MaxC) => |
|||
Maze = new_array(MaxR,MaxC), |
|||
foreach (R in 1..MaxR, C in 1..MaxC) |
|||
Maze[R,C] = 0 |
|||
end, |
|||
gen_maze(Maze,MaxR,MaxC,1,1), |
|||
display_maze(Maze,MaxR,MaxC). |
|||
gen_maze(Maze,MaxR,MaxC,R,C) => |
|||
Dirs = shuffle([left, right, up, down]), |
|||
foreach (Dir in Dirs) |
|||
dir(Dir,Dr,Dc,B,OB), |
|||
R1 := R+Dr, |
|||
C1 := C+Dc, |
|||
if (R1 >= 1 && R1 =< MaxR && C1 >= 1 && C1 =< MaxC && Maze[R1,C1] == 0) then |
|||
Maze[R,C] := Maze[R,C] \/ B, |
|||
Maze[R1,C1] := Maze[R1,C1] \/ OB, |
|||
gen_maze(Maze,MaxR,MaxC,R1,C1) |
|||
end |
|||
end. |
|||
% dir(direction, Dr, Dc, Bit, OppBit) |
|||
dir(left, 0, -1, 1, 2). |
|||
dir(right, 0, 1, 2, 1). |
|||
dir(up, -1, 0, 4, 8). |
|||
dir(down, 1, 0, 8, 4). |
|||
shuffle(Arr) = Res => |
|||
foreach (_ in 1..10) |
|||
I1 = random() mod 4 + 1, |
|||
I2 = random() mod 4 + 1, |
|||
T := Arr[I1], |
|||
Arr[I1] := Arr[I2], |
|||
Arr[I2] := T |
|||
end, |
|||
Res = Arr. |
|||
display_maze(Maze,MaxR,MaxC) => |
|||
foreach (R in 1..MaxR) |
|||
foreach (C in 1..MaxC) |
|||
printf("%s", cond(Maze[R,C] /\ 4 == 0, "+---", "+ ")) |
|||
end, |
|||
println("+"), |
|||
foreach (C in 1..MaxC) |
|||
printf("%s", cond(Maze[R,C] /\ 1 == 0, "| ", " ")), |
|||
end, |
|||
println("|") |
|||
end, |
|||
foreach (C in 1..MaxC) |
|||
print("+---") |
|||
end, |
|||
println("+"). |
|||
</lang> |
|||
{{out}} |
|||
<pre> |
|||
+---+---+---+---+---+---+---+---+ |
|||
| | | | |
|||
+---+ + +---+---+ + + + |
|||
| | | | | | | |
|||
+ +---+ + + +---+ + + |
|||
| | | | | | |
|||
+---+ + +---+ + + + + |
|||
| | | | | | | | |
|||
+ + +---+ + +---+ + + |
|||
| | | | | | |
|||
+ + + +---+---+---+---+ + |
|||
| | | | | | |
|||
+ +---+---+ + + + +---+ |
|||
| | | | | |
|||
+ + +---+ +---+---+---+ + |
|||
| | | |
|||
+---+---+---+---+---+---+---+---+ |
|||
</pre> |
</pre> |
||