10 REM ASTRO.ECB 100 REM ...... 3 ASTRONAUT GAMES (COMBINED) RALPH HOPKINS 12-01-78 110 REM ....... LAST CHANGE 12-06-78 120 DIM M2$(30),M7$(35),N$(12),P(50,15) 130 DATA "Y","N"," MILES"," *** TYPE AN -A- TO CONTINUE *** " 140 DATA "APOGEE","PERIGEE","+",".","*","#" 150 DATA " CLOSEST APPROACH TO TARGET WAS "," SEC.","NOW","AND " 160 READ Y$,Y2$,M1$,M2$,A$,B$ 170 READ M3$,M4$,M5$,M6$,M7$,M8$,M9$,A9$ 180 PRINT "&K&J" 190 PRINT TAB(15);"***********************" 200 PRINT TAB(15);"*** ASTRONAUT GAMES ***" 210 PRINT TAB(15);"***********************" 220 PRINT 230 PRINT " 1 ... APOLLO" 240 PRINT " 2 ... ASTRO-NUT" 250 PRINT " 3 ... RENDEVEOUS (WITH A SPACECRAFT)" 260 PRINT 270 PRINT 280 PRINT 290 PRINT "*** PICK A GAME (1-3) ---=>"; 300 INPUT (1,0)X 310 PRINT 320 LET X=INT(X) 330 IF X<1 OR X>3 THEN 180 ELSE PRINT 340 ON X GOTO 1000,4000,6000 350 REM ... 360 REM ... 1000 REM ...==== PROGRAM NAME: LUNAR1 (APOLLO 7/23/77) 1010 REM ...==== COPYRIGHT 1970 BY WILLIAM P. LABARRE II 1020 REM ...==== 621 OAKLEY PLACE ALEXANDRIA VIRGINIA 22302 1030 REM ...==== TEL. NO. 703/549-4654 ALL RIGHTS RESERVED 1040 REM ...==== IN ANY DIALECT OR COMBINATION OF DIALECTS IN 1050 REM ...==== THE *BASIC* ALGORITHMIC LANGUAGE. 'LUNAR1' 1060 REM ...==== IS AN INTERACTIVE GAME THAT SIMULATES A LUNAR 1070 REM ...==== LANDING SIMILAR TO THAT OF THE APOLLO PROGRAM. 1080 REM ...==== THERE IS ABSOLUTELY NO CHANCE INVOLVED. 1090 LET Z$=M1$ 1100 LET B1=1 1110 LET M=17.95 1120 LET F1=5.25 1130 LET N=7.5 1140 LET R0=926 1150 LET V0=1.29 1160 LET T=0 1170 LET H0=60 1180 LET R=R0+H0 1190 LET A=-3.425 1200 LET R1=0 1210 LET A1=8.84361E-04 1220 LET R3=0 1230 LET A3=0 1240 LET M1=7.45 1250 LET M0=M1 1260 LET B=750 1270 LET T1=0 1280 LET F=0 1290 LET P=0 1300 LET N=1 1310 LET M2=0 1320 LET S=0 1330 LET C=0 1340 IF Z$=Y$ THEN 3470 1350 PRINT TAB(10);"<=- A P O L L O -=>" 1360 PRINT 1370 PRINT "LUNAR LANDING SIMULATION" 1380 PRINT 1390 PRINT "HAVE YOU FLOWN ON AN APOLLO/LEM MISSION BEFORE? (Y OR N) "; 1400 INPUT (1,0)Q$ 1410 IF Q$=Y$ THEN 1440 1420 IF Q$=Y2$ THEN 1470 1430 GOTO 1470 1440 PRINT 1450 PRINT "ENTER MEASUREMENT OPTION NUMBER"; 1460 GOTO 1490 1470 PRINT 1480 PRINT "WHICH SYSTEM OF MEASUREMENT DO YOU PREFER?" 1490 PRINT " 1=Metric 0=English" 1500 PRINT "ENTER THE APPROPRIATE NUMBER"; 1510 INPUT (1,0)K 1520 PRINT 1530 IF K=0 THEN 1620 1540 IF K=1 THEN 1560 1550 GOTO 1500 1560 LET Z=1852.8 1570 LET M$=" METERS" 1580 LET G3=3.6 1590 LET N$=" KILOMETERS" 1600 LET G5=1000 1610 GOTO 1670 1620 LET Z=6080 1630 LET M$=" FEET" 1640 LET G3=.592 1650 LET N$=" N.MILES" 1660 LET G5=Z 1670 IF B1=3 THEN 2540 1680 IF Q$=Y$ THEN 2200 ELSE PRINT "&K" 1690 PRINT 1700 PRINT " YOU ARE ON A LUNAR LANDING MISSION. AS THE" 1710 PRINT " PILOT OF THE LUNAR EXCURSION MODULE, YOU WILL" 1720 PRINT " BE EXPECTED GIVE CERTAIN COMMANDS TO THE" 1730 PRINT " MODLE NAVIGATION SYSTEM. THE ON-BOARD" 1740 PRINT " COMPUTOR WILL GIVE A RUNNING ACCOUNT OF" 1750 PRINT " INFORMATION NEEDED TO NAVIGATE THE SHIP." 1760 PRINT 1800 PRINT " THE ATTITUDE ANGLE CALLED FOR" 1810 PRINT " IS DESCRIBED AS FOLLOWS:" 1820 PRINT "+ OR -180 DEGREES IS DIRECTLY AWAY FROM THE MOON" 1830 PRINT " -90 DEGREES IS ON A TANGENT IN THE DIRECTION" 1840 PRINT " OF ORBIT. 90 DEGREES IS ON THE TANGENT FROM" 1860 PRINT " 0 (ZERO) DEGREES IS DIRECTLY TOWARD THE MOON." 1870 PRINT 1880 PRINT M2$; 1890 INPUT (1,0)I$ 1900 PRINT "&K&J&J" 1910 PRINT TAB(30);-180;180 1920 PRINT TAB(34);"^" 1930 PRINT TAB(29);"-90<-+->90" 1940 PRINT TAB(34);"!" 1950 PRINT TAB(34);0 1960 PRINT TAB(23);"<< DIRECTION OF ORBIT <<" 1970 PRINT 1980 PRINT TAB(27);"SURFACE OF MOON" 1990 PRINT 2000 PRINT M2$; 2010 INPUT (1,1)I$ 2020 PRINT "&K&J" 2030 PRINT "ALL ANGLES BETWEEN -180 AND 180 DEGREES ARE ACCEPTED" 2040 PRINT "1 FUEL UNIT =1 SEC. AT MAX. THRUST" 2050 PRINT " ANY DISCREPANCIES ARE ACCOUNTED FOR IN THE" 2060 PRINT " USE OF FUEL FOR AN ATTITUDE CHANGE." 2070 PRINT " AVAILABLE ENGINE POWER:0(ZERO) AND ANY" 2080 PRINT " VALUE BETWEEN 10 AND 100 PERCENT" 2090 PRINT 2100 PRINT "NEGATIVE THRUST OR TIME IS PROHIBITED" 2110 PRINT 2120 PRINT "INPUT:TIME INTERVAL IN SECONDS------(T)" 2130 PRINT " PERCENTAGE OF THRUST----------(P)" 2140 PRINT " ATTITUDE ANGLE IN DEGREES-----(A)" 2150 PRINT 2160 PRINT M2$; 2170 INPUT (1,0)I$ 2180 PRINT "&K" 2190 IF Q$=Y$ THEN 2270 2200 PRINT "FOR EXAMPLE:" 2210 PRINT "<*> Enter T,P,A ---=>? 10,65,-60" 2220 PRINT "TO ABORT THE MISSION AT ANY TIME, ENTER 0,0,0" 2230 PRINT 2270 PRINT "OUTPUT:TOTAL TIME ELAPSED IN SECONDS" 2280 PRINT " HEIGHT IN ";M$ 2290 PRINT " DISTANCE FROM LANDING SITE IN ";M$ 2300 PRINT " VERTICAL VELOCITY IN ";M$;"/SECOND" 2310 PRINT " HORIZONTAL VELOCITY IN ";M$;"/SECOND" 2320 PRINT " FUEL UNITS REM AINING" 2330 PRINT 2340 GOTO 2540 2350 PRINT 2360 PRINT "<*> Enter T,P,A ---=>"; 2370 INPUT T1,F,P 2375 FOR X=1 TO 6: PRINT ".........";: NEXT X: PRINT : PRINT 2380 LET F=F/100: IF T1<10 THEN PRINT TAB(15);"** It will take 15 secs. **" 2390 IF T1<0 THEN 3010 2400 IF T1=0 THEN 3350 2410 IF ABS(F-.5)>.5 THEN 3070 2420 IF ABS(F-.05)<.05 THEN 3070 2430 IF ABS(P)>180 THEN 3040 2440 LET N=20 2450 IF T1<400 THEN 2470 2460 LET N=T1/20 2470 LET T1=T1/N 2480 LET P=P*3.14159/180 2490 LET S=SIN(P) 2500 LET C=COS(P) 2510 LET M2=M0*T1*F/B 2520 LET R3=R*A1^2-.5*R0*((V0/R)^2) 2530 LET A3=-2*R1*A1/R 2540 FOR I=1 TO N 2550 IF M1=0 THEN 2630 2560 LET M1=M1-M2 2570 IF M1>0 THEN 2650 2580 LET F=F*(1+M1/M2) 2590 LET M2=M1+M2 2600 PRINT "&J*** YOU ARE OUT OF FUEL&J" 2610 LET M1=0 2620 GOTO 2650 2630 LET F=0 2640 LET M2=0 2650 LET M=M-.5*M2 2660 LET R4=R3 2670 LET R3=-.5*R0*((V0/R)^2) 2676 LET R3=R3+R*A1^2 2680 LET R2=(3*R3-R4)/2+.00526*F1*F*C/M 2690 LET A4=A3 2700 LET A3=-2*R1*A1/R 2710 LET A2=(3*A3-A4)/2 2715 LET A2=A2+.00526*F1*F*S/(M*R) 2720 LET X=R1*T1+.5*R2*T1^2 2730 LET R=R+X 2740 LET H0=H0+X 2750 LET R1=R1+R2*T1 2760 LET A=A+A1*T1+.5*A2*T1^2 2770 LET A1=A1+A2*T1 2780 LET M=M-.5*M2 2790 LET T=T+T1 2800 IF H0<3.287828E-04 THEN EXIT 2820 2810 NEXT I 2820 LET H=H0*Z 2830 LET H1=R1*Z 2840 LET D=R0*A*Z 2850 LET D1=R*A1*Z 2860 LET T2=M1*B/M0 2865 PRINT "Time Height Land site Vert.V Horiz.V Fuel" 2870 PRINT T;TAB(4);%C12I;INT(H);TAB(18);INT(D); 2880 PRINT ;%+12F1;TAB(28);H1;TAB(38);D1;%D;TAB(56);INT(T2) 2890 IF H0<3.287828E-04 THEN 2960 2900 IF R0*A>164.4736 THEN 3270 2910 IF M1>0 THEN 2360 2920 LET T1=20 2930 LET F=0 2940 LET P=0 2950 GOTO 2440 2960 IF R1<-8.21957E-04 THEN 3210 2970 IF ABS(R*A1)>4.931742E-04 THEN 2350 2980 IF H0<-3.287828E-04 THEN 3210 2990 IF ABS(D)>10*Z THEN 3300 3000 GOTO 3170 3010 PRINT 3020 PRINT " THIS SHIP CAN'T VIOLATE THE SPACE-TIME CONTINUUM !!" 3030 GOTO 2350 3040 PRINT 3050 PRINT " IF YOU WANT TO SPIN AROUND, GO OUTSIDE THE MODULE FOR AN E.V.A." 3060 GOTO 2350 3070 PRINT 3080 PRINT "IMPOSSIBLE THRUST-VALUE "; 3090 IF F<0 THEN 3150 3100 IF F-.05<.05 THEN 3130 3110 PRINT "TOO LARGE" 3120 GOTO 2350 3130 PRINT "TOO SMALL" 3140 GOTO 2350 3150 PRINT "NEGATIVE" 3160 GOTO 2350 3170 PRINT 3180 PRINT "TRANQUILITY BASE HERE -- THE EAGLE HAS LANDED" 3190 PRINT "CONGRATULATIONS - THERE WAS NO SPACECRAFT DAMAGE" 3200 GOTO 3370 3210 PAUSE 30: PRINT "&K" 3220 FOR X=1 TO 40 3222 CURSOR INT(RND(0)*5)+1,INT(RND(0)*64)+1 3224 IF RND(0)>.6 THEN PRINT "*"; ELSE PRINT CHR(7); 3226 NEXT X 3228 CURSOR 4,15: PRINT "<*> C R A S H ! ! ! <*>";: CURSOR 7,1 3230 PRINT "YOUR IMPACT CREATED A CRATER: DEPTH = "; 3235 IF ABS(H)>25000 THEN LET M$=" MILES !": LET H=ABS(H/5280) 3240 PRINT %C15F1;INT(ABS(H));M$;%D 3245 LET X1=SQR(D1*D1+H1*H1)*G3: PRINT : LET X1=INT(X1) 3250 PRINT "AT CONTACT YOU WERE TRAVELLING .... about..." 3255 PRINT %C20F1;X1;%D;N$;"/HR." 3260 GOTO 3370 3270 PRINT 3280 PRINT "YOU OVERSHOT THE LANDING AREA" 3290 GOTO 3370 3300 PRINT 3310 PRINT "YOU ARE DOWN SAFELY -" 3320 PRINT 3330 PRINT "BUT MISSED THE LANDING SITE BY ";ABS(D/G5);N$ 3340 GOTO 3370 3350 PRINT 3360 PRINT "MISSION ABORTED" 3370 PRINT 3380 PRINT "DO YOU WANT TO FLY IT AGAIN? (YES OR NO)"; 3390 INPUT (1,0)Z$ 3400 IF Z$=Y$ THEN 1110 3410 IF Z$=Y2$ THEN 3430 3420 GOTO 3380 3430 PRINT 3440 PRINT " TOO BAD, THE SPACE PROGRAM HATES TO LOSE" 3450 PRINT " EXPERIENCED ASTRONAUTS." 3460 GOTO 3570 3470 PRINT 3480 PRINT " O.K......Pick one:" 3490 PRINT "1=COMPLETE INSTRUCTIONS 2=INPUT-OUTPUT STATEMENTS" 3500 INPUT (1,200)" 3=NEITHER ---=>",B1 3510 LET Q$=Y3$ 3520 IF B1=1 THEN 1470 3530 LET Q$=Y1$ 3540 IF B1=2 THEN 1440 3550 IF B1=3 THEN 1440 3560 GOTO 3490 3570 GOTO 7350 4000 REM ...====== LAST REVISED 07/20/77 R.E.H. 4010 LET A$="APOGEE" 4020 LET B$="PERIGEE" 4030 LET C=2.0E4 4040 LET A=5.5E3 4050 LET I=60 4060 LET B=120 4070 LET G=10 4080 LET K=3 4090 PRINT "&K&J *** A S T R O - N U T ***" 4100 PRINT 4110 PRINT " A MALFUNCTION HAS PROLONGED YOUR MISSION ON THE" 4120 PRINT " SPACESHIP TITAN 13, AND YOU NEED TO GET BACK DOWN FAST!" 4130 PRINT " YOUR OBJECT IS TO END UP WITH BOTH APOGEE" 4140 PRINT " AND PERIGEE BETWEEN 4000 AND 4100 MILES FROM" 4150 PRINT " THE CENTER OF THE EARTH, SO THAT YOU ARE JUST" 4160 PRINT " ABOVE THE ATMOSPHERE IN A NEARLY CIRCULAR" 4170 PRINT " ORBIT FROM WHICH YOU CAN MAKE FINAL RE-ENTRY." 4180 PRINT "&J";M2$; 4190 INPUT (1,0)G$ 4200 PRINT "&K YOU WILL CONTROL THE SPACESHIP BY TELLING" 4210 PRINT " ME WHEN AND HOW LONG TO FIRE THE ENGINES." 4220 PRINT " IF YOU GIVE ME A POSITIVE NUMBER FOR BURN TIME," 4230 PRINT " I WILL ASSUME RETRO-FIRE; IF YOU WANT FORWARD" 4240 PRINT " THRUST JUST GIVE A NEGATIVE NUMBER. YOUR FUEL" 4250 PRINT " IS LIMITED SO YOU MUST USE IT WISELY. " 4260 PRINT " BUT YOU MUST NOT BE TOO CAUTIOUS EITHER," 4270 PRINT " BECAUSE YOUR OXYGEN SUPPLY IS ALSO LIMITED AND" 4280 PRINT " YOU CANNOT TAKE FOREVER TO DECIDE ON YOUR MANEUVERS." 4285 PRINT "&J";M2$; 4290 INPUT (1,200)G$ 4300 PRINT "&K&J WITH THE HELP OF KEPLER AND NEWTON I WILL" 4310 PRINT " COMPUTE WHERE THE SPACESHIP GOES, HALF AN " 4320 PRINT " ORBIT AT A TIME. AFTER EACH STEP," 4330 PRINT " YOUR NEW STATUS WILL BE GIVEN THUS:" 4340 PRINT 4350 PRINT "ORB NO HI/LO RADIUS FUEL LEFT OXYGEN LEFT" 4360 PRINT 4370 PRINT 4380 PRINT " THIS WILL BE FOLLOWED BY INFORMATION IN" 4390 PRINT " PARENTHESES ABOUT WHERE THE NEXT HALF ORBIT" 4400 PRINT " WILL TAKE YOU IF YOU DO NOT FIRE EVERY SECOND" 4410 PRINT " YOU FIRE WILL CHANGE YOUR SPEED (M.P.H.) BY ";I 4420 PRINT "&J";M2$; 4430 INPUT (1,0)G$ 4440 PRINT 4450 PRINT "HERE IS YOUR STARTING POINT:" 4460 LET N=0 4470 LET L=0 4480 LET O=C 4490 LET S=A 4500 LET E=0.5*S*S-1.24E12/O 4510 LET J=S*O 4520 LET F=B 4530 LET H=G 4540 GOSUB 4990 4550 PRINT 4560 PRINT 4570 PRINT N;TAB(7);D$;INT(O);" MI";TAB(25);INT(S);" MPH"; 4580 PRINT TAB(38);F;M8$;TAB(48);H;" HR" 4590 PRINT 4600 PRINT " (";E$;" MI AFTER ";INT(P);" HR)" 4620 PRINT 4630 PRINT "NEXT BURN: NOW OR WAIT"; 4640 INPUT (1,0)C$ 4650 IF C$=Y2$ THEN 4720 4660 IF C$="W" THEN 4880 4670 GOSUB 5140 4680 PRINT " LET'S HAVE IT UNDERSTOOD THAT YOU PLAY THIS" 4690 PRINT " GAME ON MY TERMS!!! YOU MUST" 4700 PRINT " SAY EITHER 'NOW' OR 'WAIT'. TRY AGAIN" 4710 GOTO 4630 4720 PRINT "HOW MANY SECONDS" 4730 INPUT T 4740 PRINT 4750 LET F=F-ABS(T) 4760 IF F>=0 THEN 4820 4770 LET F=F+ABS(T) 4780 GOSUB 5140 4790 PRINT "LOOK MEATHEAD, I JUST GOT THROUGH TELLING YOU THERE'S NOT" 4800 PRINT "THAT MUCH FUEL. TRY AGAIN" 4810 GOTO 4720 4820 LET D=-I*T 4830 LET E=E+D*S+0.5*D*D 4840 IF E>0 THEN 5450 4850 LET J=J+O*D 4860 IF J>0 THEN 4870 4870 GOSUB 4990 4880 LET F$=D$ 4890 LET D$=E$ 4900 LET E$=F$ 4910 LET Q=O 4920 LET O=P 4930 LET P=Q 4940 LET S=J/O 4950 LET H=H-R 4960 IF H<0 THEN 5490 4970 LET N=N+0.5 4980 GOTO 4550 4990 LET M=-1.24E12/E 5000 LET R=SQR(-1.888E24/(E*E*E)) 5010 LET P=M-O 5020 IF P<4000 THEN 5280 5030 IF P>4100 THEN 5060 5040 IF O>4100 THEN 5060 5050 GOTO 5310 5060 IF F=0 THEN 5370 5070 IF P50 OR J<1 OR J>15 THEN 6740 6730 LET P(I,J)=1 6740 LET T1=N*D1*A5 6750 LET X1=R1*COS(T1) 6760 LET Y1=R1*SIN(T1) 6770 LET I=INT(26.5-X1/C) 6780 LET J=INT(Y1/E+1.5) 6790 IF I<1 OR J<1 OR I>50 OR J>15 THEN 6820 6800 IF P(I,J)=1 THEN 6820 6810 LET P(I,J)=2 6820 LET T2=N*D1*A6+P1-1.390398 6830 LET X2=R2*COS(T2) 6840 LET Y2=R2*SIN(T2) 6850 LET I=INT(26.5-X2/C) 6860 LET J=INT(Y2/E+1.5) 6870 IF I<1 OR I>50 OR J<1 OR J>15 THEN 6920 6910 LET P(I,J)=3 6920 LET T5=N*D1 6930 LET T2=T5*A6+P1-1.390398 6940 LET D=SQR(ABS((R^2)+(R2^2)-2*R*R2*COS(T2-T)))/5280 6950 IF D(F) OR ABS(T2-T)>F/R THEN 7020 6990 PRINT " TARGET ACQUIRED AT T=";T5;M8$ 7000 PRINT M7$;S;M1$ 7010 GOTO 7030 7020 NEXT N 7030 IF ABS(R2-R)>(F) OR ABS(T2-T)>F/R THEN 7050 7040 GOTO 7070 7050 PRINT " INCORRECT DELTA V--TARGET MISSED" 7060 PRINT M7$;S;M1$ 7070 FOR K=1 TO 50 STEP 2 7080 IF K=49 THEN 7110 7090 PRINT M3$; 7100 GOTO 7120 7110 PRINT M3$ 7120 NEXT K 7130 FOR J=1 TO 15 7140 FOR I=1 TO 50 7150 IF P(I,J)<1 OR P(I,J)>3 THEN 7170 7160 ON P(I,J) GOTO 7220,7240,7260 7170 IF I<>25 THEN 7200 7180 PRINT M3$; 7190 GOTO 7270 7200 PRINT " "; 7210 GOTO 7270 7220 PRINT M5$; 7230 GOTO 7270 7240 PRINT M4$; 7250 GOTO 7270 7260 PRINT M6$; 7270 IF I<50 THEN 7290 7280 PRINT 7290 REM ...=== CONTINUE EXECUTION. 7300 NEXT I 7310 NEXT J 7320 GOTO 6280 7330 GOTO 7340 7340 PRINT 7350 REM ..... 8000 PRINT "&J*#* Do you want to try a DIFFERENT game ?" 8010 INPUT (1,200)" (Y or N) ---=>",I$ 8020 IF I$=Y$ THEN 180 ELSE PRINT "&K" 8030 PRINT TAB(15);"*COMAND CENTRAL: Goodbye; Over and Out." 8040 LET Y=2: LET X=INT(RND(0)*30)+10: CURSOR 15,1 8045 FOR X=1 TO 6: PRINT "----===--";: NEXT X 8050 FOR Y=2 TO 15 8060 CURSOR Y,X: PRINT CHR(7);: PAUSE Y 8070 CURSOR Y,X: IF RND(0)>.5 THEN PRINT "."; ELSE PRINT "^"; 8080 IF Y>2 THEN CURSOR Y-1,X-1: PRINT " "; 8090 LET X=X+1 8100 NEXT Y 8110 CURSOR 6,6: PRINT "*#* B U M P *#*";: PAUSE 4 8120 CURSOR 6,6: PRINT " ";: CURSOR 15,1 8130 END