10 REM PROGRAM: LEM.BS5 20 REM FROM CREATIVE COMPUTING-NOV-DEC 1976 30 PRINT: REM AUTHOR UNKNOWN 100 PRINT TAB(15);"THIS IS A LUNAR LANDING PROGRAM": PRINT 110 PRINT "DO YOU WISH INSTRUCTIONS?"; 120 INPUT " (1=Yes, 0=No) --=>"V9 130 IF V9=0 THEN 330 140 PRINT "THIS IS THE LANDING ZONE" 150 PRINT TAB(10);"^ Y-AXIS (+)" 160 FOR I=1 TO 4 170 PRINT TAB(10);"I" 180 NEXT I 190 PRINT "----------+----------> X AXIS (+)" 200 FOR I=1 TO 5 210 PRINT TAB(10);"I" 220 NEXT I 230 PRINT "THE POSITIVE Z-AXIS IS OUT OF THE PAPER. YOU ARE TRYING" 240 PRINT "TO LAND ON THE CROSS. YOU HAVE CONTROL OF YOUR VERTICAL(Z)," 260 PRINT " HORIZONTAL(Y) AND TRANSVERSE(X) VELOCITYS. YOU ALSO HAVE" 270 PRINT "THE ADDITIONAL ABILITY TO CONTROL TIME OF BURN." 280 PRINT "YOU WILL SUPPLY ALL INITIAL DATA. ALL UNITS ARE METRIC." 300 PRINT 330 PRINT "Enter INITIAL ALTITUDE"; 340 INPUT " --=>"A3 350 PRINT "INITIAL VERTICAL VELOCITY"; 360 INPUT " --=>"V6 370 PRINT "INITIAL DISTANCE Y"; 380 INPUT " --=>"D4 390 PRINT "INITIAL Y VELOCITY"; 400 INPUT " --=>"V4 410 PRINT "INITIAL DISTANCE X"; 420 INPUT " --=>"D5 430 PRINT "INITIAL X VELOCITY"; 440 INPUT " --=>"V5 450 PRINT "MAXIMUM BURN RATE"; 460 INPUT " --=>"M 470 PRINT "AMOUNT OF FUEL"; 480 INPUT " --=>"F3 490 PRINT "GRAVITATIONAL CONSTANT"; 500 INPUT " --=>"G 505 PRINT: PRINT " 0 Random name" 512 FOR N1=1 TO 9: PRINT " ";N1;" ";: GOSUB 2500: PRINT: NEXT N1 515 PRINT "NAME OF YOUR LANDER?"; 520 INPUT " (0 TO 9) --=>"N1 530 PRINT 540 PRINT "CONTROL TO ";: GOSUB 2500: PRINT " COMMENCE LANDING." 550 GOSUB 1900 560 V=V6 570 V1=V4 580 V2=V5 590 T=0 600 F=F3 610 A=A3 620 D1=D4 630 D2=D5 640 T3=T3+T 650 GOSUB 2080 660 PRINT "TIME =";T3;" SECONDS." 670 PRINT "ALTITUDE = ";A;" METRES. VELOCITY = ";V;" METRES/SECOND." 680 PRINT "DIST. X = ";D2;" METRES. VELOCITY X = ";V2;" METRES/SECOND." 690 PRINT "DIST. Y = ";D1;" METRES. VELOCITY Y = ";V1;" METRES/SECOND." 700 PRINT "FUEL = ";F;" UNITS" 705 PRINT 710 PRINT "TIME INTERVAL"; 720 INPUT " --=>"T 730 PRINT "VERTICAL BURN"; 740 INPUT " --=>"B 750 PRINT "TRANSVERSE(X) BURN"; 760 INPUT " --=>"B2 770 B2=-B2 780 PRINT "HORIZONTAL(Y) BURN"; 790 INPUT " --=>"B1 800 B1=-B1 810 PRINT 820 GOTO 1340 830 F1=F 840 A1=A 850 IF F<=0 THEN 1190 860 A=A-V*T-((G-B)*T)/2 870 IF A<=0 THEN 910 880 V=V+(G-B)*T 890 GOSUB 2010 900 GOTO 640 910 G1=G-B 920 T1=((-2*V)+SQR(ABS(4*ABS(V*V)+8*A1*G)))/(2*G) 930 V=V+(G1*T1) 940 GOSUB 2010 950 T4=T3+T1 960 IF V<3GOTO 990 970 PRINT "AT TIME=";T4;" THE ";: GOSUB 2500: PRINT " CRASHED WITH A DESCENT "; 971 PRINT "VELOCITY OF ";V; " METRES/SECOND" 972 PRINT "IT WAS AT (";D2;",";D1;")," 973 PRINT (SQR(ABS(V1*V1)+ABS(V2*V2)));" METRES FROM THE"; 974 PRINT " LANDING SITE." 975 GOTO 1800 980 GOTO 1000 990 PRINT "AT TIME=";T4;" THE ";: GOSUB 2500: PRINT " LANDED WITH A DESCENT "; 1000 PRINT "VELOCITY OF ";V;" METRES/SECOND" 1010 R=SQR(ABS(V1*V1)+ABS(V2*V2)) 1020 IF R>5 THEN 1050 1030 PRINT "AND A HORIZONTAL VELOCITY OF ";R; " METRES/SECOND" 1040 GOTO 1080 1050 P9=1 1060 PRINT "AND FLIPPED OVER WITH A HORIZONTAL VELOCITY" 1065 PRINT "OF ";R;" METRES/SECOND" 1070 P9=1 1080 PRINT "THE LANDING POINT WAS (";D2;",";D1;")" 1090 D=SQR(D1*D1+D2*D2) 1100 IF R<=5 THEN 1140 1110 PRINT D;" METRES FROM THE LANDING SITE." 1120 GOTO 1790 1130 IF P9=1 THEN 1790 1140 IF D>100 THEN 1170 1150 PRINT "BEAUTIFUL ";: GOSUB 2500: PRINT ". YOU WERE ";D;" METRES FROM THE" 1155 PRINT "LANDING SITE." 1160 GOTO 1790 1170 PRINT "GOOD LANDING ";: GOSUB 2500: PRINT ", BUT YOU WERE ";D; " METRES OFF." 1180 GOTO 1790 1190 T=F1/(ABS(B)+ABS(B1)+ABS(B2)) 1200 A=A-(V*((G-B)/2)) 1210 V=V+(G-B) 1220 T1=((-2*V)+SQR(ABS(4*ABS(V*V)+8*A1*G)))/(2*G) 1230 V=V+G*T1 1240 GOSUB 2010 1250 LET D1=D1+V1*(T1-T) 1260 LET D2=D2+V2*(T1-T) 1270 IF V<3GOTO 950 1280 LET T4=T3+T1 1290 PRINT "THE ";: GOSUB 2500: PRINT " CRASHED AT ";T4; " SECONDS AT THE" 1295 PRINT "POINT (";D2;",";D1;")" 1300 LET R=SQR(V1*V1+V2*V2) 1310 PRINT "WITH A DOWNWARD VELOCITY OF ";V;", AND A FORWARD" 1315 PRINT "VELOCITY OF ";P 1320 PRINT "CRASH DUE TO LACK OF FUEL." 1330 GOTO 1790 1340 IF ABS(B)<=M THEN 1400 1350 IF B<0 THEN 1380 1360 B=M 1370 GOTO 1390 1380 B=-M 1390 Z=Z+1 1400 IF ABS(B1)<=M THEN 1460 1410 IF B1<0 THEN 1440 1420 B1=M 1430 GOTO 1450 1440 B1=-M 1450 Z1=Z1+1 1460 IF ABS(B2)<=M THEN 1520 1470 IF B2<0 THEN 1500 1480 B2=M 1490 GOTO 1510 1500 B2=-M 1510 Z2=Z2+1 1520 F=F-((ABS(B)+ABS(B1)+ABS(B2))*T) 1530 IF Z=1 THEN 1600 1540 IF Z=2 THEN 1780 1550 IF Z1=1 THEN 1660 1560 IF Z1=2 THEN 1780 1570 IF Z2=1 THEN 1720 1580 IF Z2=2 THEN 1780 1590 GOTO 840 1600 IF B=0 THEN 1550 1610 E=E-1 1620 IF E=0 THEN 1780 1630 GOSUB 1880 1640 PRINT "VERTICAL ENGINE WILL BLOW IN ";E;" BURN(S)" 1650 GOTO 1550 1660 IF B1=0 THEN 1570 1670 E1=E1-1 1680 IF E1=0 THEN 1780 1690 GOSUB 1880 1700 PRINT "HORIZONTAL ENGINE WILL BLOW IN ";E1;" BURN(S)" 1710 GOTO 1570 1720 IF B2=0 THEN 840 1730 E2=E2-1 1740 IF E2=0 THEN 1780 1750 GOSUB 1880 1760 PRINT "TRANSVERSE ENGINE WILL BLOW IN ";E2;" BURN(S)" 1770 GOTO 840 1780 PRINT " BANG!!!!" PRINT: PRINT "...AN ENGINE BLEW.": PRINT ,"*** YOU BLEW UP! ***" 1790 PRINT 1800 PRINT "WOULD YOU LIKE TO TRY AGAIN?"; 1810 INPUT " (1=Yes, 0=No) "V9 1820 IF V9=0 THEN 1870 1830 PRINT "SAME INITIAL VALUES?"; 1840 INPUT " (1=Yes, 0=No) "V9 1850 IF V9=1 THEN 530 1860 GOTO 320 1870 GOTO 2900 1880 PRINT "*******"; 1890 RETURN 1900 T3=0 1910 Z=0 1920 Z1=0 1930 Z2=0 1940 E=11 1950 E1=11 1960 E2=11 1970 P9=0 1980 RETURN 2010 V7=V1-B1*T 2020 D1=D1+(V1*T)+(T*(V1-V7))/2 2030 V8=V2-B2*T 2040 D2=D2+(V2*T)+(T*(V2-V8))/2 2050 V1=V7 2060 V2=V8 2070 RETURN 2080 IF A>100 THEN 2410 2090 IF D2>50 THEN 2410 2095 IF D2<-50 THEN 2410 2100 IF D1>50 THEN 2410 2105 IF D1<-50 THEN 2410 2110 Q1=INT(D2/10+.5) 2120 Q2=INT(D1/10+.5) 2130 FOR Q=5 TO -5 STEP -1 2140 IF Q=0 THEN 2180 2150 IF Q=Q1 THEN 2330 2160 PRINT TAB(10);"I" 2170 GOTO 2400 2180 IF Q1=0 THEN 2210 2190 PRINT "----------+----------" 2200 GOTO 2400 2210 FOR Q3=-5 TO 5 STEP .5 2220 IF Q3=0 THEN 2260 2230 IF Q3=Q2 THEN 2290 2240 PRINT "-"; 2250 GOTO 2300 2260 IF Q2=0 THEN 2290 2270 PRINT "+"; 2280 GOTO 2300 2290 PRINT "X"; 2300 NEXT Q3 2310 PRINT " " 2320 GOTO 2400 2330 IF Q2<0 THEN 2370 2340 IF Q2>0 THEN 2390 2350 PRINT TAB(10);"X" 2360 GOTO 2400 2370 PRINT TAB((Q2+6)*2-2);"X";TAB(10);"I" 2380 GOTO 2400 2390 PRINT TAB(10);"I";TAB((Q2+6)*2-2);"X" 2400 NEXT Q 2405 INPUT " (Enter any number to see more) --=>"V9 2410 RETURN 2500 REM ... Code to do PRINT "NAME?"; : INPUT N$ 2505 IF N1=0 THEN N1=INT(RND(0)*10)+1 2510 IF N1=1 THEN PRINT "Lunar Simulator";: RETURN 2520 IF N1=2 THEN PRINT "Prototype 1";: RETURN 2530 IF N1=3 THEN PRINT "Rocket Man";: RETURN 2540 IF N1=4 THEN PRINT "Lander ";N2;: RETURN 2550 IF N1=5 THEN PRINT "Module ";N2;: RETURN 2560 IF N1=6 THEN PRINT "Captain";: RETURN 2570 IF N1=7 THEN PRINT "Commander";: RETURN 2580 IF N1=8 THEN PRINT "Lunar Pilot";: RETURN 2590 IF N1=9 THEN PRINT "Jack";: RETURN 2595 PRINT "Lunar 4";: RETURN 2900 END