10 REM WWI AIR COMBAT GAME 20 REM BY WALID MAALOULI 30 REM AUGUST 2005 100 REM INITIALIZATION 110 RANDOMIZE:ED=-600:AM=100:EAM=100:ALT=5000:EALT=5000 120 HD=360:EHD=180:SP=2:ESP=2 130 Y=3:AY=-3:NTHD=270:THD=90 140 REM DISPLAY SCREEN 150 REM PLAYER MOVE 160 DHD=HD:TALT=ALT:IFLAG=0:MAN=0:ATT=0 170 GOSUB 1230 180 GOSUB 1190 190 INPUT "MANVR? 1=L 2=R 3=S 4=I 5=RI ";MAN 200 IF MAN<1 OR MAN>5 THEN 190 210 INPUT "SPEED? (1-3) ";SP 220 IF SP<1 OR SP>3 THEN 210 230 IF MAN>3 THEN 280 240 INPUT "ATTITUDE? 1=L 2=D 3=C ";ATT 250 IF ATT<1 OR ATT>3 THEN 240 260 IF MAN=1 THEN HD=HD-(180-(45*SP)) 270 IF MAN=2 THEN HD=HD+(180-(45*SP)) 280 IF MAN=4 AND SP=3 THEN ALT=ALT+600:HD=HD+180:GOTO 300 290 IF MAN=5 THEN ALT=ALT-600:HD=HD+180:SP=SP+2 300 IF HD<=0 THEN HD=HD+360 ELSE IF HD>360 THEN HD=HD-360 310 IF ATT=2 AND MAN<4 THEN ALT=ALT-200:SP=SP+1:GOTO 360 320 IF ATT=3 AND MAN<4 THEN ALT=ALT+200:SP=SP-1:IF SP=0 THEN 340 330 IF MAN=4 AND SP<3 THEN 340 ELSE 400 340 PRINT "YOU HAVE STALLED!":PAUSE 350 SP=1:ALT=ALT-2000:STALL=1 360 IF ALT<=0 THEN PRINT "YOU HIT THE GROUND!":PAUSE:GOTO 1160 370 IF SP=4 THEN 380 ELSE 400 380 PRINT "STRUCTURAL LIMITS EXCEEDED!":PAUSE 390 PRINT "YOUR PLANE BROKE UP...":PAUSE:GOTO 1160 400 IF MAN=4 THEN SP=1 410 VT=100*SP:IF HD>90 AND HD<270 THEN Y=Y-(VT/100) 420 IF HD>270 OR HD<90 THEN Y=Y+(VT/100) 430 REM COMPUTER MOVE 440 IF ED=0 THEN 630 450 IF ((DHD=EHD)OR (ABS(DHD-EHD)=180))AND ESP=3 THEN IFLAG=1:GOTO 460 ELSE 470 460 EALT=EALT+600:ESP=1:EHD=EHD+180:GOTO 640 470 IF ((THD=EHD)OR (ABS(DHD-EHD)=180))AND ESP=1 THEN IFLAG=1:GOTO 480 ELSE 490 480 IF EALT>=1000 THEN EALT=EALT-600:ESP=ESP+2:EHD=EHD+180:GOTO 640 490 IF DHD180 AND ESP>1 THEN 510 ELSE 520 510 ESP=ESP-1:EHD=EHD-(180-(45*ESP)):GOTO 640 520 IF DHD-EHD>180 THEN EHD=EHD-(180-(45*ESP)):GOTO 640 530 IF DHD-EHD=180 THEN 560 540 IF ESP>1 THEN ESP=ESP-1:EHD=EHD+(180-(45*ESP)):GOTO 640 550 EHD=EHD+(180-(45*ESP)):GOTO 640 560 IF 10*RND>5 THEN EHD=EHD+(180-(45*ESP)) ELSE EHD=EHD-(180-(45*ESP)) 570 GOTO 640 580 IF EHD-DHD>180 AND ESP>1 THEN ESP=ESP-1:EHD=EHD+(180-(45*ESP)):GOTO 640 590 IF EHD-DHD>180 THEN EHD=EHD+(180-(45*ESP)):GOTO 640 600 IF EHD-DHD=180 THEN 560 610 IF ESP>1 THEN ESP=ESP-1:EHD=EHD-(180-(45*ESP)):GOTO 640 620 EHD=EHD-(180-(45*ESP)):GOTO 640 630 IF 10*RND>5 THEN EHD=EHD+(180-(45*ESP)) ELSE EHD=EHD-(180-(45*ESP)) 640 IF TALT>EALT AND IFLAG=0 THEN EALT=EALT+200:GOTO 660 650 IF TALT=400 THEN EALT=EALT-200 660 IF EHD>360 THEN EHD=EHD-360 670 IF EHD<=0 THEN EHD=EHD+360 680 REM UPDATING POSITIONS 690 RALT=ALT-EALT:EVT=100*ESP 700 IF EHD>90 AND EHD<270 THEN AY=AY-(EVT/100) 710 IF EHD>270 OR EHD<90 THEN AY=AY+(EVT/100) 720 THD=(HD+90)+(360*((HD+90)>360)) 730 NTHD=(HD-90)-(360*((HD-90)<=0)) 740 GOSUB 1290:IF DFLAG=1 THEN ED=ED-(VT-EVT) ELSE ED=ED-(VT+EVT) 750 IF ED=0 AND RALT=0 THEN 760 ELSE 770 760 PRINT "YOU CRASHED WITH ENEMY!":PAUSE:GOTO 1160 770 IF ABS(RALT)>5000 OR ABS(ED)>5000 THEN PRINT "LOST ENEMY...":PAUSE:GOTO 1160 780 GOSUB 1230:GOSUB 1200 790 REM FIRING DECISION 800 INPUT "FIRE? (Y/N) ";ANS$ 810 IF ANS$<>"Y"AND ANS$<>"y"THEN 940 820 IF EHD=THD OR EHD=NTHD THEN 910 830 IF ED>0 THEN 840 ELSE 910 840 IF ABS(RALT)>600 THEN 910 850 IF ED<=200 THEN EDM=EDM+2:HFLAG=1:GOTO 920 860 IF ED>200 AND ED<=400 THEN 870 ELSE 880 870 IF 10*RND<=7 THEN EDM=EDM+2:HFLAG=1:GOTO 920 ELSE 910 880 IF ED>400 AND ED<=800 THEN 890 ELSE 900 890 IF 10*RND<=4 THEN EDM=EDM+2:HFLAG=1:GOTO 920 ELSE 910 900 IF ED>800 THEN 910 ELSE 920 910 PRINT "MISSED!":PAUSE 920 AM=AM-10 930 IF HFLAG=1 THEN PRINT "YOU SCORED A HIT!":PAUSE:HFLAG=0 940 IF EHD=NTHD OR EHD=THD THEN 1090 950 GOSUB 1290:IF DFLAG=0 AND ED>0 THEN 970 960 IF DFLAG=1 AND ED<0 THEN 970 ELSE 1090 970 IF ABS(ED)<=800 AND ABS(RALT)<=600 THEN 980 ELSE 1090 980 PRINT "ENEMY FIRES!":PAUSE 990 IF ABS(ED)<=200 THEN DM=DM+2:HFLAG=1:GOTO 1060 1000 IF ABS(ED)>200 AND ABS(ED)<=400 THEN 1010 ELSE 1020 1010 IF 10*RND<=7 THEN DM=DM+2:HFLAG=1:GOTO 1060 ELSE 1050 1020 IF ABS(ED)>400 AND ABS(ED)<=800 THEN 1030 ELSE 1040 1030 IF RND*10<=4 THEN DM=DM+2:HFLAG=1:GOTO 1060 ELSE 1050 1040 IF ABS(ED)>800 THEN 1050 ELSE 1060 1050 PRINT "MISSED!":PAUSE 1060 EAM=EAM-10 1070 IF HFLAG=1 THEN PRINT "YOU HAVE BEEN HIT!":PAUSE:HFLAG=0 1080 REM DAMAGE ASSESMENT 1090 IF DM=6 AND EDM<6 THEN PRINT "YOU HAVE BEEN SHOT DOWN!":PAUSE:GOTO 1160 1100 IF EDM=6 AND DM<6 THEN PRINT "ENEMY SHOT DOWN!":PAUSE:GOTO 1160 1110 IF EDM=6 AND DM=6 THEN PRINT "YOU SHOT DOWN EACH OTHER!":PAUSE:GOTO 1160 1120 IF AM=0 AND EAM>0 THEN PRINT "NO AMMO LEFT! YOU LOSE!":PAUSE:GOTO 1160 1130 IF EAM=0 AND AM>0 THEN PRINT "ENEMY OUT OF AMMO! YOU WIN!":PAUSE:GOTO 1160 1140 IF EAM=0 AND AM=0 THEN PRINT "BOTH OUT OF AMMO! DRAW!":PAUSE:GOTO 1160 1150 GOTO 160 1160 INPUT "PLAY AGAIN? (Y/N) ";ANS$ 1170 IF ANS$="Y"OR ANS$="y"THEN 110 ELSE STOP 1180 REM SUBROUTINES 1190 REM MAIN SCREEN DISPLAY 1200 PRINT "H";HD;"EH";EHD;CHR$(126);ED;CHR$(170);RALT;CHR$(242);ALT; 1210 PRINT CHR$(174);SP;CHR$(224);AM;"X";DM;CHR$(248);EDM;:PAUSE:RETURN 1220 REM ORIENTATION DETERMINATION 1230 GOSUB 1290 1240 IF DFLAG=1 THEN 1250 ELSE 1270 1250 IF YY THEN ED=ABS(ED):RETURN ELSE IF ED<0 THEN RETURN ELSE ED=ED*-1 1280 REM FRONTAL FIELD DETERMINATION 1290 DFLAG=0 1300 I=NTHD 1310 IF EHD=I THEN DFLAG=1:RETURN 1320 I=I+45:IF I>360 THEN I=I-360 1330 IF I<>360 AND I>THD THEN RETURN 1340 IF I=360 AND THD=315 THEN RETURN ELSE 1310