0 REM MODIFIED FOR USE ON THE IBM-PC 1 REM BY GARY & DONNA MCCOY 2 KEY OFF 3 CLEAR,,20000 4 SCREEN 0:WIDTH 40 200 CLS : GOTO 6400 800 N = 2:A = H:B = V:FF = 2 ^ (F - 1) 900 SCREEN 1:COLOR 0,1:CLS 1000 Z = M(A,B) * FF 1200 IF FN M(Z / 16) = 0 THEN 1600 1300 RL = - 1: GOSUB 5400 1400 GOTO 2000 1600 W = M(A + S,B - R) * FF 1700 IF FN M(W / 128) = 0 THEN 2000 1800 RL = - 1: GOSUB 4600 2000 IF FN M(Z / 64) = 0 THEN 2400 2100 RL = 1: GOSUB 5400 2200 GOTO 2800 2400 W = M(A - S,B + R) * FF 2500 IF FN M(W / 128) = 0 THEN 2800 2600 RL = 1: GOSUB 4600 2800 IF FN M(Z / 128) = 1 THEN 3400 3000 N = N + 1: IF N > 8 THEN 3500 3100 A = A + R:B = B + S: IF B < 2 THEN 3500 3200 GOTO 1000 3400 GOSUB 3800 3500 RETURN 3800 PSET (VX + DX(N),YU(N)),2 3900 LINE (VX + DX(N),YU(N))-(VX + DX(N),YD(N)),2 4000 LINE (VX + DX(N),YD(N))-(VX - DX(N),YD(N)),2 4100 LINE (VX - DX(N),YD(N))-(VX - DX(N),YU(N)),2 4200 LINE (VX - DX(N),YU(N))-(VX + DX(N),YU(N)),2 4300 RETURN 4600 PSET (VX + RL * DX(N - 1),YU(N)),2 4700 LINE (VX + RL * DX(N - 1),YU(N))-(VX + RL * DX(N),YU(N)),2 4800 LINE (VX + RL * DX(N),YU(N))-(VX + RL * DX(N),YD(N)),2 4900 LINE (VX + RL * DX(N),YD(N))-(VX + RL * DX(N - 1),YD(N)),2 5000 RETURN 5400 PSET(VX + RL * DX(N - 1),YU(N - 1)),2 5500 LINE (VX + RL * DX(N-1),YU(N-1))-(VX + RL * DX(N),YU(N)),2 5600 LINE (VX + RL * DX(N),YU(N))-(VX + RL * DX(N),YD(N)),2 5700 LINE (VX + RL * DX(N),YD(N))-(VX + RL * DX(N - 1),YD(N - 1)),2 5800 IF N > 2 THEN LINE (VX + RL * DX(N-1),YD(N-1))-(VX + RL * DX(N - 1),YU(N - 1)),2 5900 RETURN 6400 CLS:COLOR 9,0:LOCATE 6,12: PRINT "YOU ARE THE RAT!": PRINT : LOCATE 4,4: PRINT "A DIFFERENT PERSPECTIVE ON MAZES." 6405 CH = 0 6410 PRINT : LOCATE 1,1: PRINT "FROM THE COMPUSERVE APPLE USER'S GROUP" 6420 LOCATE 2,9: PRINT "PUBLIC ACCESS DATABASE" 6425 LOCATE 17,1: PRINT "----------------------------------------" 6430 LOCATE 18,9: PRINT "USE <- AND -> TO TURN" 6440 PRINT : LOCATE 19,6: PRINT " TO MOVE FORWARD" 6450 PRINT : LOCATE 20,3: PRINT " FOR A TOP VIEW (TO CHEAT)" 6500 DEF FN M(X) = INT (X) - INT ( INT (X) / 2) * 2 6600 LOCATE 15,1:FX = 36: INPUT "PLEASE ENTER MAZE SIZE (H,V) ";H,V 6700 H = INT (H):V = INT (V) 6800 IF H > 2 AND H < 51 AND V > 2 AND V < 51 THEN 7000 6900 PRINT "2 1 THEN I = INT ( RND (1) * I) + 1 10100 ON C(I) GOTO 10300,10800,11300,11800 10300 M(R,S) = M(R,S) - FN M(M(R,S)) 10400 R = R - 1 10500 M(R,S) = M(R,S) - FN M(M(R,S) / 4) * 4 10600 GOTO 13400 10800 M(R,S) = M(R,S) - FN M(M(R,S) / 8) * 8 10900 S = S - 1 11000 M(R,S) = M(R,S) - FN M(M(R,S) / 2) * 2 11100 GOTO 13400 11300 M(R,S) = M(R,S) - FN M(M(R,S) / 4) * 4 11400 R = R + 1 11500 M(R,S) = M(R,S) - FN M(M(R,S)) 11600 GOTO 13400 11800 M(R,S) = M(R,S) - FN M(M(R,S) / 2) * 2 11900 S = S + 1 12000 M(R,S) = M(R,S) - FN M(M(R,S) / 8) * 8 12100 GOTO 13400 12300 IF D = - 1 THEN 12700 12400 IF R < > H THEN 13100 12500 IF S < > V THEN 13000 12600 R = 2:S = 2: GOTO 13200 12700 IF R < > 2 THEN 13100 12800 IF S < > V THEN 13000 12900 R = H:S = 2: GOTO 13200 13000 S = S + 1:D = - D: GOTO 13200 13100 R = R + D 13200 IF M(R,S) = 15 THEN 12300 13300 GOTO 9000 13400 NEXT IW 13500 MH = H:MV = V 13700 I = INT ( RND (1) * (MH - 1)) + 2 13800 M(I,1) = 0 13900 M(I,2) = M(I,2) - FN M(M(I,2) / 8) * 8 14000 H = INT ( RND (1) * (MH - 1)) + 2 14100 H1 = H:V1 = V 14300 COLOR 23: LOCATE 23,12: PRINT "MAZE COMPLETED.": COLOR 9 14400 GOTO 17000 14700 HZ = INT (MX / MH):VZ = INT (MY / MV) 14750 CH = CH + 1 14800 SCREEN 1:COLOR 0,1:CLS 14900 PSET (1 + HZ,1 + VZ),2 15000 LINE (1 + HZ,1 + VZ)-(1 + HZ,MV * VZ + 1),2 15100 FOR J = 1 TO MV: FOR I = 2 TO MH 15200 N = M(I,J):X = I * HZ + 1:Y = J * VZ + 1 15300 IF FN M(N / 2) = 0 THEN 15700 15500 PSET (X,Y),2 15600 LINE (X,Y)-(X - HZ,Y),2 15700 IF FN M(N / 4) = 0 THEN 16100 15900 PSET (X,Y),2 16000 LINE (X,Y)-(X,Y - VZ),2 16100 NEXT I,J 16300 X = H * HZ - 1:Y = V * VZ - 1 16400 PSET (X + 1,Y + 1),2 16500 LINE (X + 1,Y + 1)-(X - HZ + 2,Y - VZ + 2),2 16600 PSET (X - HZ + 2,Y + 1),2 16700 LINE (X - HZ + 2,Y + 1)-(X + 1,Y - VZ + 2),2 16800 RETURN 17000 FOR X = 1 TO MH: FOR Y = 1 TO MV 17100 M(X,Y) = M(X,Y) + M(X,Y) * 16 17200 NEXT Y,X 17500 F = INT ( RND (1) * 4) + 1 17600 ON F GOTO 17700,17800,17900,18000 17700 R = 0:S = - 1: GOTO 18100 17800 R = 1:S = 0: GOTO 18100 17900 R = 0:S = 1: GOTO 18100 18000 R = - 1:S = 0 18100 GOSUB 800 18300 DEF SEG : POKE 106,0 18400 IK$=INKEY$ 18410 KEY(12) ON 18420 KEY(13) ON 18500 ON KEY(12) GOSUB 19100 18600 ON KEY(13) GOSUB 19400 18700 IF IK$ = " " THEN 20100 18800 IF IK$ = CHR$(27) THEN 21300 18900 GOTO 18400 19100 F = F - 1: IF F < 1 THEN F = 4 19200 GOTO 19500 19400 F = F + 1: IF F > 4 THEN F = 1 19500 ON F GOTO 19600,19700,19800,19900 19600 R = 0:S = - 1: GOTO 21000 19700 R = 1:S = 0: GOTO 21000 19800 R = 0:S = 1: GOTO 21000 19900 R = - 1:S = 0: GOTO 21000 20100 Z = M(H,V) 20200 T = Z * 2 ^ (F - 1):T = FN M(T / 128) 20300 IF T = 0 THEN 20600 20500 GOTO 18300 20600 NM = NM + 1: LOCATE 22,24: PRINT "MOVE "NM 20650 FOR Q=1 TO 500:NEXT 20700 IF NM < 400 THEN W(NM) = F 20800 H = H + R:V = V + S 20900 IF V < 2 THEN 21500 21000 GOSUB 800 21100 GOTO 18300 21300 GOSUB 14700 21400 GOTO 18300 21500 CLS : LOCATE 12,5: PRINT "CONGRATS, IT TOOK YOU "NM" STEPS." 21540 IF CH = 1 THEN LOCATE 14,8: PRINT "(BUT YOU CHEATED ONCE.) 21550 IF CH > 1 THEN LOCATE 14,6: PRINT " (BUT YOU CHEATED ";CH;" TIMES.)" 21560 FOR I=1 TO 5000:NEXT 21700 V = V1:H = H1: GOSUB 14700 21900 X = INT (H * HZ - HZ / 2) + 1:Y = INT (V * VZ - VZ / 2) + 1 22000 PSET (X,Y),1 22100 FOR N = 1 TO NM 22200 IF N > 400 THEN 22900 22300 F = W(N) 22400 IF F = 1 THEN V = V - 1 22500 IF F = 2 THEN H = H + 1 22600 IF F = 3 THEN V = V + 1 22700 IF F = 4 THEN H = H - 1 22800 LINE (X,Y)-(INT (H * HZ - HZ / 2) + 1, INT (V * VZ - VZ / 2) + 1),1 22850 X=INT(H * HZ - HZ/2) + 1:Y=INT(V * VZ -VZ/2) + 1 22900 NEXT N 22920 LOCATE 1,1:PRINT "PRESS ANY KEY TO CONTINUE" 22950 IK$=INKEY$ 23000 KEY(12) OFF:KEY(13) OFF: IF IK$ = "" THEN 22950 23100 CLEAR:GOTO 3 50000 REM