10 REM PLEASE SEND SUGGESTIONS FOR IMPROVEMENTS
20 REM OR INFO ON ANY BUGS DETECTED TO:
30 REM    DR. R. T. NICHOLS
40 REM    CALIFORNIA LUTHERAN COLLEGE
50 REM    THOUSAND OAKS,CALIFORNIA
60 REM
70 REM THIS PROGRAM UTILIZES 2ND ORDER RUNGE-KUTTA
80 REM
90 REM ADAPTED FOR XDS SIGMA 6 BY JOHN JOSEPH
100 REM AUGUST 21,1974
110 REM
120 PRINT
130 IF T1=0 THEN 180
140 PRINT
150 PRINT
160 PRINT TAB(25);"NEW START"
170 IF T1<0 THEN 270
180 PRINT TAB(25);"LUNAR LANDING"
190 PRINT
200 PRINT "WOULD YOU LIKE A DESCRIPTION OF THIS GAME(YES OR NO)";
210 INPUT A$
220 IF A$="YES" THEN 1520
230 IF A$="NO" THEN 260
240 PRINT "PLEASE ANSWER 'YES' OR 'NO'";
250 GO TO 210
260 LET O=0
270 LET G=3.438*10^-8
280 LET M=5.058*10^21
290 LET R=5.702*10^6
300 T2=10
310 PRINT
320 PRINT
330 LET X=4*10^6
340 Y=3.6*10^5
350 LET U=SQR(G*M/(R+Y))*R/(R+Y)
360 LET V=0
370 LET F=18000
380 PRINT TAB(23);"X";TAB(33);"Y";TAB(42);"X VEL";
390 PRINT TAB(52);"Y VEL";TAB(62);"FUEL"
400 PRINT TAB(22);"(FT)";TAB(32);"(FT)";TAB(41);"(FT/SEC)";
410 PRINT TAB(51);"(FT/SEC)";TAB(62);"(LB)"
420 LET U=U-15.20
430 PRINT TAB(20);INT(X+.5);TAB(30);INT(Y+.5);
440 PRINT TAB(40);INT(10*U+.5)/10;TAB(50);INT(10*V+.5)/10;
450 PRINT TAB(60);INT(F+.5)
460 IF Y=0 THEN 1290
470 LET U=U+15.20
480 IF F<1 THEN 1230
490 PRINT "THRUST(LB)";
500 INPUT T
510 PRINT "ANGLE(DEG)";
520 INPUT A
530 PRINT "TIME(SEC)";
540 INPUT T1
550 IF T1=-1 THEN 2620
560 IF T1=-2 THEN 1240
570 IF T1=0 THEN 490
580 IF T1>=1 THEN 610
590 PRINT "MINIMUM THRUST CONTROL TIME IS ONE SECOND"
610 LET A=A*3.1415927/180
620 IF T=0 THEN 710
630 IF T<1000 THEN 660
640 IF T<=6000 THEN 680
650 IF T=10000 THEN 680
660 PRINT "THRUST OUT OF RANGE"
670 GO TO 490
680 LET F2=F-T*T1/283.74
690 IF F2<0 THEN 2340
700 PRINT
710 LET N=INT(T1/T2)
720 LET T3=T2
730 FOR J=1 TO N
740 F2=F-T*T3/283.74
750 GOSUB 830
760 IF Y=0 THEN 420
770 NEXT J
780 LET T3=T1-N*T2
790 IF T3=0 THEN 420
800 LET F2=F-T*T3/283.74
810 GOSUB 830
820 GO TO 420
830 LET A0=32.18*T/(14000+F)
840 LET A1=A0*COS(A)*R/(R+Y)-2*U*V/(R+Y)
850 LET B1=A0*SIN(A)-G*M/(R+Y)^2+(R+Y)*(U/R)^2
860 LET Y1=Y-V*T3+B1*T3^2/2
870 LET V1=V-B1*T3
880 LET U1=U-A1*T3
890 LET A0=32.18*T/(41000+F2)
900 LET A2=A0*COS(A)*R/(R+Y1)-2*U1*V1/(R+Y1)
910 LET B2=A0*SIN(A)-G*M/(R+Y1)^2+(R+Y1)*(U1/R)^2
920 LET V2=V-(B1+B2)*T3/2
930 LET Y2=Y-(V+V2)*T3/2
940 REM *** TES IF Y<0 AT END OF TIME STEP
950 IF Y2<0 THEN 1400
960 REM *** IF Y VEL AT START<0 THEN Y HAS NO MINIMUM WITHIN TIME STEP
970 IF V<0 THEN 1010
980 REM *** IF Y VEL CHANGES SIGN WITHIN TIME STEP THEN
990 REM *** Y HAS A MINIMUM SOMETIME IN THE INTERVAL
1000 IF V2<0 THEN 1110
1010 LET U2=U-(A1+A2)*T3/2
1020 X=X+15.20*T3-(U+U2)*T3/2
1030 LET Y=Y2
1040 LET U=U2
1050 LET V=V2
1060 IF ABS(X)<3.14159*R THEN 1090
1070 LET X=X-SGN(X)*2*3.14159*R
1080 PRINT "CROSSED OPPOSITE SIDE OF MOON"
1090 LET F=F2
1100 RETURN
1110 IF B1=0 THEN 1140
1120 IF ABS((B2-B1)/B1)<.001 THEN 1200
1130 REM *** CALC TIME WHEN Y IS AT MINIMUM
1140 LET P=T3*B1/(B2-B1)
1150 LET Q=SQR(P^2+2*T3*V/(B2-B1))
1160 LET T0=SGN(P)*Q-P
1170 LET Y3=Y-V*T0/2
1190 GO TO 1010
1200 LET T0=V/B1
1210 LET T0=T0-(B2-B1)*T0^2/2/T3/B1
1220 GO TO 1170
1230 PRINT "*** OUT OF FUEL ***"
1240 LET K=(R+Y)^2*U/R
1250 LET E=U^2+V^2-2*G*M/(R+Y)
1260 LET C=SQR((1/(R+Y)-G*M/K/K)^2+(V/K)^2)
1270 LET R1=1/(C+G*M/K/K)
1280 GO TO 2410
1290 PRINT
1300 V=SQR(U^2+V^2)
1310 IF V>3 THEN 1370
1320 IF ABS(X)>100 THEN 1350
1330 PRINT "LANDED SAFELY ON TARGET *** CONGRATULATIONS"
1340 STOP
1350 PRINT "LANDED SAFELY BUT OFF TARGET *** MISSION UNSUCCESSFUL"
1360 GO TO 2620
1370 PRINT "CRASHED AT"INT(10*V+.5)/10" FT/SEC"
1380 GO TO 2620
1390 REM *** FIND WHEN Y=0 AND CALC X,U,V AS OF THAT TIME
1400 IF ABS((V2-V)/V) <0.001 THEN 1450
1410 LET P=T3*V/(V2-V)
1420 LET Q=SQR(P^2+2*T3*Y/(V2-V))
1430 LET T0=SGN(P)*Q-P
1440 GOTO 1470
1450 T0=Y/V
1460 LET T0=T0-(V2-V)*T0^2/2/T3/V
1470 LET Y=0
1480 LET X=X+15.20*T0-U*T0-(U2-U)*T0^2/2/T3
1490 LET U=U-A1*T0-(A2-A1)*T0^2/2/T3/V
1500 LET V=V-B1*T0-(B2-B1)*T0^2/2/T3
1510 GO TO 1060
1520 PRINT
1530 PRINT "     YOU ARE IN AN APOLLO XI LUNAR MODULE WEIGHING"
1540 PRINT "(ON EARTH) 14,000 LB AND CARRYING 18,000 LB OF FUEL."
1550 PRINT "YOU ARE IN A CIRCULAR ORBIT LOCATED IN THE MOON'S"
1560 PRINT "EQUATORIAL PLANE, TRAVELING IN THE DIRECTION OF THE MOON'S"
1570 PRINT "AXIAL ROTATION AT AN ALTITUDE OF APPROX. 68 MI."
1580 PRINT "     YOUR TARGET LIES ON THE EQUATOR A DISTANCE OF"
1590 PRINT "APPROX. 760 MI. AHEAD (GROUND DISTANCE). AS YOU PROCEED"
1600 PRINT "THE X VARIABLE WILL REPRESENT THE GROUND DISTANCE TO"
1610 PRINT "YOUR TARGET FROM A POINT DIRECTLY BELOW YOU ON THE LUNAR"
1620 PRINT "SURFACE, MEASURED POSITIVELY TOWARD THE INITIAL POSITION."
1640 PRINT "     THE X VELOCITY IS YOUR GROUND VELOCITY MEASURED"
1650 PRINT "POSITIVELY IN YOUR INITIAL DIRECTION WHILE THE Y VELOCITY"
1660 PRINT "IS YOUR RATE OF DESCENT IN ALTITUDE."
1670 PRINT
1680 PRINT "END OF PAGE,HIT RETURN";
1690 INPUT K
1700 PRINT
1710 PRINT "     THE VARIABLES AT YOUR CONTROL ARE THRUST,ANGLE"
1720 PRINT "(OF THRUST), AND TIME(DURATION OF THRUST)."
1730 PRINT "     THE THRUST CAN TAKE ON ONLY CERTAIN RESTRICTED"
1740 PRINT "VALUES AS IN THE CASE OF THE APOLLO XI LUNAR MODULE."
1750 PRINT "THESE VALUES ARE: ZERO, 1000 THRU 6000 LBS, OR 10000 LBS."
1760 PRINT "     THE ANGLE CAN BE SET AT ANY VALUE FROM 0 TO 360 DEG."
1770 PRINT "A ZERO ANGLE REPRESENTS A TANGENTIAL THRUST IN THE INITIAL"
1780 PRINT "BACKWARD DIRECTION WHILE A 90 DEGREE ANGLE REPRESENTS AN"
1790 PRINT "UPWARD THRUST DIRECTION."
1800 PRINT "     THE TIME VARIABLE SETS THE LENGTH OF TIME THAT THIS"
1810 PRINT "THRUST VALUE IS TO BE MAINTAINED BY THE ROCKET ENGINE."
1820 PRINT "NEW VALUES OF POSITION AND VELOCITY ARE CALCULATED AS OF"
1830 PRINT "THE END OF THIS TIME INTERVAL AND PRESENTED FOR YOU TO"
1840 PRINT "DECIDE ON FURTHUR GUIDANCE VIA THESE CONTROL VARIABLES."
1850 PRINT "THE AMOUNT OF FUEL REMAINING IS ALSO PRESENTED AT THIS"
1860 PRINT "TIME AS A FACTOR FOR CONSIDERATION. YOUR SPACE VEHICLE"
1870 PRINT "CONSUMES FUEL AT A RATE OF ONE LB. OF FUEL PER SECOND"
1880 PRINT "PER 283.74 LB OF THRUST."
1890 PRINT
1900 PRINT "END OF PAGE,HIT RETURN";
1910 INPUT K
1920 PRINT
1930 PRINT "YOU MAY GET A COURSE READING ANY TIME BY ENTERING"
1940 PRINT "A -2 VALUE IN THE TIME SLOT. IF A VALUE OF -1 IS"
1950 PRINT "ENTERED FOR THE TIME THE SIMULATION WILL BE ABORTED."
1970 PRINT "WITH DATA ABOUT SPEED AND DISTANCE FROM THE TARGET"
1980 PRINT "AT THE TIME OF IMPACT. IF YOU RUN OUT OF FUEL,"
1990 PRINT "THIS WILL BE RECORDED AFTER WHICH YOU MAY EITHER CRASH,"
2000 PRINT "OR GO INTO ORBIT WITH NO NAVIGATING POWER."
2010 PRINT "     THE MODULE IS CONSIDERED TO BE LANDED SAFELY IF"
2020 PRINT "IT REACHES THE LUNAR SURFACE (Y=0) WITH SPEED LESS"
2030 PRINT "THAN 3 FT/SEC. THE LANDING MUST BE WITHIN 100 FT OF THE"
2040 PRINT "TARGET BEFORE THE MISSION IS CONSIDERED TO BE SUCCESSFUL."
2050 PRINT "     YOU ARE NOW AT THE CONTROLS. GOOD LUCK!!!!!"
2060 PRINT
2070 PRINT "DO YOU NEED MORE DETAILED DIRECTIONS (YES OR NO)";
2080 INPUT A$
2090 IF A$="NO" THEN 260
2100 IF A$="YES" THEN 2130
2110 PRINT "PLEASE ANSWER 'YES' OR 'NO'";
2120 GO TO 2080
2130 PRINT
2140 PRINT "         HOW TO DETERMINE DIRECTIONS"
2150 PRINT "+-----------------------------------------------+"
2160 PRINT "!                                               !"
2170 PRINT "!                 90 DEGREES                    !"
2180 PRINT "!                     ^                         !"
2190 PRINT "!                     !                         !"
2200 PRINT "!   DIRECTION         !                         !"
2210 PRINT "!   OF TRAVEL     *********                     !"
2220 PRINT "!                 * LUNAR *                     !"
2230 PRINT "!   <---------    *       *   ---------->       !"
2240 PRINT "!    180 DEGREES  *MODULE *    0 DEGREES        !"
2250 PRINT "!                 *********                     !"
2260 PRINT "!               /     !                         !"
2270 PRINT "!             /       !                         !"
2290 PRINT "!   TO   !/_      270 DEGREES                   !"
2300 PRINT "! TARGET     (THRUST DOWNWARD)                  !"
2310 PRINT "! (MOON)                                        !"
2320 PRINT "+-----------------------------------------------+"
2330 GO TO 260
2340 LET T1=283.74 * F / T
2350 LET F2=0
2360 PRINT "FUEL LIMITATION"INT(10*T1+.5)/10" SEC OF THRUST"
2370 GO TO 710
2380 LET T1=10^5
2390 LET T=0
2400 GO TO 710
2410 IF E<0 THEN 2490
2420 IF R1>R THEN 2440
2430 IF V>0 THEN 2500
2440 PRINT "IN ESCAPE TRAJECTORY *****"
2450 PRINT "NEAR POINT IS" R1-R" FT ABOVE LUNAR SURFACE"
2460 PRINT
2470 IF F<1 THEN 2620
2480 GO TO 490
2490 IF R1>R THEN 2550
2500 PRINT "ON CRASH COURSE *****"
2510 PRINT "NEAR POINT IS"R1-R" FT BELOW LUNAR SURFACE"
2520 PRINT
2530 IF F<1 THEN 2380
2540 GO TO 490
2550 PRINT "IN STABLE ORBIT"
2560 PRINT "NEAR POINT IS"R-R1" FT ABOVE LUNAR SURFACE"
2570 LET R2=1/(G*M/K/K-C)
2580 PRINT "FAR POINT IS"R2-R" FT ABOVE LUNAR SURFACE"
2590 PRINT
2600 IF F<1 THEN 2620
2610 GO TO 490
2620 PRINT
2630 PRINT "BOY, I'M GLAD YOU'RE NOT WORKING FOR NASA!"
2640 PRINT "WANT ANOTHER GO AT IT (YES OR NO)";
2650 INPUT A$
2660 IF A$="NO" GO TO 1340
2670 IF A$="YES" GO TO 130
2680 PRINT "PLEASE ANSWER 'YES' OR 'NO'";
2690 GO TO 2650
2700 END
