0 GOSUB8000:DIMP(31,15),K(255),A(2),B(2),D(2),X(7),Y(7),O(2),U,V,M,N,P,I(2,14),T,Z,C(7,2):GOTO1000
1 RETURN
2 D(P)=D(P)+R(D(P)):POKEP(A(P),B(P)),C(D(P),P):RETURN
3 D(P)=V(D(P)):RETURN
4 D(P)=D(P)+L(D(P)):POKEP(A(P),B(P)),C(D(P),P):RETURN
5 ONK(PEEK(P(A(P)+X(D(P)),B(P))))GOSUB3:ONK(PEEK(P(A(P),B(P)+Y(D(P)))))GOTO9:ONK(PEEK(P(A(P)+X(D(P)),B(P)+Y(D(P)))))GOTO7:GOTO1
6 D(P)=D(P)+R(D(P)):D(P)=D(P)+R(D(P)):POKEP(A(P),B(P)),C(D(P),P):RETURN
7 D(P)=D(P)+L(D(P)):D(P)=D(P)+L(D(P)):POKEP(A(P),B(P)),C(D(P),P)
8 D(P)=D(P)+L(D(P)):D(P)=D(P)+L(D(P)):POKEP(A(P),B(P)),C(D(P),P):RETURN
9 D(P)=H(D(P)):RETURN
10 D(P)=RND(8)-1:POKEP(A(P),B(P)),C(D(P),P):RETURN
12 O(P)=M(P):RETURN
13 S=PEEK(P(A(P)+X(D(P)),B(P)+Y(D(P))))
14 ONK(S)GOTO1,36,36,1,1:POKEP(A(P),B(P)),O(P):A(P)=A(P)+X(D(P)):B(P)=B(P)+Y(D(P)):O(P)=S:POKEP(A(P),B(P)),C(D(P),P):RETURN
15 D(P)=S:S=7:NEXT:RETURN
16 U=A(P)+X(D(P)):V=B(P)+Y(D(P)):M=U:N=V
17 S=PEEK(P(U,V)):ONK(S)GOTO1,18,18,30,32:POKEP(U,V),103:M=U:N=V:U=U+X(D(P)):V=V+Y(D(P)):POKEP(M,N),S:GOTO17
18 POKEP(U,V),103:M=U:N=V:U=U+X(D(P)):V=V+Y(D(P)):POKEP(M,N),S:GOTO17
19 ONI(P,14)GOTO28:ON1-(K(PEEK(P(A(P)+X(D(P)),B(P)+Y(D(P)))))=I(P,11))GOTO1:ONI(P,12)GOTO5,2,4,6,8,10,12,13,16,7,28
20 FORNR=1TO10:GOSUB100:PRINT@480,"ROUND";NR;:FORZ=1TOTL:FORT=1TO10:ONRND(2)GOTO21,22
21 P=1:ONI(P,T)GOSUB5,2,4,6,8,10,12,13,16,19:P=2:ONI(P,T)GOSUB5,2,4,6,8,10,12,13,16,19:NEXT:NEXT:GOTO23
22 P=2:ONI(P,T)GOSUB5,2,4,6,8,10,12,13,16,19:P=1:ONI(P,T)GOSUB5,2,4,6,8,10,12,13,16,19:NEXT:NEXT
23 GOSUB46:PRINT@500,"(C)ONTINUE?";
24 I$=INKEY$:IFI$=""THEN24
25 IFI$="C"ORI$="Y"THENNEXT:GOTO50
26 IFI$="N"THENNR=10:NEXT:GOTO50
27 GOTO24
28 U=A(P):V=B(P):FORS=0TO7:M=PEEK(P(U+X(S),V+Y(S))):POKEP(U+X(S),V+Y(S)),M-64
29 POKEP(U+X(S),V+Y(S)),M:ON1-(K(M)<>I(P,11))GOTO15:NEXT:RETURN
30 U=A(1):V=B(1):GOSUB40:RV=RV+1:AR=(TL-Z):RS=RS+AR:PRINT@480,"BLUE DESTROYED!";AR;"  ";:B=1:GOTO99
32 U=A(2):V=B(2):GOSUB40:BV=BV+1:AB=(TL-Z):BS=BS+AB:PRINT@480,"RED DESTROYED! ";AB;"  ";:R=1:GOTO99
33 GOSUB10:GOTO13
36 POKEP(A(P),B(P)),O(P):A(P)=A(P)+X(D(P)):B(P)=B(P)+Y(D(P)):POKEP(A(P),B(P)),C(D(P),P):O(P)=S:ON1-(P=1ANDS=107)GOTO37,30
37 ON1-(P=2ANDS=106)GOTO1,32
40 POKEP(U,V),103:SOUNDRND(100),1:POKEP(U,V),107:SOUNDRND(100),1:POKEP(U,V),88:SOUNDRND(100),1
45 POKEP(U,V),106:SOUNDRND(100),1:POKEP(U,V),64:SOUNDRND(100),1:POKEP(U,V),32:SOUND1,1:POKEP(U,V),88:RETURN
46 ON1-(R=1)GOTO47:POKEP(A(2),B(2)),88:IFPL=1ANDTT<50THENTT=TT+1:FORT=1TO14:AI(TT,T)=I(1,T):NEXT
47 ON1-(B=1)GOTO48:POKEP(A(1),B(1)),88:IFPL=1ANDTT<50THENTT=TT+1:FORT=1TO14:AI(TT,T)=I(2,T):NEXT
48 ON1-(R=1ANDB=1)GOTO49:PRINT@480,"BOTH DESTROYED!";:BS=BS-AB:RS=RS-AR
49 RETURN
50 CLS0:POKE49151,64:POKE17026,255:CLS:PRINTTAB(11);"BATTLE BOTS":PRINT
52 PRINT"RED SCORE: ";RS;TAB(18);"VICTORIES:";RV:PRINT"BLUE SCORE:";BS;TAB(18);"VICTORIES:";BV
54 PRINT:TR=RS*RV:TB=BS*BV
56 PRINT"TOTAL RED SCORE: ";TR:PRINT"TOTAL BLUE SCORE:";TB
61 IFTR>TBANDTR>HSTHENPRINT@256,"HIGH:";TR;TAB(16);:INPUTHN$:HN$=LEFT$(HN$,8):HS=TR:GOTO65
62 IFTB>TRANDTB>HSANDPL=2THENPRINT@256,"HIGH:";TB;TAB(16);:INPUTHN$:HN$=LEFT$(HN$,8):HS=TB:GOTO65
63 IFTB>RSANDTB>HSANDPL=1THENHN$="MC-10":HS=TB
65 PRINT@256,"HIGH:";HS;TAB(18);HN$;"                ";
70 PRINT@480,"ANOTHER BATTLE (Y/N)?";:I$=INKEY$:IFI$=""THEN70
80 IFI$="Y"THENCLS0:POKE49151,16:POKE17026,0:GOTO2000
85 IFI$="N"THENPOKE49151,16:POKE17026,0:END
90 GOTO70
98 POKES,32:NEXT:RETURN
99 Z=TL:T=10:RETURN
100 ONPLGOTO103:ONRND(2)GOTO101,102
101 FORP=1TO2:GOTO104
102 FORP=2TO1STEP-1:GOTO104
103 Z=RND(TT):FORT=1TO14:I(1,T)=AI(Z,T):NEXT:I(1,0)=1:D(1)=I(1,13):FORP=2TO2:GOTO104
104 CLS:PRINTTAB(12);CL$(P):PRINT:IFI(P,0)=1THEN160
105 I(P,14)=0:PRINT"1. RIGHT 45'     2. LEFT 45'    3. RIGHT 90'     4. LEFT 90'    5. RANDOM DIR    6. DROP A MINE"
106 PRINT"7. MOVE FORWARD  8. SHOOT       9. SENSE         0. DEFLECT                       "CHR$(91)"##########"CHR$(93)
107 INPUT"ENTER 10 COMMANDS";A$
110 S=0:FORT=1TO10:I(P,T)=VAL(MID$(A$,T,1))+1:IFI(P,T)=10THENS=-1
115 IFI(P,T)<0ORI(P,T)>10THENI(P,T)=5
120 NEXT:IFNOT(S)THEN134
121 ONPGOTO122:INPUT"SENSE: 1. WALL      2. BLUE MINE       3. RED MINE  4. BLUE BOT        5. SCAN      6. CLEAR";S:GOTO123
122 INPUT"SENSE: 1. WALL      2. BLUE MINE       3. RED MINE  4. SCAN            5. RED BOT   6. CLEAR";S
123 IF(S=5ANDP=2)OR(S=4ANDP=1)THENI(P,14)=1:INPUT"SCAN FOR (1-6)";I(P,11):GOTO134
131 I(P,11)=S:IFS<1ORS>6THENI(P,11)=6
132 INPUT"AND THEN DO? (0-8 OR 9=180')";S:I(P,12)=S+1:IFS<0ORS>9THENI(P,12)=9
134 PRINT" 5 6 7":PRINT" 4   0":PRINT" 3 2 1"
135 INPUT"STARTING DIRECTION? (0-7)";S:I(P,13)=S:IFS<0ORS>7THENI(P,13)=0
136 PRINT:PRINT"(R)E-INPUT OR (C)ONTINUE? ";
137 I$=INKEY$:IFI$=""THEN137
138 IFI$="R"THENCLS:PRINTTAB(12);CL$(P):PRINT:GOTO105
139 IFI$<>"C"THEN137
140 I(P,0)=1:NEXT
150 GOSUB200:FORP=1TO2:O(P)=96:A(P)=RND(28)+1:B(P)=RND(12)+1:D(P)=I(P,13):POKEP(A(P),B(P)),C(D(P),P):NEXT:B=0:R=0:RETURN
160 PRINT"REUSE PREVIOUS PROGRAM (Y/N)? ";
170 I$=INKEY$:IFI$=""THEN170
175 IFI$="Y"THENPRINTI$:GOTO140
180 IFI$="N"THENPRINTI$:GOTO105
190 GOTO170
200 CLS:FORU=0TO31:PRINT@U,CHR$(W);:PRINT@448+U,CHR$(W);:NEXT
210 FORV=0TO14:PRINT@32*V,CHR$(W);:PRINT@32*V+31,CHR$(W);:NEXT
220 P=1:A(1)=X1:B(1)=Y1:D(1)=D1:L=L1:GOSUB240:P=2:A(2)=X2:B(2)=Y2:D(2)=D2:L=L2:GOSUB240:RETURN
240 FORT=1TOL
250 ONK(PEEK(P(A(P)+X(D(P)),B(P)+Y(D(P)))))GOTO260,260,260,260,260:A(P)=A(P)+X(D(P)):B(P)=B(P)+Y(D(P))
260 POKEP(A(P),B(P)),W:NEXT:RETURN
300 X1=10+RND(10):Y1=5+RND(5):D1=(RND(4)-1)*2:L1=LL(D1)
310 X2=10+RND(10):Y2=5+RND(5):D2=(RND(4)-1)*2:L2=LL(D2)
320 RETURN
1000 DIMM(2),TL,NR,L(7),R(7),H(7),V(7),W,TT,AI(50,14),X1,X2,LL(7),I$,A$,CL$(2),RS,BS,RV,BV,SC,HS,HN$,BS,RS,TB,TR
1005 S=RND(-(PEEK(9)*256+PEEK(10))):S=16384:NE(1)=-1:NE(2)=1:FORU=0TO31:FORV=0TO15:P(U,V)=32*V+U+S:NEXT:NEXT
1010 R(0)=1:R(1)=1:R(2)=1:R(3)=1:R(4)=1:R(5)=1:R(6)=1:R(7)=-7
1015 L(0)=7:L(1)=-1:L(2)=-1:L(3)=-1:L(4)=-1:L(5)=-1:L(6)=-1:L(7)=-1
1020 X(0)=1:Y(0)=0:X(1)=1:Y(1)=1:X(2)=0:Y(2)=1:X(3)=-1:Y(3)=1:X(4)=-1:Y(4)=0
1030 X(5)=-1:Y(5)=-1:X(6)=0:Y(6)=-1:X(7)=1:Y(7)=-1
1040 M(1)=106:M(2)=107
1045 LL(0)=10:LL(1)=7:LL(2)=5:LL(3)=7:LL(4)=10:LL(5)=7:LL(6)=5:LL(7)=7
1050 FORP=1TO2:RESTORE:FORT=0TO7:READZ:C(T,P)=Z+16+(16*P):K(C(T,P))=3+P:NEXT:NEXT:TL=50
1060 H(1)=7:H(2)=6:H(3)=5:H(5)=3:H(6)=2:H(7)=1
1070 V(0)=4:V(1)=3:V(3)=1:V(4)=0:V(5)=7:V(7)=5
1200 K(106)=2:K(107)=3:K(96)=6:CL$(1)="BLUE BOT":CL$(2)="RED BOT":Z=0
1220 Z=Z+1:FORT=1TO10:READS:AI(Z,T)=S+1:NEXT:READAI(Z,11),S,AI(Z,13),AI(Z,14):AI(Z,12)=S+1:IFS<>-9THEN1220
1230 TT=Z-1:GOSUB8070:CLS
2000 W=207+(RND(3)*16):K(W)=1:GOSUB300:FORP=1TO2:I(P,0)=0:NEXT:RS=0:BS=0:RV=0:BV=0
2010 CLS:PRINT"HOW MANY PLAYERS (1/2)? ";
2020 I$=INKEY$:IFI$=""THEN2020
2030 IFI$="2"THENPL=2:PRINTI$:GOTO20
2035 IFI$="1"THENPL=1:PRINTI$:GOTO20
2040 GOTO2020
8000 CLS0:POKE49151,64:PRINT"byjimgerrieforretrospectiva";
8010 PRINT"";
8015 PRINT"battle";
8020 PRINT"";
8025 PRINT"bots";
8030 PRINT"";
8035 PRINT"basedonthegamerobotwarby";:POKE16594,34:POKE16603,34
8040 PRINT"silaswarnerthepremiseisthat";
8045 PRINT"inthefuturewarhasbeenout";:POKE16670,45
8050 PRINT"lawedandnowcountriessettle";
8055 PRINT"theirdifferencesinabattle";
8060 PRINT"arenausingcombatrobotsthe";
8061 PRINT"tasksetbeforeyouissimple";:POKE16761,46:POKE16797,58
8062 PRINT"programarobotthatnoother";:POKE16815,44
8063 PRINT"robotcandestroy10rounds";:POKE16849,33:POKE16851,40:POKE16852,49:POKE16853,48
8064 PRINT@491,"PLEASE WAIT";
8065 POKE16861,41:FORS=16576TO16863:ON1-(PEEK(S)<99)GOTO98:NEXT:RETURN
8070 PRINT@484,"pressanykeytocontinue";
8080 IFINKEY$=""THEN8080
8090 CLS0:POKE49151,16:RETURN
8100 DATA138,142,140,141,133,135,131,139
8200 DATA 6,9,7,2,8,3,8,2,8,8,1,5,0,0
8210 DATA 6,9,7,8,6,9,7,8,8,8,1,9,0,0
8220 DATA 8,1,8,1,8,1,8,1,9,5,6,7,0,0
8230 DATA 6,7,6,3,7,6,8,8,8,9,1,9,0,0
8240 DATA 7,6,3,7,6,7,8,8,8,9,2,4,0,0
8250 DATA 7,6,3,7,6,6,6,8,8,9,2,4,0,0
8260 DATA 8,4,4,8,3,9,7,1,8,1,1,9,0,0
9010 REM INITIAL AI PROGS
9020 DATA 7,7,7,6,7,7,7,9,6,8,1,4,0,0
9030 DATA 7,1,8,7,1,8,7,1,8,6,0,0,0,0
9040 DATA 8,4,8,4,8,4,5,7,7,6,0,0,0,0
9050 DATA 5,7,8,5,7,8,5,7,8,6,0,0,0,0
9060 DATA 5,7,6,1,8,7,1,7,6,8,0,0,0,0
9070 DATA 5,7,7,7,8,1,8,4,8,9,1,3,0,0
9999 DATA 0,0,0,0,0,0,0,0,0,0,0,-9,-9,-9
