0 CLEAR100:DIMLU(1,2),X(1),Y(1),AB(90,3),X,Y,X1,Y1,BY,VL,MA:FORX=0TO1:FORY=0TO2:READLU(X,Y):NEXTY,X:GOSUB18:DATA32,8,2,16,4,1
1 CLS:DIMMZ(14,11),B8,M8,S8,VI:VI=16384:VND=16895:VCTRL=49151:CH=16:GOTO200
3 POKEVCTRL,CHOR(PEEK(VCTRL)AND7):RETURN
4 POKEVCTRL,0:RETURN
5 X1=INT(X/2):Y1=INT(Y/3):BY=VI+(X1+Y1*32):VL=LU(INT(X-X1*2),INT(Y-Y1*3))
6 MA=VLORPEEK(BY):POKEBY,MA:RETURN
8 M8=(Y(0)-Y(1))/(X(0)-X(1)):B8=Y(0)-M8*X(0):S8=(X(1)-X(0))/ABS(X(0)-X(1)):FORX=X(0)TOX(1)STEPS8:Y=INT(M8*X+B8):GOSUB5:NEXTX
9 RETURN
11 DATA128,128,128,128,149,128,132,128,152,128,128,128,128,128,134,128,128,128,132,128
12 DATA154,138,164,160,149,128,148,128,179,170,172,136,177,170,140,168,171,170,128,168,187,162,140,168,187,162,172,168
13 DATA176,170,128,168,187,170,172,168,187,170,128,168,177,168,132,128,155,138,168,168,187,136,172,160,186,160,172,136,186,138
14 DATA172,160,187,160,172,136,187,160,168,128,186,160,172,160,171,170,168,168,149,128,148,128,128,170,172,168,171,168,168,168
15 DATA170,128,172,136,174,170,168,168,186,138,168,168,154,138,164,160,187,170,168,128,154,138,164,168,187,136,168,168
16 DATA187,162,140,168,181,160,148,128,170,170,172,168,170,170,148,128,170,170,184,168,169,168,168,168,171,170,148,128
17 READAB(X,0),AB(X,1),AB(X,2),AB(X,3):RETURN:DATA177,168,172,136
18 X=32:GOSUB17:X=33:GOSUB17:X=39:GOSUB17:X=44:GOSUB17:X=46:GOSUB17
19 FORX=48TO57:GOSUB17:NEXTX:X=63:GOSUB17:FORX=65TO90:GOSUB17:NEXTX:RETURN
20 W1=35:W2=451:W3=32:W4=170:W5=138:W6=160:GOSUB110:X(0)=0:Y(0)=0:X(1)=6:Y(1)=4:GOSUB8:X(0)=6:Y(0)=43:X(1)=0:Y(1)=47:GOSUB8
21 RETURN
22 W1=32:W2=35:W3=1:W4=140:W5=140:W6=138:GOSUB110:W1=35:W2=451:W3=32:W4=170:W5=138:W6=168:GOSUB110
23 W1=448:W2=451:W3=1:W4=140:W5=140:W6=168:GOSUB110:RETURN
24 W1=60:W2=476:W3=32:W4=149:W5=133:W6=148:GOSUB110
25 X(0)=63:Y(0)=0:X(1)=57:Y(1)=4:GOSUB8:X(0)=57:Y(0)=43:X(1)=63:Y(1)=47:GOSUB8:RETURN
26 W1=60:W2=476:W3=32:W4=149:W5=133:W6=148:GOSUB110
27 W1=60:W2=63:W3=1:W4=140:W5=133:W6=140:GOSUB110:W1=476:W2=479:W3=1:W4=140:W5=148:W6=140:GOSUB110:RETURN
28 W1=35:W2=60:W3=1:W4=140:W5=142:W6=141:GOSUB110
29 W1=451:W2=476:W3=1:W4=140:W5=172:W6=156:GOSUB110:RETURN
30 W1=138:W2=362:W3=32:W4=170:W5=170:W6=170:GOSUB110
31 X(0)=6:Y(0)=4:X(1)=20:Y(1)=12:GOSUB8:X(0)=20:Y(0)=35:X(1)=6:Y(1)=43:GOSUB8:RETURN
32 W1=131:W2=138:W3=1:W4=176:W5=186:W6=170:GOSUB110:W1=138:W2=362:W3=32:W4=170:W5=170:W6=170:GOSUB110
33 W1=355:W2=362:W3=1:W4=131:W5=171:W6=170:GOSUB110:RETURN
34 W1=149:W2=373:W3=32:W4=149:W5=149:W6=149:GOSUB110
35 X(0)=57:Y(0)=4:X(1)=43:Y(1)=12:GOSUB8:X(0)=43:Y(0)=35:X(1)=57:Y(1)=43:GOSUB8:RETURN
36 W1=149:W2=156:W3=1:W4=176:W5=181:W6=181:GOSUB110:W1=149:W2=373:W3=32:W4=149:W5=149:W6=149:GOSUB110
37 W1=373:W2=380:W3=1:W4=131:W5=149:W6=151:GOSUB110:RETURN
38 W1=138:W2=149:W3=1:W4=176:W5=186:W6=181:GOSUB110
39 W1=362:W2=373:W3=1:W4=131:W5=171:W6=151:GOSUB110:RETURN
40 W1=206:W2=302:W3=32:W4=149:W5=149:W6=149:GOSUB110
41 X(0)=20:Y(0)=12:X(1)=29:Y(1)=18:GOSUB8:X(0)=29:Y(0)=29:X(1)=20:Y(1)=35:GOSUB8:RETURN
42 W1=202:W2=206:W3=1:W4=176:W5=186:W6=181:GOSUB110
43 W1=206:W2=302:W3=32:W4=149:W5=181:W6=151:GOSUB110:W1=298:W2=302:W3=1:W4=131:W5=171:W6=151:GOSUB110:RETURN
44 W1=209:W2=305:W3=32:W4=170:W5=170:W6=170:GOSUB110
45 X(0)=43:Y(0)=12:X(1)=34:Y(1)=18:GOSUB8:X(0)=34:Y(0)=29:X(1)=43:Y(1)=35:GOSUB8:RETURN
46 W1=209:W2=213:W3=1:W4=176:W5=186:W6=181:GOSUB110:W1=209:W2=305:W3=32:W4=170:W5=186:W6=171:GOSUB110
47 W1=305:W2=309:W3=1:W4=131:W5=171:W6=151:GOSUB110:RETURN
48 W1=206:W2=209:W3=1:W4=176:W5=181:W6=186:GOSUB110
49 W1=302:W2=305:W3=1:W4=131:W5=151:W6=171:GOSUB110:RETURN
50 W1=207:W2=303:W3=32:W4=149:W5=137:W6=152:GOSUB110:RETURN
52 W1=207:W2=303:W3=32:W4=149:W5=131:W6=176:GOSUB110:RETURN
54 W1=208:W2=304:W3=32:W4=170:W5=134:W6=164:GOSUB110:RETURN
56 W1=208:W2=304:W3=32:W4=170:W5=131:W6=176:GOSUB110:RETURN
57 X(0)=32:Y(0)=27:X(1)=32:Y(1)=20: GOSUB8:RETURN
58 RETURN
60 ONSQGOTO62,64,66
62 PRINT@431,CHR$(213);CHR$(234);:RETURN
64 PRINT@367,CHR$(212);CHR$(232);:RETURN
66 PRINT@335,CHR$(208);CHR$(224);:RETURN
70 FL=0:FOR X=-1 TO 1 STEP 2
72 IF MZ(H+X,V)<=0 THEN MZ(H+X,V)=-1:FL=1
74 IF MZ(H,V+X)<=0 THEN MZ(H,V+X)=-1:FL=1
76 NEXT X:RETURN
80 DR=RND(4):ONDRGOTO82,84,86,88
82 IF MZ(H-1,V)=-1 THEN NH=H-1:NV=V:MZ(NH,NV)=4:MZ(H,V)=MZ(H,V)+1:RETURN
83 GOTO80
84 IF MZ(H,V-1)=-1 THEN NH=H:NV=V-1:MZ(NH,NV)=8:MZ(H,V)=MZ(H,V)+2:RETURN
85 GOTO80
86 IF MZ(H+1,V)=-1 THEN NH=H+1:NV=V:MZ(NH,NV)=1:MZ(H,V)=MZ(H,V)+4:RETURN
87 GOTO80
88 IF MZ(H,V+1)=-1 THEN NH=H:NV=V+1:MZ(NH,NV)=2:MZ(H,V)=MZ(H,V)+8:RETURN
89 GOTO80
90 FL=0:FOR X=12 TO 1 STEP-1:FOR Y=1 TO 9
92 IF MZ(X,Y)=>0 THEN 96
93 FL=FL+1:FOR I=-1 TO 1 STEP 2:IF MZ(X+I,Y)>0 AND MZ(X+I,Y)<100 THEN NH=X+I:NV=Y
94 IF MZ(X,Y+I)>0 AND MZ(X,Y+I)<100 THEN NH=X:NV=Y+I
95 NEXT I
96 NEXT Y,X:RETURN
100 ON SQ GOSUB 20,30,40,50:RETURN
102 ON SQ GOSUB 22,32,42,52:RETURN
104 ON SQ GOSUB 24,34,44,54:RETURN
106 ON SQ GOSUB 26,36,46,56:RETURN
108 ON SQ GOSUB 28,38,48,58:FL=1:RETURN
110 FORT=W1TOW2STEPW3:PRINT@T,CHR$(W4);:NEXTT:PRINT@W1,CHR$(W5);:PRINT@W2,CHR$(W6);:RETURN
120 PRINT@W1,CHR$(AB(48+Z,0));CHR$(AB(48+Z,1));
130 PRINT@W1+32,CHR$(AB(48+Z,2));CHR$(AB(48+Z,3));
140 RETURN
200 FOR H=0 TO 13:MZ(H,0)=100:MZ(H,10)=100:NEXT H:FOR V=0 TO 10:MZ(0,V)=100:MZ(13,V)=100:NEXT V
210 CLS:PRINT@138," RAT MAZE ";
220 PRINT@264,"COPYRIGHT  1984"
230 PRINT@355,"do you need instructions?"
235 A$= INKEY$:XS= RND( RND(8)):IFA$=""THEN235
236 IFA$="Y"THEN1500
240 CLS:PRINT"PLEASE WAIT..."
300 FOR H=1 TO 12:FOR V=1 TO 9:MZ(H,V)=0:NEXT V,H:H= RND(12):V= RND(9):MZ(H,V)=16: GOSUB 70: GOSUB 80:MZ(H,V)=MZ(H,V)-16
310 H=NH:V=NV: GOSUB 70:IF FL=0 THEN 330
320 GOSUB80:GOTO310
330 GOSUB90:IFFL=0THEN410
340 GOTO310
410 SV= RND(9):SH=1:CV= RND(9):CH=12
420 RH=SH:RV=SV:DR=RND(4)
500 CLS0:GOSUB3:SQ=1:Z=MZ(RH,RV):FL=0:IFCH=RHANDCV=RVTHEN1300
510 ON Z GOTO 520,530,540,550,560,570,580,590,600,610,620,630,640,650,770
520 ONDRGOTO720,710,700,730
530 ONDRGOTO730,720,710,700
540 ONDRGOTO750,740,710,730
550 ONDRGOTO700,730,720,710
560 ONDRGOTO720,760,720,760
570 ONDRGOTO730,750,740,710
580 ONDRGOTO750,770,740,760
590 ONDRGOTO710,700,730,720
600 ONDRGOTO740,710,730,750
610 ONDRGOTO760,720,760,720
620 ONDRGOTO770,740,760,750
630 ONDRGOTO710,730,750,740
640 ONDRGOTO740,760,750,770
650 ONDRGOTO760,750,770,740
700 GOSUB100:GOSUB104:GOSUB108:GOTO800
710 GOSUB102:GOSUB104:GOSUB108:GOTO800
720 GOSUB100:GOSUB104:GOTO800
730 GOSUB100:GOSUB106:GOSUB108:GOTO800
740 GOSUB102:GOSUB104:GOTO800
750 GOSUB100:GOSUB106:GOTO800
760 GOSUB102:GOSUB106:GOSUB108:GOTO800
770 GOSUB102:GOSUB106:GOTO800
800 IF FL=1 OR SQ=4 THEN 900
810 ONDRGOTO820,830,840,850
820 Z=MZ(RH-SQ,RV):IF CH=RH-SQ AND CV=RV THEN GOSUB 60
825 GOTO860
830 Z=MZ(RH,RV-SQ):IF CH=RH AND CV=RV-SQ THEN GOSUB 60
835 GOTO860
840 Z=MZ(RH+SQ,RV):IF CH=RH+SQ AND CV=RV THEN GOSUB 60
845 GOTO860
850 Z=MZ(RH,RV+SQ):IF CH=RH AND CV=RV+SQ THEN GOSUB 60
860 SQ=SQ+1:GOTO510
900 IFABS(CH-RH)>ABS(CV-RV)THENZ=ABS(CH-RH):GOTO910
905 Z= ABS(CV-RV)
910 IFZ=10THEN918
911 IFZ=11THEN920
915 W1=16:GOSUB120:GOTO930
918 Z=1:W1=16:GOSUB120:Z=0:W1=18:GOSUB120:GOTO930
920 Z=1:W1=16:GOSUB120:W1=18:GOSUB120
930 A$=INKEY$:IFA$=""THEN930
950 IFA$="A"THEN1000
960 IFA$="S"THEN1010
970 IFA$="W"THEN1020
980 IFA$="Q"THEN1200
990 GOTO930
1000 DR=DR-1:IF DR<=0 THEN DR=4
1005 GOTO500
1010 DR=DR+1:IF DR>=5 THEN DR=1
1015 GOTO500
1020 Z=MZ(RH,RV):ONZGOTO1030,1040,1050,1060,1070,1080,1090,1100,1110,1120,1130,1140,1150,1160,1170
1030 IFDR=1THEN1170
1031 GOTO930
1040 IFDR=2THEN1170
1041 GOTO930
1050 IFDR<=2THEN1170
1051 GOTO930
1060 IFDR=3THEN1170
1061 GOTO930
1070 ONDRGOTO1170,930,1170,930
1080 ONDRGOTO930,1170,1170,930
1090 IFDR=4THEN930
1091 GOTO1170
1100 IFDR=4THEN1170
1101 GOTO930
1110 ONDRGOTO1170,930,930,1170
1120 ONDRGOTO930,1170,930,1170
1130 IFDR=3THEN930
1131 GOTO1170
1140 IFDR>=3THEN1170
1141 GOTO930
1150 IFDR=2THEN930
1151 GOTO1170
1160 IFDR=1THEN930
1170 IFDR=1THENRH=RH-1
1172 IF DR=2 THEN RV=RV-1
1174 IF DR=3 THEN RH=RH+1
1176 IF DR=4 THEN RV=RV+1
1180 GOTO500
1200 GOSUB4:CLS:PRINT@130,"PRESS ANY KEY WHEN FINISHED     LOOKING AT MAZE.":FORZX=1TO800:NEXTZX:CLS0:GOSUB3
1205 X=0:FORY=0TO45:GOSUB5:NEXTY:Y=0:FORX=0TO60:GOSUB5:NEXTX
1208 FORH=1TO12:FORV=1TO9:Z=MZ(H,V)
1210 ONZGOTO1220,1220,1220,1230,1230,1230,1230,1240,1240,1240,1240,1250,1250,1250,1250
1220 Y=5*V:FORX=5*H-5TO5*H:GOSUB5:NEXTX:X=5*H:FORY=5*V-5TO5*V:GOSUB5:NEXTY:GOTO1250
1230 Y=5*V:FORX=5*H-5TO5*H:GOSUB5:NEXTX:GOTO1250
1240 X=5*H:FORY=5*V-5TO5*V:GOSUB5:NEXTY
1250 NEXTV,H
1255 X=5*CH-2.5:Y=5*CV-2.5:GOSUB5
1260 X(0)=5*SH:Y(0)=5*SV-5:X(1)=5*SH-5:Y(1)=5*SV:GOSUB8:X(0)=5*SH:Y(0)=5*SV:X(1)=5*SH-5:Y(1)=5*SV-5:GOSUB8
1290 IFINKEY$=""THEN1290
1295 GOTO1400
1300 FOR Z=0 TO 10:CLS( RND(9)-1):PRINT@197,"YOU GOT THE CHEESE!!";:SOUNDRND(255),2:NEXT Z:CLS:PRINT@197,"YOU GOT THE CHEESE!!";
1400 GOSUB4:CLS:PRINT@448,"  sAME MAZE, nEW MAZE, OR qUIT            ENTER CHOICE";
1410 A$=INKEY$:IFA$=""THEN 1410
1420 IFA$="S"THENCLS0:GOSUB3:GOTO420
1430 IFA$="N"THENRUN
1440 IFA$="Q"THENEND
1450 GOTO1400
1500 CLS:PRINT"   YOU HAVE A RAT'S EYE VIEW OF"
1502 PRINT"THE MAZE. THE NUMBER OF SQUARES"
1504 PRINT"TO THE CHEESE AS THE FLEA FLIES"
1506 PRINT"IS DISPLAYED AT THE TOP OF THE"
1508 PRINT"SCREEN."
1510 PRINT"   YOUR OPTIONS ARE:"
1512 PRINT"<RIGHT ARROW KEY>=TURN RIGHT    ON SAME SQUARE.
1514 PRINT"<LEFT ARROW KEY>=TURN LEFT ON   SAME SQUARE."
1520 PRINT"<UP ARROW KEY>=MOVE ONE SQUARE  FORWARD."
1521 PRINT"<Q>=SEE MAZE AND OPTIONS MENU."
1522 PRINT"'X' IS YOUR STARTING POSITION"
1523 PRINT"AND THE '.' IS THE CHEESE."
1524 PRINT"   PRESS <enter> TO BEGIN";
1530 INPUTZX$:GOTO240
1540 END
