DEFINE(DIG0,48) # ASCII '0' PROGRAM DRIVER # # AUTHOR: DON LEDFORD # # DECEMBER 1978 JOHN LUTCH ADDED CLOAKING # DECEMBER 1978 DON LEDFORD ADDED ANTI-MATTER # MARCH 1979 RAY FRENCH ADDED CONTINUOUS DISPLAY # OCTOBER 1979 DON LEDFORD ADDED ROBOT SHIPS # MAY 1980 BILL CAEL AND BILL WOOD RECODED IN RATFOR # MAY 1980 BILL WOOD ADDED ENERGY NETS # JUN 1980 BILL WOOD ADDED RANDOM SHIP SERVICING ORDER # DEC 1980 BILL WOOD ADDED TRACTOR BEAMS # INCLUDE COMMON.RAT COMMON /ACCUM/ ACCUME COMMON /DOLOOP/ SHIPS INTEGER SHIPS(8) LOGICAL*1 ACCUME BYTE CHAR # CALL MARK(2,30,1,IDS) ACCUME=.TRUE. DO I = 1, 8 SHIPS(I) = I THRU=.FALSE. # # * HERE STARTS THE ACTUAL GAME PLAYING # REPEAT [ # # THE PLAYER TASKS NEED SOME CPU TIME TOO ! CALL WAITFR(2,IDS) CALL MARK(2,30,1,IDS) # # * FIRE TORPEDOES CALL TORPI # * FIRE PHASERS CALL PHASER # * HANDLE ALL ANTI-MATTER TRANSACTIONS CALL MANTI # * MOVE ACTIVE TORPEDOES CALL MTORPS # * MOVE HOMERS CALL MHOMER # * MOVE SHIPS CALL MSHIPS # * MOVE THE "BLACK HOLE" CALL MHOLE # # THE FOLLOWING CODE (IF UNCOMMENTED) WILL CHECK TO SEE # IF THERE ARE STILL ANY PLAYERS. IF NOT, IT WILL WAIT # 30 SECONDS AND THEN EXIT IF NO NEW PLAYERS HAVE STARTED. # DO J = 1,6 [ DO I = 1, 8 IF (SHPACT(I)) GOTO 10 CALL WAIT(5,2,M) ] THRU = .TRUE. 10 CONTINUE ] UNTIL (THRU) CALL EXIT END SUBROUTINE MOVE(XI,YI,XN,YN,D,W,CHAR,UNIV,EMPTCH) # # * MOVE OBJECTS WITH WRAP AROUND # BYTE CHAR,EMPTCH BYTE UNIV(100,100) YN=YI+SIN(D/57.29577951)/10.*W XN=XI+COS(D/57.29577951)/10.*W IXI=XI IYI=YI IF (XN >= 101.) [ XN=XN-100. ] ELSE IF (XN < 1.) [ XN=XN+100. ] IF (YN >= 101.) [ YN=YN-100. ] ELSE IF (YN < 1.) [ YN=YN+100. ] IXN=XN IYN=YN IF ((IXI != IXN) | (IYI != IYN)) [ CHAR=UNIV(IXN,IYN) ] ELSE [ # # * IF THEY DIDN'T MOVE OUT OF THE SQUARE THEY WERE IN JUST INDICATE # THAT THE PLACE THEY ENDED UP WAS EMPTY # CHAR=EMPTCH ] RETURN END SUBROUTINE SENT(I,NUM) # # * SEND MESSAGES TO THE PLAYERS # INCLUDE COMMON.RAT DO K=1 , 10 [ IF (ISENT(I,K) == 0) [ ISENT(I,K)=NUM GOTO 202 ] ] # * MESSAGE BUFFER IS FULL SO COPY IT UP TO KEEP MOST RECENT DO K=1, 9 [ ISENT(I,K)=ISENT(I,K+1) ] ISENT(I,10)=NUM 202 RETURN END SUBROUTINE PERM(SHIPS, I1, I2) # # PERM - SHUFFLE SHIPS # # DUE TO L. E. MOSES AND R. V. OAKFORD, AND # R. DURSTENFELD # TAKEN FROM KNUTH VOL 2, SEMINUMERICAL ALGORITHMS, P. 125 # INTEGER SHIPS(8), J, K, I1, I2, TMP DO J = 8, 2, -1 [ K = IFIX(FLOAT(J)*RAN(I1,I2)) + 1 TMP = SHIPS(K); SHIPS(K) = SHIPS(J); SHIPS(J) = TMP ] RETURN END # POLADD - ADD POLAR COORDINATES: D3, R3 = D1, R1 + D2, R2 # WPW 12/7/80 SUBROUTINE POLADD(D1, R1, D2, R2, D3, R3) PARAMETER PI = 3.141592654 RADD1 = D1*(PI/180.) #CONVERT DEGREES TO RADIANS RADD2 = D2*(PI/180.) XT = R1*COS(RADD1) + R2*COS(RADD2) YT = R1*SIN(RADD1) + R2*SIN(RADD2) D3 = ATAN3(YT, XT)*(180./PI) R3 = SQRT(XT*XT + YT*YT) RETURN END