9 ON ERROR GOTO 9999 10 RANDOMIZE TIMER:CLS:GOSUB 5400:DIM RS(8),DT(28),X(10),Y(10):EX$="C3NH4NF5R1NE4NG5":GOSUB 4000:BL$="C2BH4ND8BR2ND8BR2ND8BR2ND8BR2ND8":IY=152:IX=58:FOR L=0 TO 10:X(L)=IX:Y(L)=IY:IX=IX+14:IY=IY-14:NEXT 20 PIC$="road.pac":GOSUB 10000 21 GOSUB 440 25 GOSUB 475:LINE (0,168)-(319,199),0,BF 30 RB$(1)="Get roadblock at ":RB$(2)="Put roadblock at ":C$="X,Y " 40 LOCATE 23,2,0:PRINT"Would you like instructions? (Y or N)"; 42 GOSUB 60:IF IN$><"Y" AND IN$<>"N" AND IN$<>CHR$(27) THEN 42 44 IF IN$="N" THEN 50 ELSE IF IN$="Y" THEN GOSUB 2000:GOTO 1000 48 GOSUB 810:GOSUB 5000:GOTO 40 50 CLS:GOTO 1000 60 GOSUB 5110 62 GOSUB 5100:IN$=INKEY$:IF IN$="" OR IN$=CHR$(9) THEN 62 ELSE GOSUB 5102 63 IF LEN(IN$)<>1 THEN 62 ELSE RETURN 100 FLAG=0:IF AX=0 OR AY=0 OR AX=10 OR AY=10 THEN 160 102 A=INT(RND(1)*4)+1:ON A GOTO 110,120,130,140 110 IF MAP(AX,AY-1)<>0 THEN FLAG=FLAG+1:GOTO 120 112 GOSUB 200:MAP(AX,AY)=0:AY=AY-1:GOSUB 200:MAP(AX,AY)=2:GOSUB 420:GOTO 170 120 IF MAP(AX,AY+1)<>0 THEN FLAG=FLAG+1:GOTO 130 122 GOSUB 200:MAP(AX,AY)=0:AY=AY+1:GOSUB 200:MAP(AX,AY)=2:GOSUB 420:GOTO 170 130 IF MAP(AX+1,AY)<>0 THEN FLAG=FLAG+1:GOTO 140 132 GOSUB 200:MAP(AX,AY)=0:AX=AX+1:GOSUB 200:MAP(AX,AY)=2:GOSUB 420:GOTO 170 140 IF MAP(AX-1,AY)<>0 THEN FLAG=FLAG+1:GOTO 150 142 GOSUB 200:MAP(AX,AY)=0:AX=AX-1:GOSUB 200:MAP(AX,AY)=2:GOSUB 420:GOTO 170 150 IF FLAG=4 THEN WI=1:GOTO 170 152 FLAG=0:GOTO 110 160 GOSUB 200:LO=1:RETURN 170 IF AX=0 OR AY=0 OR AX=10 OR AY=10 THEN 160 172 CT=CT+10:GOSUB 260:IF CT>490 THEN LO=LO+1 174 RETURN 190 REM IF MAP(AX,AY)=1 OR MAP(AX,AY)=3 THEN PUT(X(A)-4,Y(B)-4),RS,XOR 192 GOSUB 200:GOSUB 420:RETURN 200 PUT(X(AX)-6,Y(AY)-6),DT,XOR:RETURN 260 XTI=32:IF CT>400 THEN B$=" "+STR$(500-CT) ELSE B$=STR$(500-CT) 262 LOCATE 8,32:PRINT " ";:LOCATE 8,XTI:PRINT B$;:RETURN 400 IF SND=0 THEN GOSUB 470:RETURN ELSE PLAY"O3L"+STR$(T)+";N"+STR$(N+35):RETURN 405 IF SND=0 THEN GOSUB 485 :RETURN ELSE PLAY"L8O2ACACACACACACAC":RETURN 410 IF SND=0 THEN GOSUB 475:RETURN ELSE FOR L=20 TO 40:PLAY"L64N"+STR$(L):NEXT:RETURN 420 IF SND=0 THEN GOSUB 470:RETURN ELSE PLAY"O4L64CO0C":RETURN 430 GOSUB 410:IF SND=0 THEN GOSUB 485:RETURN ELSE FOR L=40 TO 20 STEP -1:PLAY"L64N"+STR$(L):NEXT:RETURN 440 IF SND=0 THEN GOSUB 475:RETURN ELSE PLAY"O2L4GL12CEGO3L8C":RETURN 450 IF SND=0 THEN GOSUB 470:RETURN ELSE PLAY"O2L16FL4C":RETURN 460 IF SND=0 THEN GOSUB 470:RETURN ELSE PLAY"O2L16CL4F":RETURN 470 FOR PAUSE=1 TO 100:NEXT:RETURN 475 FOR PAUSE=1 TO 1000:NEXT:RETURN 480 FOR PAUSE=1 TO 500:NEXT:RETURN 485 FOR PAUSE=1 TO 3000:NEXT:RETURN 500 SCREEN 0,1:COLOR 15,1:LOCATE 13,7:PRINT "Do you want to stop? (Y or N)"; 502 GOSUB 60:IF IN$="Y" THEN 1500 ELSE RETURN 600 D$="":LOCATE 23,2:PRINT RB$(RB);C$;:GOSUB 830:IF EFLAG=2 THEN RETURN ELSE IF ASC(IN$)=13 OR IN$="," OR IN$=CHR$(8) THEN 600 ELSE IF EFLAG=1 THEN GOSUB 680:GOTO 600 602 PRINT IN$;:IF IN$<>"-" AND IN$<>"+" THEN D$=IN$:N1$=IN$:N1=VAL(IN$):GOTO 620 ELSE D$=IN$ 604 N1$=IN$ 610 GOSUB 830:IF EFLAG=1 THEN GOSUB 680:GOTO 610 ELSE IF EFLAG=2 THEN RETURN ELSE IF IN$=CHR$(8) THEN GOSUB 684:GOTO 600 ELSE IF ASC(IN$)=13 THEN 610 612 IF IN$<"0" OR IN$>"5" THEN 610 614 D$=D$+IN$:N1$=N1$+IN$:PRINT IN$;:N1=VAL(D$) 620 GOSUB 830:IF EFLAG=2 THEN RETURN ELSE IF EFLAG=1 THEN GOSUB 680:GOTO 620 ELSE IF IN$=CHR$(8) THEN GOSUB 684:GOTO 600 ELSE IF ASC(IN$)=13 THEN 620 622 CP1=POS(1):IF IN$<>"," THEN LOCATE 25,2:PRINT "There must be a comma between X and Y.";:LOCATE 23,CP1:GOTO 620 624 PRINT IN$;:D$=D$+IN$:GOSUB 5020 630 GOSUB 830:IF EFLAG=2 THEN RETURN ELSE IF EFLAG=1 THEN GOSUB 680:GOTO 630 ELSE IF IN$=CHR$(8) THEN GOSUB 684:GOTO 600 ELSE IF ASC(IN$)=13 OR IN$="," THEN 630 632 PRINT IN$;:N2$=IN$:IF IN$<>"+" AND IN$<>"-" THEN D$=D$+IN$:GOTO 650 ELSE D$=D$+IN$ 640 GOSUB 830:IF EFLAG=2 THEN RETURN ELSE IF EFLAG=1 THEN GOSUB 680:GOTO 640 ELSE IF IN$=CHR$(8) THEN GOSUB 686:GOTO 630 ELSE IF ASC(IN$)=13 THEN 640 642 IF IN$<"0" OR IN$>"5" THEN 640 644 D$=D$+IN$:N2$=N2$+IN$:PRINT IN$;:N2=VAL(N2$) 650 GOSUB 830:IF EFLAG=2 THEN RETURN ELSE IF EFLAG=1 THEN GOSUB 680:GOTO 650 ELSE IF IN$=CHR$(8) THEN GOSUB 686:GOTO 630 ELSE IF IN$<>CHR$(13) THEN 650 652 N2=VAL(N2$) 670 IF LEFT$(D$,1)="-" OR LEFT$(D$,1)="+" THEN PX=32 ELSE PX=33 672 LOCATE 4,31:PRINT " ":LOCATE 4,PX:PRINT D$;:RETURN 680 GOSUB 5000:LOCATE 23,2:PRINT RB$(RB);C$;D$;:RETURN 684 LOCATE 23,31:PRINT " ";:LOCATE 23,2:PRINT RB$(RB);C$;:RETURN 686 LOCATE 23,31:PRINT " ";:LOCATE 23,2:PRINT RB$(RB);C$;N1$;",";:D$=N1$+",":RETURN 700 FLAG=0:A=N1+5:B=N2+5 704 IF MAP(A,B)=3 THEN GOSUB 5000:LOCATE 23,2:FLAG=1:PRINT "That roadblock can't be moved.";:GOSUB 450:GOTO 780 706 IF MAP(A,B)<>1 THEN GOSUB 5000:LOCATE 23,2:FLAG=1:PRINT "There is no roadblock there.";:GOSUB 450:GOTO 780 710 PUT(X(A)-4,Y(B)-4),RS,XOR:MAP(A,B)=0:GOSUB 460:GOTO 790 750 FLAG=0:A=N1+5:B=N2+5 754 IF MAP(A,B)<>0 THEN GOSUB 5000:LOCATE 23,2:FLAG=1:PRINT "The roadblock can't go there.";:GOSUB 450:GOTO 780 760 PUT(X(A)-4,Y(B)-4),RS,XOR:MAP(A,B)=1:GOSUB 460:GOTO 790 780 LOCATE 25,2:PRINT "PRESS TO TRY AGAIN."; 782 GOSUB 60:IF IN$<>CHR$(13) AND IN$<>CHR$(27) THEN 782 784 IF IN$=CHR$(27) THEN GOSUB 810:GOSUB 5000:IF EFLAG=2 THEN 1000 ELSE 780 790 GOSUB 5000:RETURN 800 FLAG=0:GOSUB 60:IF IN$=CHR$(27) THEN GOSUB 810:RETURN 802 IF IN$="?" THEN FLAG=1:GOSUB 2000:RETURN 804 RETURN 810 LOCATE 22,2:PRINT STRING$(39,32);:GOSUB 5000:LOCATE 23,6:PRINT"DO YOU WANT TO STOP? (Y OR N)"; 812 GOSUB 60:IF IN$="?" THEN EFLAG=2:SCREEN 1,0:GOSUB 2000:GOTO 810 814 IF IN$<>"Y" AND IN$<>"N" THEN 810 816 IF IN$="Y" THEN 1500 819 IF IN$="N" THEN RETURN ELSE 810 820 IN$=CHR$(13):GOSUB 5210:GOSUB 5010:RETURN 830 EFLAG=0:GOSUB 60:IF IN$=CHR$(13) OR IN$="," OR IN$="+" OR IN$="-" THEN 840 831 IF IN$="X" AND D$="" THEN CP=POS(1):LOCATE 25,2:PRINT "Type a NUMBER for X.";STRING$(18,32);:LOCATE 23,CP:GOTO 830 832 IF IN$="Y" AND D$<>"" THEN CP=POS(1):LOCATE 25,2:PRINT "Type a NUMBER for Y.";STRING$(18,32);:LOCATE 23,CP:GOTO 830 833 IF IN$="?" THEN GOSUB 2000:EFLAG=2:IN$=" ":RETURN 834 IF IN$=CHR$(27) THEN EFLAG=1:GOSUB 810:IN$=" ":RETURN 836 IF IN$=CHR$(8) THEN RETURN 838 IF IN$<"0" OR IN$>"5" THEN 830 839 GOSUB 5020 840 RETURN 868 LOCATE 23,19:PRINT " ";:LOCATE 23,19:PRINT D$;:RETURN 904 LINE(50,0)-(203,164),0,BF:FOR L=0 TO 10:LINE(X(L),Y(0))-(X(L)+1,Y(10)),1,BF:LINE(X(0),Y(L))-(X(10),Y(L)),1:NEXT 905 LINE(128,12)-(129,152),3,BF:LINE(58,82)-(198,82),3:RETURN 906 LOCATE 11,26:PRINT "+5";:LOCATE 20,16:PRINT "-5"; 908 LOCATE 2,16:PRINT "+5";:LOCATE 9,3:PRINT CHR$(24);:LOCATE 11,3:PRINT "Y";:LOCATE 13,3:PRINT CHR$(25);:LOCATE 21,15:PRINT CHR$(27);" X ";CHR$(26);:LOCATE 11,17:PRINT "0";:LOCATE 11,6:PRINT "-5"; 911 LINE(242,92)-(292,148),2,B 912 DRAW"BM266,110XEX$;BM266,136XBL$;":LOCATE 2,32:PRINT "X , Y";:LOCATE 6,32:PRINT "TIMER";:LOCATE 13,32:PRINT "MOVES";:LOCATE 16,32:PRINT "STAYS";:LOCATE 8,33:PRINT "500"; 930 N=1:T=16:FOR I=1 TO 5 932 A=INT(RND(1)*11):B=INT(RND(1)*11):IF MAP(A,B)=3 THEN 932 934 MAP(A,B)=3:DRAW"BM"+STR$(X(A))+","+STR$(Y(B))+"XBL$;":N=N+1:GOSUB 400:NEXT 940 A=INT(RND(1)*9)+1:B=INT(RND(1)*9)+1:IF MAP(A,B)=3 THEN 940 942 PUT(X(A)-6,Y(B)-6),DT,XOR:MAP(A,B)=2:AX=A:AY=B 950 T=64:N=N+1:FOR I=1 TO 5 952 A=INT(RND(1)*11):B=INT(RND(1)*11):IF MAP(A,B)<>0 THEN 952 954 PUT(X(A)-4,Y(B)-4),RS,XOR:MAP(A,B)=1:N=N-1:GOSUB 400:NEXT 960 RETURN 970 CLS:COLOR 9,1:LINE(158,6)-(178,58),3:LINE-(242,58),3:LINE-(190,94),3:LINE-(210,150),3:LINE-(158,114),3:LINE-(106,150),3:LINE-(126,94),3:LINE-(76,58),3:LINE-(140,58),3:LINE-(158,6),3:PAINT(158,9),2,3 974 CIRCLE(158,6),5,1:PAINT(158,6),1,1:CIRCLE(242,58),5,1:PAINT(242,59),1,1:CIRCLE(76,58),5,1:PAINT(76,58),1,1:CIRCLE(106,150),5,1:PAINT(106,150),1,1:CIRCLE(210,150),5,1:PAINT(210,150),1,1 976 LOCATE 3,5:PRINT "BUMBLETOWN";:LOCATE 4,7:PRINT "POLICE"; 980 RETURN 1000 SCREEN 1,0:COLOR 8,1:CLS:FOR I=0 TO 10:FOR L=0 TO 10:MAP(I,L)=0:NEXT L,I:LO=0:WI=0:CT=0 1004 SCREEN 1,0:GOSUB 904:GOSUB 906:GOSUB 5000 1010 GOSUB 5000:LOCATE 23,2:PRINT "Press to begin."; 1011 LOCATE 25,2:PRINT "Press to stop the timer."; 1012 GOSUB 60:IF IN$<>CHR$(13) AND IN$<>CHR$(27) AND IN$<>"?" THEN 1012 1014 IF IN$="?" THEN GOSUB 2000:SCREEN 1,0:GOTO 1000 1016 IF IN$=CHR$(27) THEN GOSUB 810:IF EFLAG=2 THEN EFLAG=0:SCREEN 1,0:GOTO 1000 ELSE GOTO 1010 1020 ST=0:GOSUB 5000:LOCATE 23,2:PRINT "PRESS THE TO STOP THE TIMER."; 1100 GOSUB 100 1101 IF LO=1 THEN 1200 1102 IF WI=1 THEN 1300 1104 LOCATE 23,2:PRINT "PRESS THE TO STOP THE TIMER."; 1106 I$=INKEY$:IF I$<>" " AND I$<>CHR$(27) AND I$<>"?" THEN GOSUB 470:GOTO 1100 1108 IF I$=CHR$(27) THEN GOSUB 810:IF EFLAG=2 THEN SCREEN 1,1:GOTO 1000 ELSE GOTO 1020 1109 IF I$="?" THEN GOSUB 2000:SCREEN 1,0:GOTO 1000 1110 GOSUB 5000 1111 ST=0:RB=1 1112 GOSUB 600:IF EFLAG=2 THEN 1000 ELSE GOSUB 700:IF FLAG=1 THEN 1112 1120 RB=2 1122 GOSUB 600:IF EFLAG=2 THEN 1000 ELSE GOSUB 750:IF FLAG=1 THEN 1122 1124 CT=CT+10:IF CT>490 THEN CT=500:GOSUB 260:GOTO 1200 1126 GOSUB 260 1130 GOSUB 475:GOSUB 5000:GOTO 1100 1200 GOSUB 5000:LOCATE 23,16:PRINT "TOO LATE!";:GOSUB 430:IF AX>9 OR AX<1 OR AY>9 OR AY<1 THEN 1290 1206 GOSUB 200:IF AY<3 OR AY>7 THEN 1230 1208 IF AX<3 THEN 1220 1210 AX=AX+1:GOSUB 190 1212 IF AX=10 THEN GOSUB 200:GOTO 1290 1214 GOSUB 1260:GOTO 1210 1216 IF IN$="?" THEN GOSUB 2000:SCREEN 1,0:GOTO 1000 1220 AX=AX-1:GOSUB 190:IF AX=0 THEN GOSUB 200:GOTO 1290 1222 GOSUB 1260:GOTO 1220 1230 IF AY>7 THEN 1250 1240 AY=AY-1:GOSUB 190 1242 IF AY=0 THEN GOSUB 200:GOTO 1290 1244 GOSUB 1260:GOTO 1240 1250 AY=AY+1:GOSUB 190 1252 IF AY=10 THEN GOSUB 200:GOTO 1290 1254 GOSUB 1260:GOTO 1250 1260 GOSUB 480:GOSUB 200:RETURN 1290 GOTO 1310 1300 GOSUB 5000:LOCATE 23,10:PRINT "You caught the crook!";:GOSUB 405:GOSUB 475:GOSUB 970:GOSUB 440 1302 PX=17:B$="CAPTAIN":IF 500-CT<100 THEN B$="PATROLMAN":PX=16 ELSE IF 500-CT<255 THEN B$="SERGEANT":PX=17 ELSE IF 500-CT<350 THEN B$="LIEUTENANT":PX=16 1306 LOCATE 10,PX:PRINT B$; 1310 LOCATE 23,11:PRINT "Play again? (Y or N)"; 1312 GOSUB 60:IF IN$<>"Y" AND IN$<>"N" AND IN$<>"?" THEN 1312 1314 IF IN$="Y" THEN 1000 1316 IF IN$="?" THEN GOSUB 2000:CLS:GOTO 1000 1500 COLOR 8,1:RUN"menu 2000 SCREEN 0,1,0,0:CLS:COLOR 13,0:LOCATE 1,1,0:PRINT STRING$(40,176);:FOR L=2 TO 22:LOCATE L,1:PRINT CHR$(176);:LOCATE L,40:PRINT CHR$(176);:NEXT:LOCATE 23,1:PRINT STRING$(40,176); 2002 INS$(1)="Help Police Chief Bumble":INS$(2)="catch a bank robber!":INS$(3)="Use the computerized map to":INS$(4)="catch the robber (moving car)":INS$(5)="by moving roadblocks (X's)." 2004 INS$(6)="Trap the robber at a dead-end":INS$(7)="street (square) before the":INS$(8)="robber goes off the map." 2010 COLOR 15,0:LL=1:GOSUB 2100:LOCATE 4,LE:PRINT INS$(1);:LL=LL+1:GOSUB 2100:LOCATE 5,LE:PRINT INS$(LL);:LL=LL+1:GOSUB 2100:LOCATE 8,LE:PRINT INS$(LL):LL=LL+1 2012 GOSUB 2100:LOCATE 10,LE:PRINT INS$(LL);:LL=LL+1:GOSUB 2100:LOCATE 12,LE:PRINT INS$(LL);:LL=LL+1:GOSUB 2100:LOCATE 15,LE:PRINT INS$(LL); 2014 LL=LL+1:GOSUB 2100:LOCATE 17,LE:PRINT INS$(LL);:LL=LL+1:GOSUB 2100:LOCATE 19,LE:PRINT INS$(LL);:GOSUB 485 2020 INS$(9)="PRESS TO PLAY":LL=LL+1:GOSUB 2100:LOCATE 22,LE:PRINT INS$(LL);: 2030 GOSUB 60:IF IN$<>CHR$(13) AND IN$<>CHR$(27) THEN 2030 2032 IF IN$=CHR$(13) THEN RETURN 2040 LOCATE 22,2:PRINT STRING$(38,32);:LOCATE 22,6:PRINT "DO YOU WANT TO STOP? (Y OR N)"; 2042 GOSUB 60:IF IN$<>"N" AND IN$<>"Y" THEN 2042 ELSE IF IN$="Y" THEN 1500 2044 LOCATE 22,2:PRINT STRING$(38,32);:LL=LL-1:GOTO 2020 2100 LE=40-LEN(INS$(LL)):LE=INT(LE/2)+1:RETURN 4000 SCREEN 1,0:CLS:DRAW"BM4,4XEX$;":GET(0,0)-(9,9),RS:LINE(0,0)-(9,9),0,BF:DRAW"S7BM4,1C2nr3g1nr3d1nr3g1l1nr7g1nr9D1NR9D1NR9R1D1NR2D1R2BR3R2U1L2":GET(0,0)-(19,19),DT:LINE(0,0)-(19,19),0,BF:RETURN 5000 LOCATE 23,1:PRINT STRING$(79,32);:LOCATE 25,1:PRINT STRING$(39,32);:RETURN 5005 FOR L=22 TO 25:LOCATE L,1:PRINT STRING$(39,32);:NEXT:RETURN 5010 LOCATE 24,1:PRINT STRING$(39,32);:LOCATE 25,1:PRINT STRING$(39,32);:RETURN 5020 LINE(0,192)-(319,199),0,BF:RETURN 5100 DEF SEG=0:POKE 1047,(PEEK(1047) OR 96) AND (223-(32*(PC<>&HFD))):DEF SEG:RETURN 5102 DEF SEG=0:POKE 1047,96+32*(PC=&HFD):DEF SEG:RETURN 5110 RETURN:DEF SEG=0:POKE 1050,PEEK(1052):RETURN 5400 DEF SEG=0:SND=PEEK(1264):DEF SEG:DEF SEG=&HF000:IF PEEK(&HFFFE)=&HFD THEN PC=&HFD 5401 DEF SEG:RETURN 9999 RUN 10000 DUMMY$=STRING$(47,32):X=VARPTR(DUMMY$):UNPAC=256*PEEK(X+2)+PEEK(X+1):BLOAD"unpacker.bin",UNPAC 10010 DEF SEG=&HF000:DAK=INP(&H3DA):DAK=PEEK(&HFFFE):DEF SEG=&H40:IF DAK=&HFD THEN OUT &H3DA,&H10 ELSE OUT &H3D8,(PEEK(&H65) AND &HF7) 10011 OUT &H3C0,0:SCREEN 1,0:CLS:DEF SEG=&HB800:BLOAD PIC$,0:DEF SEG:CALL UNPAC 10012 DAL=INP(&H3DA):DEF SEG=&H40:IF DAK=&HFD THEN OUT &H3DA,0 ELSE OUT &H3D8,PEEK(&H65) 10014 OUT &H3C0,&H20:RETURN