Documents

pursuit_f90.txt

Categories
Published
of 3
All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.
Related Documents
Share
Description
!******************************************************************************* **************************************************** ! ! P U R S U I T ! ! Program: PURSUIT ! ! Programmer: David G. Simpson (based on HP-25 program by Larry L. Simpson) ! Laurel, Maryland ! ! Date: September 24, 2006 ! ! Language: Fortran-90 ! ! Version: 1.00a ! ! Description: This is a Fortran version of the orig
Transcript
  !***********************************************************************************************************************************!! P U R S U I T!! Program: PURSUIT!! Programmer: David G. Simpson (based on HP-25 program by Larry L. Simpson)! Laurel, Maryland!! Date: September 24, 2006!! Language: Fortran-90!! Version: 1.00a!! Description: This is a Fortran version of the srcinal game Pursuit for the HP-25 calculator by! L.L. Simpson, Dec. 1976.!! Files: Source file:!! pursuit.f90 Main program!! Notes: You are in pursuit of a faster ship that is spotted when 566 m from your ship. You fire! torpedoes at it but it maneuvers to avoid being hit. When it is 1000 m from you, it is! out of range of the torpedoes. When given an indication of the error in your aim, you! correct the angle and fire a torpedo. If you score a hit (within 5 m of target), the! program displays Hit! . If the ship is out of range, Out of range is displayed.!!*********************************************************************************************************************************** PROGRAM PURSUIT IMPLICIT NONE DOUBLE PRECISION, PARAMETER :: PI = 3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803D0 REAL, PARAMETER :: X0 = 400.0 REAL, PARAMETER :: Y0 = X0 REAL, PARAMETER :: DIST_ERROR = 5.0 REAL, PARAMETER :: DIR_ERROR = DIST_ERROR * 180.0/PI REAL, PARAMETER :: RANGE = 1000.0 REAL :: RN, R, THETA, X, Y, THETA0, THETA_ERR, CORR CHARACTER :: ANS!-----------------------------------------------------------------------------------------------------------------------------------!! Print introductory message.  ! WRITE (UNIT=*, FMT='(/A)') ' Welcome to Pursuit. You are in pursuit of a faster ship that' WRITE (UNIT=*, FMT='(A)') ' is spotted when 566 m from your ship. You fire torpedoes at' WRITE (UNIT=*, FMT='(A)') ' it but it maneuvers to avoid being hit. When it is 1000 m' WRITE (UNIT=*, FMT='(A)') ' from you, it is out of range of the torpedoes. When given an' WRITE (UNIT=*, FMT='(A)') ' indication of the error in your aim, you correct the angle' WRITE (UNIT=*, FMT='(A)') ' and fire a torpedo. If you score a hit (within 5 m of target),' WRITE (UNIT=*, FMT='(A)') ' the program displays Hit! . If the ship is out of range, ' WRITE (UNIT=*, FMT='(A)') ' Out of range is displayed.'!! Initialize data.! CALL RANDOM_SEED ! initialize random number seed 10 X = X0 ! initialize data Y = Y0 THETA0 = 45.0 DO ! begin main loop CALL RANDOM_NUMBER (RN) ! generate random number between 0 and 1 X = X + RN*100.0 ! X coordinate of target CALL RANDOM_NUMBER (RN) ! generate random number between 0 and 1 Y = Y + RN*100.0 ! Y coordinate of target R = SQRT(X**2+Y**2) ! distance to target IF (R .GT. RANGE) THEN ! check if out of range WRITE (UNIT=*, FMT='(A)') ' Out of range.' EXIT END IF THETA = ATAN2(Y,X) * 180.0/PI ! direction to target THETA_ERR = THETA0 - THETA ! direction error IF (R*ABS(THETA_ERR) .LE. DIR_ERROR) THEN ! check if hit   WRITE (UNIT=*, FMT='(A)') ' Hit!' EXIT END IF WRITE (UNIT=*, FMT='(/A,F7.2,A)') ' Range: ', R, ' meters' ! print range to target WRITE (UNIT=*, FMT='(A,F7.2,A)') ' Error: ', THETA_ERR, ' degrees' ! print direction error WRITE (UNIT=*, FMT='(A)', ADVANCE='NO') ' Enter correction (deg): ' ! get user input (correction) READ (UNIT=*, FMT=*) CORR CALL RANDOM_NUMBER (RN) ! generate random number between 0 and 1 THETA0 = THETA0 + CORR + RN ! compute torpedo direction END DO ! end main loop WRITE (UNIT=*, FMT='(/A)', ADVANCE='NO') ' Play again? (Y/N): ' ! ask if player wants to play again READ (UNIT=*, FMT=*) ANS IF ((ANS .EQ. 'Y') .OR. (ANS .EQ. 'y')) GO TO 10 STOP END PROGRAM PURSUIT
We Need Your Support
Thank you for visiting our website and your interest in our free products and services. We are nonprofit website to share and download documents. To the running of this website, we need your help to support us.

Thanks to everyone for your continued support.

No, Thanks