Listing of file='MAZE1.BAS;01' on disk='vmedia/chip_24-sector.ccvf'
1 REM "MAZE"; COMPUCOLOR VERSION BY W. RUST, JAN 1981 2 PLOT 6,3,12,14,6,25 3 PLOT 3,27,4:PRINT " MAZE ":PLOT 6,3,15:PRINT :PRINT 4 PRINT "THIS PROGRAM PRINTS A MAZE FOR YOU TO SOLVE. TURN ON THE" 5 PRINT "PRINTER AND ENTER THE SIZE OF THE MAZE DESIRED:":PRINT 6 CLEAR 200 9 PLOT 6,2 10 INPUT "NUMBER OF CELLS HORIZONTALLY (3 TO 26): ";H 11 H= INT (H):IF H< 3OR H> 26GOTO 10 12 PRINT 20 INPUT "NUMBER OF CELLS VERTICALLY (3 TO 35): ";U 21 U= INT (U):IF U< 3OR U> 35GOTO 20 22 PRINT 30 INPUT "HOW MANY SUCH MAZES THIS RUN (1 TO 10)? ";N1 31 N1= INT (N1):IF N1< 1OR N1> 10GOTO 30 32 PRINT :PLOT 6,1:PRINT "WAIT...":PLOT 6,3 40 REM -- HOUSEKEEPING 50 DIM L1$(3* H+ 3),L2$(3* H+ 3),W(H,U),V(H,U) 60 C1$= CHR$ (124):C2$= " ":C3$= "-" 70 L3= 3* H+ 1:H3= 3* H:F1= H* U+ 1 80 DEF FN A(X)= INT (X* RND (1)+ 1):REM GENERATE INTEGER 1 TO X 150 FOR Z9= 1TO N1:REM # MAZES 160 L4= INT (.5+ RND (1))* 2- 1:REM L4 = -1 OR 1 170 FOR I= 1TO H:FOR J= 1TO U:W(I,J)= 0:V(I,J)= 0:NEXT J:NEXT I 230 Z= 0:Q= 0 239 REM -- CHOOSE MAZE ENTRANCE CELL Y 240 Y= FN A(H):L1$(1)= C1$ 270 FOR J= 3TO H3STEP 3:L1$(J- 1)= C3$:L1$(J)= C3$:L1$(J+ 1)= C1$:NEXT J 320 L1$(3* Y)= C2$:L1$(3* Y- 1)= C2$ 340 C= 1:W(Y,1)= C 360 C= C+ 1:R= Y:S= 1:GOTO 570 400 REM -- DESIGN THE MAZE 401 IF L4= 1GOTO 460 410 IF R< > HGOTO 540 420 IF S< > UGOTO 510 430 R= Y:S= 1:GOTO 550 460 IF R< > 1GOTO 540 470 IF S< > UGOTO 510 480 R= H:S= 1:GOTO 550 510 S= S+ 1:L4= - L4:GOTO 550 540 R= R- L4 550 IF W(R,S)= 0GOTO 400 560 IF Q< > 0THEN PRINT "Q =";Q:REM (WHY THIS LINE?) 570 IF R= 1GOTO 1010 580 IF W(R- 1,S)< > 0GOTO 1010 590 IF S= 1GOTO 790 600 IF W(R,S- 1)< > 0GOTO 790 610 IF R= HGOTO 670 620 IF W(R+ 1,S)< > 0GOTO 670 630 X= FN A(3):ON XGOTO 1410,1480,1550 670 IF S< > UGOTO 710 680 IF Z< > 0GOTO 760 690 Q= 1:GOTO 720 710 IF W(R,S+ 1)< > 0GOTO 760 720 X= FN A(3):ON XGOTO 1410,1480,1620 760 X= FN A(2):ON XGOTO 1410,1480 790 IF R= HGOTO 930 800 IF W(R+ 1,S)< > 0GOTO 930 810 IF S< > UGOTO 850 820 IF Z< > 0GOTO 900 830 Q= 1:GOTO 860 850 IF W(R,S+ 1)< > 0GOTO 900 860 X= FN A(3):ON XGOTO 1410,1550,1620 900 X= FN A(2):ON XGOTO 1410,1550 930 IF S< > UGOTO 970 940 IF Z< > 0GOTO 1410 950 Q= 1:GOTO 980 970 IF W(R,S+ 1)< > 0GOTO 1410 980 X= FN A(2):ON XGOTO 1410,1620 1010 IF S= 1GOTO 1250 1020 IF W(R,S- 1)< > 0GOTO 1250 1030 IF R= HGOTO 1170 1040 IF W(R+ 1,S)< > 0GOTO 1170 1050 IF S< > UGOTO 1090 1060 IF Z< > 0GOTO 1140 1070 Q= 1:GOTO 1100 1090 IF W(R,S+ 1)< > 0GOTO 1140 1100 X= FN A(3):ON XGOTO 1480,1550,1620 1140 X= FN A(2):ON XGOTO 1480,1550 1170 IF S< > UGOTO 1210 1180 IF Z< > 0GOTO 1480 1190 Q= 1:GOTO 1220 1210 IF W(R,S+ 1)< > 0GOTO 1480 1220 X= FN A(2):ON XGOTO 1480,1620 1250 IF R= HGOTO 1350 1260 IF W(R+ 1,S)< > 0GOTO 1350 1270 IF S< > UGOTO 1310 1280 IF Z< > 0GOTO 1550 1290 Q= 1:GOTO 1320 1310 IF W(R,S+ 1)< > 0GOTO 1550 1320 X= FN A(2):ON XGOTO 1550,1620 1350 IF S< > UGOTO 1390 1360 IF Z< > 0GOTO 400 1370 Q= 1:GOTO 1620 1390 IF W(R,S+ 1)< > 0GOTO 400 1400 GOTO 1620 1410 W(R- 1,S)= C:C= C+ 1:V(R- 1,S)= 2:R= R- 1 1450 IF C= F1GOTO 1720 1460 Q= 0:GOTO 570 1480 W(R,S- 1)= C:C= C+ 1:V(R,S- 1)= 1:S= S- 1 1520 IF C= F1GOTO 1720 1530 Q= 0:GOTO 570 1550 W(R+ 1,S)= C:C= C+ 1:V(R,S)= V(R,S)+ 2:R= R+ 1 1590 IF C= F1GOTO 1720 1600 Q= 0:GOTO 1010 1620 V(R,S)= V(R,S)+ 1:IF Q= 1GOTO 1690 1640 W(R,S+ 1)= C:C= C+ 1:S= S+ 1 1670 IF C= F1GOTO 1720 1680 GOTO 570 1690 Z= R:Q= 0:GOTO 430 1720 REM -- PRINT MAZE 1721 GOSUB 5000 1722 L2$(1)= C1$ 1730 FOR I= 1TO H:IF V(I,1)> 1THEN L1$(3* I+ 1)= C3$ 1750 NEXT I 1760 FOR J1= 1TO L3:PRINT L1$(J1);:NEXT J1 1780 L1$(1)= L2$(1) 1790 FOR J= 1TO U 1800 FOR I= 1TO H 1810 L= 3* I- 1:L1$(L+ 1)= C2$:L1$(L)= L1$(L+ 1) 1840 IF V(I,J)< 2GOTO 1870 1850 L1$(L+ 2)= C2$:GOTO 1880 1870 L1$(L+ 2)= C1$ 1880 IF V(I,J)= 0GOTO 1920 1890 IF V(I,J)= 2GOTO 1920 1900 L2$(L+ 1)= C2$:GOTO 1930 1920 L2$(L+ 1)= C3$ 1930 L2$(L)= L2$(L+ 1):IF V(I,J)< 2GOTO 1990 1950 IF J= UGOTO 1970 1960 IF V(I,J+ 1)< 2GOTO 1990 1970 L2$(L+ 2)= C3$ 1980 GOTO 2000 1990 L2$(L+ 2)= C1$ 2000 NEXT I 2050 PRINT 2100 FOR J1= 1TO L3:PRINT L1$(J1);:NEXT J1 2105 PRINT 2110 FOR J1= 1TO L3:PRINT L2$(J1);:NEXT J1 2120 NEXT J 2130 FOR J1= 1TO 5:PRINT :NEXT J1 2135 GOSUB 5100 2140 NEXT Z9 4999 END 5000 REM -- SELECT PRINTER 5010 POKE 33289,80:PLOT 14,27,18,3,15,27,13 5020 PRINT " " 5030 RETURN 5100 REM -- SELECT CRT 5110 PRINT 5120 POKE 33265,0:POKE 33289,64 5130 RETURN 6000 REM -- LIST ON PRINTER 6010 GOSUB 5000:LIST :GOSUB 5100 6020 END