CCCCCCCCCCCCCCCCCCCCCCCCC C C SPACE WAR C C COPIED FROM C LISTING C FROM DEC C CCCCCCCCCCCCCCCCCCCCCCCCC C INTEGER FOSR,TORP1,ROTL1,ROTR1,THRST1,TORP2,ROTL2,ROTR2,THRST2 INTEGER SCORE,WALL,OFFENS REAL MASS1,MASS2,MASS3,MASS4 REAL VX(20),VY(20),X(20),Y(20),MASS(20) REAL MOONX(6),MOONY(6) REAL MOON1X(12),MOON1Y(12),MOON2X(6),MOON2Y(6) DIMENSION SHIP1X(17),SHIP1Y(17),SHIP2X(17),SHIP2Y(17) DIMENSION SUNX(12),SUNY(12) DIMENSION SHIPSX(17),SHIPSY(17),XSHIPS(17),YSHIPS(17) DIMENSION PLTBUF(50) DIMENSION BOOMX(12),BOOMY(12),XBOOM(12),YBOOM(12) EQUIVALENCE (X(1),X1),(Y(1),Y1),(VX(1),VX1),(VY(1),VY1) EQUIVALENCE (X(2),X2),(Y(2),Y2),(VX(2),VX2),(VY(2),VY2) EQUIVALENCE (MASS(1),MASS1),(MASS(2),MASS2) EQUIVALENCE (VX(3),VX3),(VY(3),VY3),(X(3),X3),(Y(3),Y3) EQUIVALENCE (VX(4),VX4),(VY(4),VY4),(X(4),X4),(Y(4),Y4) EQUIVALENCE (MASS(3),MASS3),(MASS(4),MASS4) EQUIVALENCE (MOON1X(7),MOON2X(1)),(MOON1Y(7),MOON2Y(1)) EQUIVALENCE (MOON1X,BOOMX),(MOON1Y,BOOMY) EQUIVALENCE (Q,R,GAMES) DATA GT/.000005/ DATA TORPD/.025/ DATA VTORP,TORPM/.015,40/ DATA THRUST,COLLID/.000125,.0004/ DATA LOADTM/-6/ DATA NCOLIS/-40/ DATA SZONE/.0225/ DATA NTORP,FUEL/50,300/ DATA SAFETY,COS5DG,SIN5DG/.000625,.9962,.087156/ DATA NGAMES/0/ DATA WINS1,WINS2,TIES,FUSED1,FUSED2,TUSED1,TUSED2/7*0/ DATA SUNX/3*-.01,0,3*.01,0,-.02,0,.02,0/ DATA SUNY/-.01,0,3*.01,0,2*-.01,0,.02,0,-.02/ DATA MOONX/-.0055,-.0045,.001,.0053,.005,-.002/ DATA MOONY/-.0042,.001,.006,-.001,-.005,-.009/ DATA SHIP1Y/3*-.01,2*-.005,0,2*.005,3*.01,.005,0,-.005,3*0/ DATA SHIP1X/-.01,-.005,0,.005,.01,.015,.01,.005,0,-.005, X 4*-.01,-.02,-.025,-.03/ DATA SHIP2Y/4*-.003,3*0,4*.003,6*0/ DATA SHIP2X/-.015,-.01,-.005,0,.005,.01,.015,0,-.005, X -.01,-.015,-.01,-.005,0,-.025,-.03,-.035/ DATA XBOOM/-.00132,-.00151,-.00133,0,.00131, X .00155,.00129,0,-.0008,-.0003,.00025,.0006/ DATA YBOOM/-.00128,0,.00136,.0016,.00166, X 0,-.00135,-.0017,-.0006,.0005,.0004,.0005/ DTOR=6.2832/360. C CCCCCCCCCCCCCCCCCCCCCCCCC C C INITIALIZATION C CCCCCCCCCCCCCCCCCCCCCCCCC C 1 CALL SCALE (-.65,-.5,.65,.5) DO 5 I=1,20 5 MASS(I)=0 FUEL1=FUEL FUEL2=FUEL1 COSA2=.707 SINA2=COSA2 COSA1=-SINA2 SINA1=COSA1 NTORP1=NTORP NTORP2=NTORP1 LOAD1=0 LOAD2=LOAD1 NFLAM1=LOAD2 NFLAM2=NFLAM1 MASS1=1 MASS2=MASS1 MASS3=TORPM MASS4=MASS3 X2=.3 X1=-X2 Y1=.25 Y2=-Y1 VX1=0 VX2=VX1 VY1=VX2 VY2=VY1 VY3=VY2 VY4=VY3 X3=.01 X4=-X3 Y4=.25 Y3=-Y4 VX4=.006 VX3=-VX4 NOBJ=4 THRST2=40 C CCCCCCCCCCCCCCCCCCCCCCCCC C C READ CONTROLS C CCCCCCCCCCCCCCCCCCCCCCCCC C 10 KEYS=FOSR(X) IF (NTORP1+NTORP2) 800,800 TORP1=-KEYS/2048 KEYS=KEYS+TORP1*2048 ROTL1=-KEYS/1024 KEYS=KEYS+ROTL1*1024 ROTR1=-KEYS/512 KEYS=KEYS+ROTR1*512 THRST1=-KEYS/256 KEYS=KEYS+THRST1*256 SCORE=-KEYS/128 KEYS=KEYS+SCORE*128 OFFENS=-KEYS/64 KEYS=KEYS+OFFENS*64 WALL=-KEYS/32 KEYS=KEYS+WALL*32 IF (-KEYS/16) 20 MASS3=TORPM MASS4=MASS3 20 KEYS=KEYS-KEYS/16*16 IF (KEYS) 1000,1000 TORP2=-KEYS/8 KEYS=KEYS+TORP2*8 ROTL2=-KEYS/4 KEYS=KEYS+ROTL2*4 ROTR2=-KEYS/2 THRST2=-(KEYS+ROTR2*2) GO TO 1300 C CCCCCCCCCCCCCCCCCCCCCCCCC C C DEFENSE C CCCCCCCCCCCCCCCCCCCCCCCCC C 1000 THRST2=THRST2-1 IF (-THRST2) 1300 ROTR2=-1 TORP2=ROTR2 ROTL2=TORP2 TIME=33 DO 1200 I=5,19 IF (MASS(I)) 1200,1200 XD=X(I)-X2 YD=Y(I)-Y2 THIT=XD/(VX2-VX(I)) IF (THIT) 1050 IF (TIME-THIT) 1050 RHIT=YD+THIT*(VY(I)-VY2) IF (SAFETY-RHIT*RHIT) 1050 1020 TIME=THIT TXD=XD TYD=YD GO TO 1200 C 1050 VYD=VY2-VY(I) IF (VYD) 1060,1200 1060 THIT=YD/VYD IF (THIT) 1200 IF (TIME-THIT) 1200 RHIT=XD+THIT*(VX(I)-VX2) IF (RHIT*RHIT-SAFETY) 1020,1020 1200 CONTINUE IF (32-TIME) 1205 RDIR=TYD*COSA2-TXD*SINA2 IF (SAFETY-RDIR*RDIR) 1255 IF (14-TIME) 1202 TORP2=0 1202 IF (COLLID-RDIR*RDIR) 1255 GO TO 1300 C CCCCCCCCCCCCCCCCCCCCCCCCC C C OFFENSE C CCCCCCCCCCCCCCCCCCCCCCCCC C 1205 IF (MASS1) 1300,1300 XD=X1-X2 YD=Y1-Y2 VXD=VX1-VX2-VTORP*COSA2 VYD=VY1-VY2-VTORP*SINA2 THIT=(XD*XD+YD*YD)/(VXD*VXD+VYD*VYD)/2 THIT2=15+THIT/30 THIT2=THIT2/2+THIT/THIT2 THIT=THIT2/2+THIT/THIT2 IF (SZONE-X1*X1-Y1*Y1) 1210 IF (13-THIT) 1250,1240,1240 C 1210 XD=XD+VXD*THIT YD=YD+VYD*THIT IF (COLLID-XD*XD-YD*YD) 1250 IF (33-THIT) 1300 1240 IF (OFFENS) 1300 TORP2=0 1250 RDIR=YD*COSA2-XD*SINA2 1255 IF (RDIR) 1270 ROTL2=0 GO TO 1300 C 1270 ROTR2=0 C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C MOVE OBJECTS C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C 1300 DO 100 I=1,19 IF (MASS(I)) 50,100 50 XX=X(I) YY=Y(I) RR=(XX*XX+YY*YY)/2 IF (RR-COLLID) 95 R=.125+RR*4 R=R/2+RR/R R=R/2+RR/R TASUN=GT/RR/R VX(I)=VX(I)-TASUN*XX VY(I)=VY(I)-TASUN*YY X(I)=XX+VX(I) Y(I)=YY+VY(I) IF (MASS(I)) 40 C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C COLLISION CHECK C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C DO 600 J=I+1,20 IF (MASS(J)) 600,600 XD=XX-X(J) XD=COLLID-XD*XD IF (XD) 600 YD=YY-Y(J) IF (XD-YD*YD) 600 MASS(J)=MASS(J)+NCOLIS MASS(I)=MASS(I)+NCOLIS 600 CONTINUE 40 IMOFF=-1 IF (-(XX+.65)) 60 VX(I)=-VX(I) X(I)=-.649 IMOFF=0 60 IF (-(YY+.50)) 70 VY(I)=-VY(I) Y(I)=-.499 IMOFF=0 70 IF (XX-.65) 80 VX(I)=-VX(I) X(I)=.649 IMOFF=0 80 IF (YY-.50) 90 VY(I)=-VY(I) Y(I)=.499 IMOFF=0 90 IF (IMOFF) 100 IF (2-I) 95 IF (WALL) 100 95 IF (MASS(I)) 100,100 MASS(I)=MASS(I)+NCOLIS 100 CONTINUE C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C ROTATE SHIPS C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C IF (ROTL1) 160 RDIR=SIN5DG GO TO 170 C 160 IF (ROTR1) 180 RDIR=-SIN5DG 170 COSAT=COSA1*COS5DG-SINA1*RDIR SINA1=SINA1*COS5DG+COSA1*RDIR COSA1=COSAT 180 IF (ROTL2) 190 RDIR=SIN5DG GO TO 200 C 190 IF (ROTR2) 210 RDIR=-SIN5DG 200 COSAT=COSA2*COS5DG-SINA2*RDIR SINA2=SINA2*COS5DG+COSA2*RDIR COSA2=COSAT C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C LAUNCH TORPEDOS C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C 210 LOAD1=LOAD1+1 IF (MASS1) 220 IF (TORP1) 220 IF (LOAD1) 220 IF (NTORP1) 220,220 NTORP1=NTORP1-1 LOAD1=LOADTM NOBJ=NOBJ+1 IF (NOBJ-20) 212 NOBJ=5 212 MASS(NOBJ)=TORPM X(NOBJ)=X1+TORPD*COSA1 Y(NOBJ)=Y1+TORPD*SINA1 VX(NOBJ)=VX1+VTORP*COSA1 VY(NOBJ)=VY1+VTORP*SINA1 220 LOAD2=LOAD2+1 IF (MASS2) 240 IF (TORP2) 240 IF (LOAD2) 240 IF (NTORP2) 240,240 NTORP2=NTORP2-1 LOAD2=LOADTM NOBJ=NOBJ+1 IF (NOBJ-20) 222 NOBJ=5 222 MASS(NOBJ)=TORPM X(NOBJ)=X2+TORPD*COSA2 Y(NOBJ)=Y2+TORPD*SINA2 VX(NOBJ)=VX2+VTORP*COSA2 VY(NOBJ)=VY2+VTORP*SINA2 C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C THRUST C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C 240 IF (THRST1) 340 FUEL1=FUEL1-1 IF (FUEL1) 340 NFLAM1=1+NFLAM1-NFLAM1/3*3 VX1=VX1+COSA1*THRUST VY1=VY1+SINA1*THRUST GO TO 350 C 340 NFLAM1=0 350 IF (THRST2) 360 FUEL2=FUEL2-1 IF (FUEL2) 360 NFLAM2=1+NFLAM2-NFLAM2/3*3 VX2=VX2+COSA2*THRUST VY2=VY2+SINA2*THRUST GO TO 370 C 360 NFLAM2=0 C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C DISPLAY C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C 370 DO 380 I=1,6 MOON1X(I)=MOONX(I)+X3 MOON1Y(I)=MOONY(I)+Y3 MOON2X(I)=MOONY(I)+X4 380 MOON2Y(I)=MOONX(I)+Y4 DO 400 I=1,14+NFLAM1 SHIPSX(I)=SHIP1X(I)*COSA1-SHIP1Y(I)*SINA1+X1 400 SHIPSY(I)=SHIP1Y(I)*COSA1+SHIP1X(I)*SINA1+Y1 DO 410 I=1,14+NFLAM2 XSHIPS(I)=SHIP2X(I)*COSA2-SHIP2Y(I)*SINA2+X2 410 YSHIPS(I)=SHIP2Y(I)*COSA2+SHIP2X(I)*SINA2+Y2 CALL CLRPLT(50,PLTBUF) IF (MASS1) 420,420 CALL PLOT(14+NFLAM1,SHIPSX,SHIPSY) 420 IF (MASS2) 430,430 CALL PLOT(14+NFLAM2,XSHIPS,YSHIPS) 430 DO 440 I=5,20 IF (MASS(I)) 440,440 XX=X(I) YY=Y(I) CALL PLOT(1,XX,YY) 440 CONTINUE IF (MASS3) 450,450 CALL PLOT(6,MOON1X,MOON1Y) 450 IF (MASS4) 460,460 CALL PLOT(6,MOON2X,MOON2Y) 460 CALL PLOT(12,SUNX,SUNY) IF (MASS1) 500,520,520 500 Q=MASS1+41 MASS1=MASS1+1 DO 510 I=1,12 BOOMX(I)=X1+Q*XBOOM(I) 510 BOOMY(I)=Y1+Q*YBOOM(I) CALL PLOT(12,BOOMX,BOOMY) 520 IF (MASS2) 540,560,560 540 Q=MASS2+41 MASS2=MASS2+1 DO 550 I=1,12 BOOMX(I)=X2+Q*YBOOM(I) 550 BOOMY(I)=Y2+Q*XBOOM(I) CALL PLOT(12,BOOMX,BOOMY) 560 IF (MASS1) 10,700 IF (MASS2) 10,900,10 C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C SCORING C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C 700 IF (MASS2) 10,800 WINS2=WINS2+1 750 FUSED1=FUSED1+FUEL-FUEL1 TUSED1=TUSED1+NTORP-NTORP1 FUSED2=FUSED2+FUEL-FUEL2 TUSED2=TUSED2+NTORP-NTORP2 NGAMES=NGAMES+1 IF (SCORE) 760,770 760 FUSED1=0 FUSED2=0 TUSED1=0 TUSED2=0 WINS1=0 WINS2=0 TIES=0 NGAMES=0 GO TO 1 C 770 IF (NGAMES-NGAMES/5*5) 1,2000,1 800 TIES=TIES+1 GO TO 750 C 900 WINS1=WINS1+1 GO TO 750 C 2000 GAMES=WINS1+WINS2+TIES I=(WINS1*2+TIES)/(GAMES*2)*1000-FUSED1/(GAMES*FUEL)*100 X -TUSED1/(GAMES*NTORP)*100 J=(WINS2*2+TIES)/(GAMES*2)*1000-FUSED2/(GAMES*FUEL)*100 X -TUSED2/(GAMES*NTORP)*100 WRITE (4,2010) GAMES,I,J 2010 FORMAT (3I4/) GO TO 1 C END $ TUSED2=0 WINS1=0 WINS2=0 TIES=0 NGAMES=0 GO TO 1 C 770 IF (NGAMES-NGAMES/5*5) 1,2000,1 800 TIES=TIES+1 GO TO 750 C 900 WINS1=WINS1+1 GO TO 750 C 2000 GAMES=WINS1+WINS2+TIES I=(WINS1*2+TIES)/(GAMES*2)*1000-FUSED1/(GAMES*FUEL)*100 X -TUSED1/(GAMES*NTORP)*100 J=(WINS2*2+TIES)/(GAMES*2)*1000-FUSED2/(GAMES*FUEL)*100 X -TUSED2/(GAMES*NTORP)*100 WRITE (4,2010) GAMES,I,J 2010 FORMAT (3I4/) GO TO 1 C END