100 REM   --TANK-- 
110 REM  BY KEVIN DAHLHAUSEN 
120 REM   4/3/83 VERSION 2.B    
125 REM  
130 DX(1)=1
140 R=1
150 DY(1)=0
160 DX(2)=-1
170 DY(2)=0
180 REM   TANK 
190 CALL CLEAR
200 RANDOMIZE
210 RESTORE 270
220 FOR I=1 TO 9
230 READ C1,C2,C$
240 CALL CHAR(C1,C$)
250 CALL CHAR(C2,C$)
260 NEXT I
270 DATA 128,136,001092BAFEFEFE82,129,137,00FC70787E7870FC,130,138,0082FEFEFEBA9210
280 DATA 131,139,007E1C3CFC3C1C7E,96,96,387E7DBAFA541010,40,40,FFFFFFFFFFFFFFFF
290 DATA 104,104,925400D6005492,34,34,FFFFFFFFFFFFFFFF,41,41,0000001818000000
300 P(1)=0
310 P(2)=0
320 X(1)=4
330 X(2)=29
340 Y(1)=11
350 Y(2)=Y(1)
360 NOT=100
370 FOR I=1 TO 14
380 CALL COLOR(I,2,16)
390 NEXT I
400 CALL COLOR(1,2,16)
410 CALL COLOR(13,5,16)
420 CALL COLOR(14,7,16)
430 CALL COLOR(10,3,16)
440 CALL COLOR(2,15,16)
450 GOSUB 1640
460 SC(1)=1
470 SC(2)=1
480 GOSUB 2060
490 REM  --- MAIN LOOP --- 
500 ON VC(3)GOTO 510,600
510 ON SC(1)GOSUB 680,2920
520 ON SC(2)GOSUB 680,3240
530 ON SC(1)GOSUB 680,2920
540 ON SC(2)GOSUB 680,3240
550 ON VC(1)GOSUB 700,780
560 ON VC(2)GOSUB 1170,1260
570 CALL SOUND(-200,-6,5)
580 GOTO 510
590 REM  MAIN LOOP WITH GUIDED MISSELS 
600 ON SC(1)GOSUB 680,2900
610 ON SC(2)GOSUB 680,3220
620 ON SC(1)GOSUB 680,2900
630 ON SC(2)GOSUB 680,3220
640 ON VC(1)GOSUB 700,780
650 ON VC(2)GOSUB 1170,1260
660 CALL SOUND(-200,-6,5)
670 GOTO 600
680 RETURN
690 REM  #1 MOVE 
700 CALL KEY(1,K,S)
710 IF S=0 THEN 770
720 IF K=18 THEN 2360
730 IF K=15 THEN 930
740 IF K=1 THEN 1010
750 IF K=2 THEN 1090
760 IF K=4 THEN 840
770 RETURN
780 CALL KEY(1,K,S)
790 IF S<>0 THEN 2360
800 CALL JOYST(1,I1,I2)
810 I3=((I1+3*I2)/4)+5
820 ON I3 GOTO 830,930,830,1010,830,1090,830,840,830
830 RETURN
840 CALL GCHAR(Y(1)-1,X(1),S)
850 IF S>32 THEN 830
860 CALL HCHAR(Y(1),X(1),32)
870 DX(1)=0
880 DY(1)=-1
890 Y(1)=Y(1)-1
900 CALL HCHAR(Y(1),X(1),128)
910 GOTO 830
930 CALL GCHAR(Y(1)+1,X(1),S)
940 IF S>32 THEN 830
950 CALL HCHAR(Y(1),X(1),32)
960 DX(1)=0
970 DY(1)=1
980 Y(1)=Y(1)+1
990 CALL HCHAR(Y(1),X(1),130)
1000 RETURN
1010 CALL GCHAR(Y(1),X(1)-1,S)
1020 IF S>32 THEN 830
1030 CALL HCHAR(Y(1),X(1),32)
1040 DX(1)=-1
1050 DY(1)=0
1060 X(1)=X(1)-1
1070 CALL HCHAR(Y(1),X(1),131)
1080 RETURN
1090 CALL GCHAR(Y(1),X(1)+1,S)
1100 IF S>32 THEN 830
1110 CALL HCHAR(Y(1),X(1),32)
1120 DX(1)=1
1130 DY(1)=0
1140 X(1)=X(1)+1
1150 CALL HCHAR(Y(1),X(1),129)
1160 RETURN
1170 REM  #2 MOVE 
1180 CALL KEY(2,K,S)
1190 IF S=0 THEN 1250
1200 IF K=11 THEN 2630
1210 IF K=14 THEN 1400
1220 IF K=3 THEN 1480
1230 IF K=12 THEN 1560
1240 IF K=6 THEN 1320
1250 RETURN
1260 CALL KEY(2,K,S)
1270 IF S<>0 THEN 2630
1280 CALL JOYST(2,I1,I2)
1290 I3=((I1+3*I2)/4)+5
1300 ON I3 GOTO 1310,1400,1310,1480,1310,1560,1310,1320,1310
1310 RETURN
1320 CALL GCHAR(Y(2)-1,X(2),S)
1330 IF S>32 THEN 1310
1340 CALL HCHAR(Y(2),X(2),32)
1350 Y(2)=Y(2)-1
1360 DX(2)=0
1370 DY(2)=-1
1380 CALL HCHAR(Y(2),X(2),136)
1390 RETURN
1400 CALL GCHAR(Y(2)+1,X(2),S)
1410 IF S>32 THEN 1310
1420 CALL HCHAR(Y(2),X(2),32)
1430 Y(2)=Y(2)+1
1440 DX(2)=0
1450 DY(2)=1
1460 CALL HCHAR(Y(2),X(2),138)
1470 RETURN
1480 CALL GCHAR(Y(2),X(2)-1,S)
1490 IF S>32 THEN 1310
1500 CALL HCHAR(Y(2),X(2),32)
1510 X(2)=X(2)-1
1520 DX(2)=-1
1530 DY(2)=0
1540 CALL HCHAR(Y(2),X(2),139)
1550 RETURN
1560 CALL GCHAR(Y(2),X(2)+1,S)
1570 IF S>32 THEN 1310
1580 CALL HCHAR(Y(2),X(2),32)
1590 X(2)=X(2)+1
1600 DX(2)=1
1610 DY(2)=0
1620 CALL HCHAR(Y(2),X(2),137)
1630 RETURN
1640 REM  VARIATION 
1650 CALL CLEAR
1660 PRINT "      --- TANK ---":
1670 PRINT :"    BY K. DAHLHAUSEN": : :
1680 PRINT "DIRECTIONS?"
1690 CALL KEY(0,K,S)
1700 IF S=0 THEN 1690
1710 IF K=78 THEN 1800
1720 PRINT :" YOU SHOOT THE TREES TO GET"
1730 PRINT " POINTS. WHEN YOU SHOOT THE"
1740 PRINT " OTHER TANK, YOU GET A POINT"
1750 PRINT " FOR EACH TREE THAT YOU SHOT"
1760 PRINT " GUIDED MISSILES TURN IN THE"
1770 PRINT " DIRECTION THAT YOUR TANK "
1780 PRINT " IS FACING. YOU CAN SHOOT  "
1790 PRINT " YOURSELF. GOOD LUCK!"
1800 PRINT : :
1810 PRINT :"CONTROL FOR LEFT TANK:":
1820 PRINT "PRESS: 1- FOR KEYBOARD"
1830 PRINT "       2- FOR JOYST": :
1840 CALL KEY(0,K,S)
1850 IF S=0 THEN 1840
1860 IF(K=49)+(K=50)THEN 1880
1870 GOTO 1840
1880 VC(1)=VAL(CHR$(K))
1890 PRINT "CONTROL FOR RIGHT TANK:":
1900 PRINT "PRESS: 1- FOR KEYBOARD"
1910 PRINT "       2- FOR JOYST": :
1920 CALL KEY(0,K,S)
1930 IF S=0 THEN 1920
1940 IF(K=49)+(K=50)THEN 1960
1950 GOTO 1920
1960 VC(2)=VAL(CHR$(K))
1970 PRINT "SHOT MOVEMENT: 1- NORMAL"
1980 PRINT "               2- GUIDED"
1990 CALL KEY(O,K,S)
2000 IF S=0 THEN 1990
2010 IF(K=49)+(K=50)THEN 2030
2020 GOTO 1990
2030 VC(3)=VAL(CHR$(K))
2040 CALL CLEAR
2050 RETURN
2060 FOR I=1 TO NOT
2070 I1=INT(29*RND)+2
2080 I2=INT(18*RND)+2
2090 CALL HCHAR(I2,I1,96)
2100 NEXT I
2110 CALL HCHAR(1,1,34,32)
2120 CALL HCHAR(21,1,34,32)
2130 CALL VCHAR(2,1,34,19)
2140 CALL VCHAR(2,32,34,19)
2150 REM  BLOCKS 
2160 FOR I=1 TO 20
2170 I1=INT(10*RND)+12
2180 I2=INT(9*RND)+5
2190 CALL HCHAR(I2,I1,40)
2200 NEXT I
2210 FOR I=1 TO 12
2220 READ I1,I2,I3
2230 CALL VCHAR(I1,I2,40,I3)
2240 NEXT I
2250 DATA 6,6,2,6,7,2,6,8,11,6,9,11,15,6,2,15,7,2,6,24,11,6,25,11,6,26,2,6,27,2,15,26,2,15,27,2
2260 FOR I=1 TO 4
2270 READ I2,I3
2280 CALL HCHAR(23,I2,I3)
2290 NEXT I
2300 DATA 15,84,16,65,17,78,18,75
2310 CALL HCHAR(Y(1),X(1),129)
2320 CALL HCHAR(Y(2),X(2),139)
2330 CALL HCHAR(23,9,48,4)
2340 CALL HCHAR(23,21,48,4)
2350 RETURN
2360 IF SC(1)=2 THEN 2470
2370 SX(1)=X(1)
2380 SY(1)=Y(1)
2390 CALL GCHAR(SY(1)+DY(1),SX(1)+DX(1),S)
2400 IF S>32 THEN 2480
2410 SDY(1)=DY(1)
2420 SDX(1)=DX(1)
2430 SC(1)=2
2440 SY(1)=SY(1)+DY(1)
2450 SX(1)=SX(1)+DX(1)
2460 CALL HCHAR(SY(1),SX(1),41)
2470 RETURN
2480 IF(S=34)+(S=40)THEN 2560
2490 IF S=41 THEN 2580
2500 IF S<>96 THEN 3650
2510 CALL HCHAR(SY(1)+DY(1),SX(1)+DX(1),104)
2520 CALL SOUND(200,-7,1)
2530 B(1)=B(1)+1
2540 CALL HCHAR(SY(1)+DY(1),SX(1)+DX(1),32)
2550 RETURN
2560 CALL SOUND(200,-7,1)
2570 RETURN
2580 CALL HCHAR(SY(2),SX(2),104)
2590 CALL SOUND(200,-7,1)
2600 SC(2)=1
2610 CALL HCHAR(SY(2),SX(2),32)
2620 RETURN
2630 IF SC(2)=2 THEN 2740
2640 SX(2)=X(2)
2650 SY(2)=Y(2)
2660 CALL GCHAR(SY(2)+DY(2),SX(2)+DX(2),S)
2670 IF S>32 THEN 2750
2680 SC(2)=2
2690 SDX(2)=DX(2)
2700 SDY(2)=DY(2)
2710 SX(2)=SX(2)+DX(2)
2720 SY(2)=SY(2)+DY(2)
2730 CALL HCHAR(SY(2),SX(2),41)
2740 RETURN
2750 IF(S=34)+(S=40)THEN 2830
2760 IF S=41 THEN 2850
2770 IF S<>96 THEN 3960
2780 CALL HCHAR(SY(2)+DY(2),SX(2)+DX(2),104)
2790 CALL SOUND(200,-7,1)
2800 B(2)=B(2)+1
2810 CALL HCHAR(SY(2)+DY(2),SX(2)+DX(2),32)
2820 RETURN
2830 CALL SOUND(100,-7,1)
2840 RETURN
2850 CALL HCHAR(SY(1),SX(1),104)
2860 CALL SOUND(200,-7,1)
2870 SC(1)=1
2880 CALL HCHAR(SY(1),SX(1),32)
2890 RETURN
2900 SDX(1)=DX(1)
2910 SDY(1)=DY(1)
2920 CALL GCHAR(SY(1)+SDY(1),SX(1)+SDX(1),S)
2930 IF S>32 THEN 2990
2940 CALL HCHAR(SY(1),SX(1),32)
2950 SX(1)=SX(1)+SDX(1)
2960 SY(1)=SY(1)+SDY(1)
2970 CALL HCHAR(SY(1),SX(1),41)
2980 RETURN
2990 CALL HCHAR(SY(1),SX(1),32)
3000 SC(1)=1
3010 IF(S=34)+(S=40)THEN 3110
3020 IF S=41 THEN 3150
3030 IF(S>127)*(S<132)THEN 3870
3040 IF S<>96 THEN 3650
3050 CALL HCHAR(SY(1),SX(1),32)
3060 CALL HCHAR(SY(1)+SDY(1),SX(1)+SDX(1),104)
3070 CALL SOUND(300,-7,1)
3080 B(1)=B(1)+1
3090 CALL HCHAR(SY(1)+SDY(1),SX(1)+SDX(1),32)
3100 RETURN
3110 CALL HCHAR(SY(1),SX(1),152)
3120 CALL SOUND(300,-7,1)
3130 CALL HCHAR(SY(1),SX(1),32)
3140 RETURN
3150 CALL HCHAR(SY(2),SX(2),104)
3160 CALL HCHAR(SY(1),SX(1),32)
3170 CALL SOUND(300,-7,1)
3180 SC(1)=1
3190 SC(2)=1
3200 CALL HCHAR(SY(2),SX(2),32)
3210 RETURN
3220 SDX(2)=DX(2)
3230 SDY(2)=DY(2)
3240 CALL GCHAR(SY(2)+SDY(2),SX(2)+SDX(2),S)
3250 IF S>32 THEN 3310
3260 CALL HCHAR(SY(2),SX(2),32)
3270 SX(2)=SX(2)+SDX(2)
3280 SY(2)=SY(2)+SDY(2)
3290 CALL HCHAR(SY(2),SX(2),41)
3300 RETURN
3310 SC(2)=1
3320 IF(S=34)+(S=40)THEN 3420
3330 IF S=41 THEN 3460
3340 IF(S>135)*(S<140)THEN 3530
3350 IF S<>96 THEN 3960
3360 CALL HCHAR(SY(2),SX(2),32)
3370 CALL HCHAR(SY(2)+SDY(2),SX(2)+SDX(2),104)
3380 CALL SOUND(300,-7,1)
3390 B(2)=B(2)+1
3400 CALL HCHAR(SY(2)+SDY(2),SX(2)+SDX(2),32)
3410 RETURN
3420 CALL HCHAR(SY(2),SX(2),104)
3430 CALL SOUND(300,-7,1)
3440 CALL HCHAR(SY(2),SX(2),32)
3450 RETURN
3460 CALL HCHAR(SY(1),SX(1),104)
3470 CALL HCHAR(SY(2),SX(2),32)
3480 CALL SOUND(300,-7,1)
3490 SC(1)=1
3500 SC(2)=1
3510 CALL HCHAR(SY(1),SX(1),32)
3520 RETURN
3530 REM        
3540 IF SC(1)=2 THEN 3620
3550 I1=SY(1)
3560 I2=SX(1)
3570 SY(1)=SY(2)
3580 SX(1)=SX(2)
3590 SY(2)=I1
3600 SX(2)=I2
3610 IF SC(1)=2 THEN 3620 ELSE 3650
3620 SC(1)=1
3630 CALL HCHAR(SY(2),SX(2),32)
3640 REM  #1 HITS #2 
3650 CALL HCHAR(SY(1),SX(1),32)
3660 CALL SOUND(500,-7,1)
3670 FOR I=1 TO 10
3680 CALL COLOR(1,2,10)
3690 CALL COLOR(1,2,16)
3700 NEXT I
3710 IF SC(2)=1 THEN 3740
3720 SC(2)=1
3730 CALL HCHAR(SY(2),SX(2),32)
3740 P(1)=P(1)+B(1)+10
3750 M$=STR$(P(1))
3760 IF LEN(M$)>3 THEN 3800
3770 FOR I=1 TO 4-LEN(M$)
3780 M$="0"&M$
3790 NEXT I
3800 FOR I=1 TO LEN(M$)
3810 CALL SOUND(20,110,1)
3820 CALL HCHAR(23,8+I,ASC(SEG$(M$,I,1)))
3830 NEXT I
3840 R=R+1
3850 IF R<11 THEN 4170 ELSE 4270
3860 REM  IF 1HITS SELF 
3870 I1=SY(1)
3880 I2=SX(1)
3890 SY(1)=SY(2)
3900 SX(1)=SX(2)
3910 SY(2)=I1
3920 SX(2)=I2
3930 IF SC(2)=2 THEN 3940 ELSE 3960
3940 CALL HCHAR(SY(1),SX(1),32)
3950 SC(2)=1
3960 CALL HCHAR(SY(2),SX(2),32)
3970 CALL SOUND(500,-7,1)
3980 FOR I=1 TO 10
3990 CALL COLOR(1,2,6)
4000 CALL COLOR(1,2,16)
4010 NEXT I
4020 IF SC(1)=1 THEN 4050
4030 SC(1)=1
4040 CALL HCHAR(SY(1),SX(1),32)
4050 P(2)=P(2)+B(2)+10
4060 M$=STR$(P(2))
4070 IF LEN(M$)>3 THEN 4110
4080 FOR I=1 TO 4-LEN(M$)
4090 M$="0"&M$
4100 NEXT I
4110 FOR I=1 TO LEN(M$)
4120 CALL SOUND(20,110,1)
4130 CALL HCHAR(23,20+I,ASC(SEG$(M$,I,1)))
4140 NEXT I
4150 R=R+1
4160 IF R<11 THEN 4170 ELSE 4270
4170 FOR I=1 TO 15
4180 I1=(29*RND)+2
4190 I2=(18*RND)+2
4200 CALL GCHAR(I2,I1,S)
4210 IF S>32 THEN 4180
4220 CALL HCHAR(I2,I1,96)
4230 NEXT I
4240 B(1)=0
4250 B(2)=0
4260 GOTO 500
4270 REM   END ROUTINE 
4280 FOR I=1 TO 20
4290 CALL SOUND(100,500,4)
4300 NEXT I
4310 IF P(2)>P(1)THEN 4340
4320 I1=9
4330 GOTO 4350
4340 I1=21
4350 FOR I=1 TO 3
4360 FOR I2=I1 TO I1+3
4370 CALL GCHAR(23,I2,S)
4380 X(I2-I1)=S
4390 CALL HCHAR(23,I2,32)
4400 NEXT I2
4410 FOR I2=I1 TO I1+3
4420 CALL HCHAR(23,I2,X(I2-I1))
4430 NEXT I2
4440 NEXT I
4450 CALL SOUND(2000,110,5)
4460 CALL KEY(O,K,S)
4470 IF S=0 THEN 4460 ELSE 130
