10 ! MAZE ! Joseph K. Horn 20 INPUT "V,H? ";V,H @ T=V*H+1 @ OPTION BASE 1 30 E$=CHR$(27)&"="&CHR$(13) @ RANDOMIZE @ CFLAG 1 @ PWIDTH INF @ ENDLINE 40 X=CEIL(RND*H) @ FOR I=1 TO H @ IF I=X THEN PRINT "| "; ELSE PRINT "||"; 50 NEXT I @ PRINT "|";E$; 60 DESTROY W,L @ INTEGER W(H,V),L(H,V) 70 W(X,1)=1 @ C=2 @ S=1 @ R=X @ GOTO 100 80 R=RMD(R,H)+1 @ IF R#1 THEN S=RMD(S,V)+1 90 IF NOT W(R,S) THEN 80 100 CFLAG 0 @ IF R=1 THEN 290 ELSE IF W(R-1,S) THEN 290 110 IF S=1 THEN 190 ELSE IF W(R,S-1) THEN 190 120 IF R=H THEN 140 ELSE IF W(R+1,S) THEN 140 130 ON CEIL(RND*3) GOTO 470,490,510 140 IF S#V THEN 160 150 IF FLAG(1) THEN 180 ELSE SFLAG 0 @ GOTO 170 160 IF W(R,S+1) THEN 180 170 ON CEIL(RND*3) GOTO 470,490,540 180 ON CEIL(RND*2) GOTO 470,490 190 IF R=H THEN 250 ELSE IF W(R+1,S) THEN 250 200 IF S#V THEN 220 210 IF FLAG(1) THEN 240 ELSE SFLAG 0 @ GOTO 230 220 IF W(R,S+1) THEN 240 230 ON CEIL(RND*3) GOTO 470,510,540 240 ON CEIL(RND*2) GOTO 470,510 250 IF S#V THEN 270 260 IF FLAG(1) THEN 470 ELSE SFLAG 0 @ GOTO 280 270 IF W(R,S+1) THEN 470 280 ON CEIL(RND*2) GOTO 470,540 290 IF S=1 THEN 400 ELSE IF W(R,S-1) THEN 400 300 IF R=H THEN 360 ELSE IF W(R+1,S) THEN 360 310 IF S#V THEN 330 320 IF FLAG(1) THEN 350 ELSE SFLAG 0 @ GOTO 340 330 IF W(R,S+1) THEN 350 340 ON CEIL(RND*3) GOTO 490,510,540 350 ON CEIL(RND*2) GOTO 490,510 360 IF S#V THEN 380 370 IF FLAG(1) THEN 490 ELSE SFLAG 0 @ GOTO 390 380 IF W(R,S+1) THEN 490 390 ON CEIL(RND*2) GOTO 490,540 400 IF R=H THEN 440 ELSE IF W(R+1,S) THEN 440 410 IF S#V THEN 430 420 IF FLAG(1) THEN 510 ELSE SFLAG 0 @ GOTO 490 430 IF W(R,S+1) THEN 510 440 IF S#V THEN 460 450 IF FLAG(1) THEN 80 ELSE SFLAG 0 @ GOTO 540 460 IF W(R,S+1) THEN 80 ELSE 540 470 R=R-1 @ L(R,S)=2 480 W(R,S)=C @ C=C+1 @ IF C=T THEN 590 ELSE 100 490 S=S-1 @ L(R,S)=1 @ GOTO 480 510 W(R+1,S)=C @ C=C+1 @ L(R,S)=(L(R,S)#0)+2 530 R=R+1 @ IF C=T THEN 590 ELSE 290 540 IF FLAG(0,0) THEN 570 ELSE W(R,S+1)=C @ C=C+1 550 L(R,S)=2*(L(R,S)#0)+1 560 S=S+1 @ IF C=T THEN 590 ELSE 100 570 SFLAG 1 @ IF L(R,S) THEN L(R,S)=3 @ GOTO 80 580 L(R,S)=1 @ R=1 @ S=1 @ GOTO 90 590 IF NOT FLAG(1,0) THEN 60 600 FOR J=1 TO V @ PRINT "ü"; 610 FOR I=1 TO H @ IF L(I,J) DIV 2 THEN PRINT " "; ELSE PRINT " |"; 620 NEXT I @ PRINT E$; @ FOR I=1 TO H 630 IF RMD(L(I,J),2) THEN PRINT "ü "; ELSE PRINT "||"; 640 NEXT I @ PRINT "|";E$; @ NEXT J @ PRINT @ CFLAG 0,1 @ END