File F1112.FT (FORTRAN source file)

Directory of image this file is from
This file as a plain text file

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



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search