Maze generation: Difference between revisions

Content added Content deleted
m (→‎{{header|Phix}}: added syntax colouring, marked p2js compatible)
(Tidy up QB64 entry a bit, add Basic-256 entry)
Line 985: Line 985:


=={{header|BASIC}}==
=={{header|BASIC}}==
==={{header|QB64}}===
This implementation was written using QB64. It should also be compatible with Qbasic, as it uses no QB64-exclusive features.
This implementation was written using QB64. It should also be compatible with Qbasic, as it uses no QB64-exclusive features.
<lang BASIC>OPTION BASE 0
<lang qb64>OPTION BASE 0
RANDOMIZE TIMER
RANDOMIZE TIMER


Line 1,078: Line 1,079:
# # # # # # # # # # # # #
# # # # # # # # # # # # #
#########################################</pre>
#########################################</pre>

==={{header|BASIC256}}===
<lang basic256>global size_x, size_y
size_x = 25
size_y = 15

global char_wall, char_room
char_wall = "#"
char_room = " "

global directions_permutations
directions_permutations = {{0, 1, 2, 3}, {0, 1, 3, 2}, {0, 2, 1, 3}, {0, 2, 3, 1}, {0, 3, 1, 2}, {0, 3, 2, 1}, {1, 0, 2, 3}, {1, 0, 3, 2}, {1, 2, 0, 3}, {1, 2, 3, 0}, {1, 3, 0, 2}, {1, 3, 2, 0}, {2, 0, 1, 3}, {2, 0, 3, 1}, {2, 1, 0, 3}, {2, 1, 3, 0}, {2, 3, 0, 1}, {2, 3, 1, 0}, {3, 0, 1, 2}, {3, 0, 2, 1}, {3, 1, 0, 2}, {3, 1, 2, 0}, {3, 2, 0, 1}, {3, 2, 1, 0}}

global maze
dim maze[size_x * 2 + 1][size_y * 2 + 1]
for i = 0 to size_x * 2
for j = 0 to size_y * 2
maze[i][j] = char_wall
next j
next i

call make_room(0, 0)

call draw_maze()

end

subroutine make_room(room_x, room_y)
maze[1 + room_x * 2][1 + room_y * 2] = char_room
random_directions_index = rand * 24
for i = 0 to 3
random_direction = directions_permutations[random_directions_index][i]
if ((random_direction / 2) mod 2) < 1 then
dx = (random_direction mod 2) * 2 - 1
dy = 0
else
dx = 0
dy = (random_direction mod 2) * 2 - 1
end if
if can_dig(room_x + dx, room_y + dy) then
call make_door(room_x, room_y, dx, dy)
call make_room(room_x + dx, room_y + dy)
end if
next i
end subroutine

function can_dig(room_x, room_y)
if (room_x < 0) or (room_x >= size_x) or (room_y < 0) or (room_y >= size_y) then
can_dig = false
else
can_dig = (maze[1 + room_x * 2][1 + room_y * 2] = char_wall)
end if
end function

subroutine make_door(room_x, room_y, dx, dy)
maze[1 + room_x * 2 + dx][1 + room_y * 2 + dy] = char_room
end subroutine

subroutine draw_maze()
for i = 0 to size_y * 2
for j = 0 to size_x * 2
print maze[j][i];
next j
print
next i
end subroutine</lang>

{{out}}
<pre>###################################################
# # # # # # # # #
# # ### ### ##### ### ### # ### # # ### # # ### ###
# # # # # # # # # # # # # # # # #
# # # ### # # ##### ### # ### # ##### # ######### #
# # # # # # # # # # #
##### # ### ### ### # ################### # ##### #
# # # # # # # # # # #
# ##################### ### ##### # # # ##### # ###
# # # # # # # # # #
# ### ############### # # ##### ### # ##### # # # #
# # # # # # # # # # # # # # #
####### ### # # ### # ### # ########### # # ### # #
# # # # # # # # # # # # # # #
# # ##### ##### ### ####### # ### # # ### # # ### #
# # # # # # # # # # # # #
# # # ########### ### # ### # # ############### # #
# # # # # # # # #
# ### # # ##### ######### ####### # ### ###########
# # # # # # # # # # # # #
# ### # ### # ##### ### ### # ##### # ### ####### #
# # # # # # # # # # # # # #
### ### # ### # # ####### ##### ####### ### # # # #
# # # # # # # # # # # # # # #
# ### # ### # # # # ### ######### # # ### ####### #
# # # # # # # # # # # # # #
# ### # # ############### # # # # # # ##### ##### #
# # # # # # # # # # # # # #
# ######### # # ### # # ########### ##### # # ### #
# # # # # # #
###################################################</pre>


=={{header|Batch File}}==
=={{header|Batch File}}==