60 lines
1.6 KiB
Plaintext
60 lines
1.6 KiB
Plaintext
100 MS=10:REM MAZE SIZE
|
|
110 DIM S(MS+1,MS+1):REM SOUTH WALLS
|
|
120 DIM W(MS+1,MS+1):REM WEST WALLS
|
|
130 DIM V(MS+1,MS+1):REM VISITED CELLS
|
|
140 PRINT "INITIALIZING..."
|
|
150 GOSUB 260:REM INITIALIZE MAZE
|
|
160 PRINT "BUILDING..."
|
|
170 DIM PC(MS*MS+1):DIM PR(MS*MS+1):REM STACK
|
|
180 REM PICK RANDOM STARTING CELL
|
|
190 X = RND(-TI)
|
|
200 C=(INT(RND(1)*MS)+1)
|
|
210 R=(INT(RND(1)*MS)+1)
|
|
220 GOSUB 400:REM BUILD MAZE
|
|
230 GOSUB 540:REM DRAW MAZE
|
|
240 END
|
|
250 REM -----INITIALIZE MAZE-----
|
|
260 REM SET WALLS ON AND VISITED CELLS OFF
|
|
270 T=MS+1
|
|
280 FOR C=0 TO T:FOR R=0 TO T:
|
|
290 S(C,R)=1:W(C,R)=1:V(C,R)=0
|
|
300 NEXT R:NEXT C
|
|
310 REM SET BORDER CELLS TO VISITED
|
|
320 FOR C=0 TO T
|
|
330 V(C,0)=1:V(C,T)=1
|
|
340 NEXT C
|
|
350 FOR R=0 TO T
|
|
360 V(0,R)=1:V(T,R)=1
|
|
370 NEXT R
|
|
380 RETURN
|
|
390 REM -----BUILD MAZE-----
|
|
400 U=U+1:PC(U)=C:PR(U)=R:REM PUSH
|
|
410 V(C,R)=1
|
|
420 IF V(C,R+1)=1 AND V(C+1,R)=1 AND V(C,R-1)=1 AND V(C-1,R)=1 THEN GOTO 500
|
|
430 Z=INT(RND(1)*4)
|
|
440 IF Z=0 AND V(C,R+1)=0 THEN S(C,R)=0:R=R+1:GOTO 400
|
|
450 IF Z=1 AND V(C+1,R)=0 THEN W(C+1,R)=0:C=C+1:GOTO 400
|
|
460 IF Z=2 AND V(C,R-1)=0 THEN S(C,R-1)=0:R=R-1:GOTO 400
|
|
470 IF Z=3 AND V(C-1,R)=0 THEN W(C,R)=0:C=C-1:GOTO 400
|
|
480 GOTO 430
|
|
500 C=PC(U):R=PR(U):U=U-1:REM POP
|
|
510 IF U > 0 THEN GOTO 420
|
|
520 RETURN
|
|
530 REM -----DRAW MAZE-----
|
|
540 REM OPEN 4,4:CMD 4:REM SEND OUTPUT TO PRINTER
|
|
550 PRINT "+--+--+--+--+--+--+--+--+--+--+"
|
|
560 FOR R = 1 TO MS
|
|
570 FOR C = 1 TO MS+1
|
|
580 IF W(C,R)=0 THEN PRINT " ";
|
|
590 IF W(C,R)=1 THEN PRINT ": ";
|
|
600 NEXT C
|
|
610 PRINT
|
|
620 FOR C = 1 TO MS
|
|
630 IF S(C,R)=0 THEN PRINT "+ ";
|
|
640 IF S(C,R)=1 THEN PRINT "+--";
|
|
650 NEXT C
|
|
660 PRINT "+"
|
|
670 NEXT R
|
|
680 REM PRINT#4:CLOSE 4:REM CLOSE PRINTER DEVICE
|
|
690 RETURN
|