Listing of file='A-MAZING' on disk='vmedia/games-droz01.wvd.zip'
# Sector 543, program filename = 'A-MAZING'
1000 REM *** A-MAZING *** MAZE GAME
1010 REM << VARIABLES >>
1020 DIM S(209), T(209), D(4)
1030 DIM S$(23,79)1, M$(11,19)1, H$(11,19)1, V$(11,19)1
1040 DIM W$10, K$1, K0$1, K1$1, K2$1, O$1
1050 DIM W$(11,19)1, T$(11,19)1, C$1, D$1, D2$7, D4$13, D6$5, D8$8
1060 D2$ = HEX(080A3A080A8B08)
1070 D4$ = HEX(08082E08082E08082E08088B08)
1080 D6$ = HEX(2E2E2E8B08)
1090 D8$ = HEX(3A080C3A080C8B08)
1100 GOTO 1730
1110 REM << SUBROUTINES >>
1120 DEFFN'210( X0, Y0, Z0 )
1130 IF M$(X0,Y0)=" " THEN 1160
1140 IF O$="^" THEN 1200
1150 IF M$(X0,Y0)=K$ THEN 1200
1160 I = 2*X
1170 J = 4*Y-1
1180 D = D+1
1190 D(D) = Z0
1200 RETURN
1210 DEFFN'200( X, Y )
1220 K$ = M$(X,Y)
1230 K0$ = "^"
1240 D = 0
1250 IF X=11 THEN 1270
1260 GOSUB '210( X+1, Y, 1 )
1270 IF Y=1 THEN 1290
1280 GOSUB '210( X, Y-1, 2 )
1290 IF Y=19 THEN 1310
1300 GOSUB '210( X, Y+1, 3 )
1310 IF X=1 THEN 1330
1320 GOSUB '210( X-1, Y, 4 )
1330 IF D=0 THEN 1580
1340 ON D(RND(1)*D+1) GOTO 1350, 1390, 1430, 1470
1350 V$(X,Y) = "^"
1360 S$(I+1,J-1), S$(I+1,J), S$(I+1,J+1) = " "
1370 X = X+1
1380 GOTO 1500
1390 H$(X,Y-1) = "^"
1400 S$(I,J-2) = " "
1410 Y = Y-1
1420 GOTO 1500
1430 H$(X,Y) = "^"
1440 S$(I,J+2) = " "
1450 Y = Y+1
1460 GOTO 1500
1470 V$(X-1,Y) = "^"
1480 S$(I-1,J-1), S$(I-1,J), S$(I-1,J+1) = " "
1490 X = X-1
1500 IF M$(X,Y)=" " THEN 1520
1510 O$ = "^"
1520 M$(X,Y) = K$
1530 S = S+1
1540 PRINT HEX(010A0A0A0A0A0A0A0A0A0A); TAB(19); S; "CELLS OUT OF 208 HAVE B
EEN GENERATED"
1550 S(S) = X
1560 T(S) = Y
1570 K0$ = " "
1580 RETURN
1590 DEFFN'220( X, Y )
1600 I = 2*X
1610 J = 4*Y-1
1620 IF X<>1 THEN 1640
1630 S$(I-1,J-1), S$(I-1,J), S$(I-1,J+1) = " "
1640 IF X<>11 THEN 1660
1650 S$(I+1,J-1), S$(I+1,J), S$(I+1,J+1) = " "
1660 IF Y<>1 THEN 1680
1670 S$(I,J-2) = " "
1680 IF Y<>19 THEN 1700
1690 S$(I,J+2) = " "
1700 RETURN
1710 REM << MAIN LINE >>
1720 REM INITIALIZE DISPLAY MATRIX
1730 S$(1,1), S$(1,5) = HEX(23)
1740 S$(1,2), S$(1,3), S$(1,4) = HEX(3D)
1750 S$(2,1), S$(2,5) = HEX(8C)
1760 MAT COPY S$()<2,72> TO S$()<6,72>
1770 MAT COPY S$()<81,72> TO S$()<85,72>
1780 S$(1,78), S$(2,78) = HEX(0D)
1790 S$(1,79), S$(2,79) = HEX(0A)
1800 MAT COPY S$()<1,1659> TO S$()<159,1659>
1810 REM INITIALIZE MODEL STORAGE
1820 INIT(" ") M$(), H$(), V$()
1830 S, T = 0
1840 O$, K1$, K2$ = " "
1850 REM CANCEL VISUAL NOISE
1860 PRINT HEX(03060A0A0A0A0A0A0A0A); TAB(32); "GENERATING MAZE"
1870 REM SELECT STARTING CELL
1880 A1, X1 = INT(RND(1)*11)+1
1890 B1, Y1 = 1
1900 M$(X1,Y1) = "1"
1910 GOSUB '220( X1, Y1 )
1920 S$(I,J) = HEX(8B)
1930 REM SELECT GOAL CELL
1940 A2, X2 = INT(RND(1)*11)+1
1950 B2, Y2 = 19
1960 M$(X2,Y2) = "2"
1970 GOSUB '220( X2, Y2 )
1980 S$(I,J-1) = HEX(84)
1990 S$(I,J) = HEX(81)
2000 S$(I,J+1) = HEX(5F)
2010 REM GENERATE MAZE
2020 IF K1$<>" " THEN 2160
2030 GOSUB '200( X1, Y1 )
2040 IF K0$<>" " THEN 2080
2050 X1 = X
2060 Y1 = Y
2070 GOTO 2170
2080 IF S=208 THEN 2140
2090 T = T+1
2100 PRINT HEX(010A0A0A0A0A0A0A0A0A0A0A0A); TAB(20); T; "CELLS OUT OF"; S; "HA
VE BEEN EXAMINED"
2110 X1 = S(T)
2120 Y1 = T(T)
2130 GOTO 2030
2140 K1$ = "^"
2150 GOTO 2170
2160 IF K2$<>" " THEN 2350
2170 IF K2$<>" " THEN 2310
2180 GOSUB '200( X2, Y2 )
2190 IF K0$<>" " THEN 2230
2200 X2 = X
2210 Y2 = Y
2220 GOTO 2020
2230 IF S=208 THEN 2290
2240 T = T+1
2250 PRINT HEX(010A0A0A0A0A0A0A0A0A0A0A0A); TAB(20); T; "CELLS OUT OF"; S; "HA
VE BEEN EXAMINED"
2260 X2 = S(T)
2270 Y2 = T(T)
2280 GOTO 2180
2290 K2$ = "^"
2300 GOTO 2020
2310 IF K1$<>" " THEN 2350
2320 GOTO 2020
2330 REM MAZE IS GENERATED
2340 REM NOW FIND YOUR WAY THROUGH IT
2350 $GIO /F05 (4001 A000, W$) S$()
2360 MAT COPY H$() TO W$()
2370 MAT COPY V$() TO T$()
2380 PRINT TAB(12); "USE NUMBER KEYS -- 2 = DOWN, 4 = LEFT, 6 = RIGHT, 8 = UP"
; HEX(0C)
2390 D$ = ":"
2400 P0 = A2
2410 Q0 = B2
2420 P = A1
2430 Q = B1
2440 M0, T0 = 0
2450 $GIO /F05 (4001, W$)
2460 FOR I = 1 TO 2*P-1
2470 $GIO /F05 (400A, W$)
2480 NEXT I
2490 FOR I = 1 TO 4*Q-2
2500 $GIO /F05 (4009, W$)
2510 NEXT I
2520 T0 = T0+1
2530 KEYIN C$, 2550, 2520
2540 GOTO 2520
2550 IF C$="2" THEN 2600
2560 IF C$="4" THEN 2660
2570 IF C$="6" THEN 2730
2580 IF C$="8" THEN 2790
2590 GOTO 2520
2600 IF T$(P,Q)=" " THEN 2520
2610 $GIO /F05 (A000, W$) D$
2620 $GIO /F05 (A000, W$) D2$
2630 D$ = ":"
2640 P = P+1
2650 GOTO 2840
2660 IF Q=1 THEN 2520
2670 IF W$(P,Q-1)=" " THEN 2520
2680 $GIO /F05 (A000, W$) D$
2690 $GIO /F05 (A000, W$) D4$
2700 D$ = "."
2710 Q = Q-1
2720 GOTO 2840
2730 IF W$(P,Q)=" " THEN 2520
2740 $GIO /F05 (A000, W$) D$
2750 $GIO /F05 (A000, W$) D6$
2760 D$ = "."
2770 Q = Q+1
2780 GOTO 2840
2790 IF P=1 THEN 2520
2800 IF T$(P-1,Q)=" " THEN 2520
2810 $GIO /F05 (A000, W$) D8$
2820 D$ = "."
2830 P = P-1
2840 M0 = M0+1
2850 IF P<>P0 THEN 2520
2860 IF Q<>Q0 THEN 2520
2870 PRINT HEX(010C); TAB(12); "PROBLEM SOLVED IN"; M0; "MOVES WITH ELAPSED TI
ME"; T0; TAB(78); HEX(0C)
2880 FOR X= 1 TO 15000
: NEXT X
: GOTO 1000