Compucolor.org – Virtual Media

Listing of file='MAZE1.BAS;01' on disk='vmedia/mazes_1-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