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