10 REM DOGFIGHT
20 REM ROBERT ERSKINE.
30 MODE 1:BORDER 4:INK 0,26:INK 1,1:INK 2,0:INK 3,6:WINDOW #1,1,40,1,25:PAPER #1,0:PEN #1,1:CLS #1
40 GOSUB 1290
50 GOSUB 820
60 DIM P(4),Q(4),G$(2),D(16),E(16),F(16),G(16)
70 GOSUB 920
80 WINDOW #0,5,36,1,25:PAPER #0,0:PEN #0,1:CLS #0
90 GOSUB 800
100 REM MAIN LOOP
110 IF P(3)=Q(3) AND P(4)=Q(4) THEN GOSUB 560
120 LOCATE P(4)+1,P(3)+1:PRINT " ";
130 IF P(1)<21 THEN LOCATE P(2)+1,P(1)+1:PEN 3:PRINT CHR$(A+230):PEN 1:P(3)=P(1):P(4)=P(2)
140 IF P(1)=Q(3) AND P(2)=Q(4) THEN GOTO 560
150 LOCATE Q(4)+1,Q(3)+1:PRINT" ";
160 IF Q(1)<21 THEN LOCATE Q(2)+1,Q(1)+1 :PRINT CHR$(AA+238);:Q(3)=Q(1):Q(4)=Q(2)
170 IF INKEY(47)=0 AND G=1 THEN F=1
180 IF RND>0.5 AND G=-1 AND ABS(P(1)-Q(1))<7 AND ABS(P(2)-Q(2))<7 THEN F=2
190 IF INKEY(0)=0 AND G=1 THEN A=A+1:IF A=9 THEN A=1
200 IF RND>0.9 THEN AA=AA+1:IF AA=9 THEN AA=1
210 IF INKEY(2)=0 AND G=1 THEN A=A-1:IF A=0 THEN A=8
220 IF RND>0.9 THEN AA=AA-1:IF AA=0 THEN AA=8
230 IF F>0 THEN GOSUB 360
240 IF P(1)>20 THEN P(1)=1
250 IF Q(1)>20 THEN Q(1)=1
260 IF P(1)<1 THEN P(1)=20
270 IF Q(1)<1 THEN Q(1)=20
280 P(1)=P(1)+D(A):P(2)=P(2)+D(A+8) 
290 IF P(2)>31 THEN P(2)=1
300 IF P(2)<1 THEN P(2)=31
310 Q(1)=Q(1)+E(AA):Q(2)=Q(2)+E(AA+8) 
320 IF Q(2)>31 THEN Q(2)=1
330 IF Q(2)<1 THEN Q(2)=31
340 G=-G
350 GOTO 100
360 REM FIRE
370 IF F=1 THEN X=FN A(P(2)):Y=FN B(P(1)):Y=-Y
380 IF F=2 THEN X=FN A(Q(2)):Y=FN B(Q(1)):Y=-Y
390 IF F=1 THEN XX=F(A):YY=F(A+8):XL=P(2)+XX/8:YL=P(1)-YY/8
400 IF F=2 THEN XX=G(AA):YY=G(AA+8):XL=Q(2)+XX/8:YL=Q(1)-YY/8
410 CNT=0
420 XL=-XL*(XL>=1 AND XL<=31)-(XL>31)-31 *(XL<1)
430 YL=-YL*(YL>=1 AND YL<=21)-(YL>21)-21*(YL<1)
440 IF CNT>0 THEN PLOT X*2+64,Y*2+48,2:FOR ZZ=1 TO 5:SOUND 1,100,1:NEXT:PLOT X*2 +64,Y*2+48,0
450 LOCATE XL+1,YL+1:CALL 360: GG=PEEK(367):IF GG>230 THEN 650
460 CNT=CNT+1
470 X=X+XX:Y=Y+YY:XL=INT(XL+XX/8):YL=INT(YL-YY/8)
480 IF CNT<6 THEN 420
490 F=0:RETURN
500 PEN 2:LOCATE Q(2)+1,21:PRINT" ";:PEN 1
510 FOR X=1 TO 10:SOUND 1,X*10),3:NEXT:LOCATE Q(2)+1,21:PEN 0:PRINT" ";:PEN 1
520 LIVES2=LIVES2-1:IF LIVES2=0 THEN 740
530 AA=1:Q(1)=20:Q(2)=31
540 GOSUB 800
550 RETURN
560 REM COLLISION
570 LOCATE P(4)+1,P(3)+1:PEN 3:PRINT"*";:PEN 1
580 FOR ZZ=1 TO 15:SOUND 1,ZZ*20,3:NEXT 
590 LIVES=LIVES-1:LIVES2=LIVES2-1
600 IF LIVES<1 OR LIVES2<1 THEN GOSUB 800:GOTO 740
610 LOCATE P(4)+1,P(3)+1:PRINT" ";
620 A=1:AA=1:P(1)=20:P(2)=0:Q(1)=20:Q(2)=31:P(3)=P(1):P(4)=P(2):Q(3)=Q(1):Q(4)=Q(2)
630 GOSUB 800
640 GOTO 100
650 IF F=1 THEN LOCATE Q(2)+1,Q(1)+1:PEN 2:PRINT"*";:PEN 1
660 IF F=2 THEN LOCATE P(2)+1,P(1)+1:PEN 2:PRINT"*";:PEN 1
670 FOR L=1 TO 10:SOUND 1,90+L,3:NEXT 
680 IF F=1 THEN LIVES2=LIVES2-1:IF LIVES2=0 THEN 740
690 IF F=2 THEN LIVES=LIVES-1:IF LIVES=0 THEN 740
700 IF F=1 THEN Q(1)=20:Q(2)=31:AA=1 
710 IF F=2 THEN P(1)=20:P(2)=31:A=1 
720 GOSUB 800
730 GOTO 490
740 GOSUB 800:IF LIVES=0 AND LIVES2=0 THEN LOCATE 5,19:PEN 2:PRINT "The result is a draw"
750 IF LIVES=0 AND LIVES2>0 THEN LOCATE 4,19:PEN 3:PRINT CHR$(24);"The computer is the winner";CHR$(24);:PEN 1
760 IF LIVES>0 AND LIVES2=0 THEN LOCATE 5,19:PRINT CHR$(24);"   YOU ARE THE WINNER     ";CHR$(24);
770 LOCATE 5,21:PEN 2:PRINT CHR$(24);" PRESS ANY KEY TO RESTART ";CHR$(24);:PEN 1 
780 IF INKEY$<>"" THEN 780
790 IF INKEY$="" THEN 790 ELSE RUN
800 PEN 3:LOCATE 1,22:PRINT CHR$(24);"PLYR LIVES:";LIVES;"     COMP.LIVES";LIVES2;CHR$(24);:PEN 1
810 RETURN
820 LOCATE 1,1:PEN 3:PRINT CHR$(24);"             D O G F I G H T            ";CHR$(24);:PEN 1
830 LOCATE 14,5:PEN 2:PRINT"PLAYER CONTROLS":PEN 1
840 LOCATE 10,8:PRINT CHR$(24);"UP   ARROW......... UP";CHR$(24)
850 LOCATE 10,9:PEN 3:PRINT CHR$(24);"DOWN ARROW........DOWN";CHR$(24);:PEN 1
860 LOCATE 10,10:PEN 2:PRINT CHR$(24);"SPACE BAR.........FIRE";CHR$(24);:PEN 1
870 LOCATE 1,15:PRINT"THE PLAYER CONTROLS THE RED AIRCRAFT    AND THE COMPUTER CONTROLS THE DARK BLUE"
880 LOCATE 10,21:PEN 3:PRINT CHR$(24);"PRESS ANY KEY TO START";CHR$(24);:PEN 1
890 IF INKEY$<>"" THEN 890
900 IF INKEY$=""THEN 900 ELSE CLS
910 RETURN
920 REM
930 G=1
940 P(1)=20:P(2)=1:Q(1)=20:Q(2)=31:P(3)=P(1):P(4)=P(2):Q(3)=Q(1):Q(4)=Q(3)
950 A=1:AA=A
960 RESTORE:FOR X=1 TO 16
970 READ N:D(X)=N
980 READ N:E(X)=N
990 NEXT X
1000 DATA 0,0,-1,-1,-1,-1,-1,-1,0,0,1,1,1,1,1,1
1010 DATA 1,-1,1,-1,0,0,-1,1,-1,1,-1,1,0,0,1,-1
1020 F=0
1030 G$(1)=CHR$(A+230):G$(2)=CHR$(AA+238)
1040 SYMBOL AFTER 230
1050 SYMBOL 231,0,15,132,255,0,15,0,0
1060 SYMBOL 232,8,26,52,9,18,164,64,0
1070 SYMBOL 233,84,84,116,84,16,16,16,84
1080 SYMBOL 234,16,72,36,208,72,36,2,4
1090 SYMBOL 235,0,240,0,255,33,240,0,0
1100 SYMBOL 236,0,2,37,72,144,36,88,16
1110 SYMBOL 237,12,8,8,8,42,46,42,42
1120 SYMBOL 238,32,64,36,18,11,36,18,8
1130 SYMBOL 239,0,240,33,255,0,240,0,0
1140 SYMBOL 240,16,88,164,144,72,37,2,0
1150 SYMBOL 241,42,42,46,42,8,8,8,8
1160 SYMBOL 242,8,18,36,11,18,36,64,32
1170 SYMBOL 243,0,0,15,0,255,132,15,0
1180 SYMBOL 244,0,64,164,18,9,36,26,4
1190 SYMBOL 245,48,16,16,16,84,116,84,84
1200 SYMBOL 246,4,2,36,72,208,36,72,16
1210 LIVES=3:LIVES2=3
1220 DEF FN A(X)=X*8+4
1230 DEF FN B(X)=X*8-172
1240 FOR X=1 TO 16:READ F(X):NEXT
1250 DATA 8,8,0,-8,-8,-8,0,8,0,8,8,8,0,-8,-8,-8
1260 FOR X=1 TO 16:READ G(X):NEXT
1270 DATA -8,-8,0,8,8,8,0,-8,0,8,8,8,0,-8,-8,-8
1280 RETURN
1290 RESTORE 1300:FOR FL=360 TO 366:READ FLL:POKE FL,FLL:NEXT:RESTORE:RETURN
1300 DATA 205,96,187,50,111,1,201