69 lines
1.6 KiB
Plaintext
69 lines
1.6 KiB
Plaintext
OPTION BASE 0
|
|
RANDOMIZE TIMER
|
|
|
|
REM must be even
|
|
width% = 40
|
|
height% = 20
|
|
|
|
REM make array and fill
|
|
DIM maze$(width%, height%)
|
|
FOR x% = 0 TO width%
|
|
FOR y% = 0 TO height%
|
|
maze$(x%, y%) = "#"
|
|
NEXT y%
|
|
NEXT x%
|
|
|
|
REM initial start location
|
|
currentx% = INT(RND * (width% - 1))
|
|
currenty% = INT(RND * (height% - 1))
|
|
REM value must be odd
|
|
IF currentx% MOD 2 = 0 THEN currentx% = currentx% + 1
|
|
IF currenty% MOD 2 = 0 THEN currenty% = currenty% + 1
|
|
maze$(currentx%, currenty%) = " "
|
|
|
|
REM generate maze
|
|
done% = 0
|
|
DO WHILE done% = 0
|
|
FOR i% = 0 TO 99
|
|
oldx% = currentx%
|
|
oldy% = currenty%
|
|
|
|
REM move in random direction
|
|
SELECT CASE INT(RND * 4)
|
|
CASE 0
|
|
IF currentx% + 2 < width% THEN currentx% = currentx% + 2
|
|
CASE 1
|
|
IF currenty% + 2 < height% THEN currenty% = currenty% + 2
|
|
CASE 2
|
|
IF currentx% - 2 > 0 THEN currentx% = currentx% - 2
|
|
CASE 3
|
|
IF currenty% - 2 > 0 THEN currenty% = currenty% - 2
|
|
END SELECT
|
|
|
|
REM if cell is unvisited then connect it
|
|
IF maze$(currentx%, currenty%) = "#" THEN
|
|
maze$(currentx%, currenty%) = " "
|
|
maze$(INT((currentx% + oldx%) / 2), ((currenty% + oldy%) / 2)) = " "
|
|
END IF
|
|
NEXT i%
|
|
|
|
REM check if all cells are visited
|
|
done% = 1
|
|
FOR x% = 1 TO width% - 1 STEP 2
|
|
FOR y% = 1 TO height% - 1 STEP 2
|
|
IF maze$(x%, y%) = "#" THEN done% = 0
|
|
NEXT y%
|
|
NEXT x%
|
|
LOOP
|
|
|
|
REM draw maze
|
|
FOR y% = 0 TO height%
|
|
FOR x% = 0 TO width%
|
|
PRINT maze$(x%, y%);
|
|
NEXT x%
|
|
PRINT
|
|
NEXT y%
|
|
|
|
REM wait
|
|
DO: LOOP WHILE INKEY$ = ""
|