10 REM LUNAR LANDER REVISITED 20 REM FOR A TRS-80 MODEL I LEVEL II, OR MODEL III 30 REM BY JOHN BERINGER 40 REM FROM 80 MICRO JUNE 1981 900 GD=0:BD=0 950 DIM STARS(7) :ST(1)=23:ST(2)=54 :ST(3)=79:ST(4)=105:ST(5)=133:ST(6)=162 : ST(7)=175 1000 CLS:PRINTCHR$(23);:PRINT@276,"REAL TIME":PRINT@400, "LUNAR LANDER":PRINT:PRINT"YOUR NAME, CAPTAIN";:INPUT NA$ 1100 CLS 1110 PRINT@28,"A L E R T !":PRINT:PRINT"EMERGENCY, CAPTAIN ";NA$:PRINT:PRINT"NAVIGATIONAL COMPUTER MALFUNCTION":PRINT:PRINT"YOU WILL HAVE TO LAND BY THE SEAT OF YOUR PANTS!":PRINT 1114 PRINT" < CAUSES LEFT LATERAL MOTION":PRINT" > CAUSES RIGHT LATERAL MOTION" 1115 PRINT"FUEL BURN RATE IS FROM 1 - 7; NO KEY IS ZERO BURN RATE" : PRINT "LAND AS NEAR THE BASE AS POSSIBLE":PRINT:PRINT"PRESS ANY KEY TO START" 1300 FOR N=1 TO 50:NEXT N:PRINT@28," ";:FOR N=1 TO 50:NEXT N:PRINT@28, "A L E R T !";:IF INKEY$="" GOTO 1300 2100 REM BUILD TERRAIN 2110 CLS:FOR X=0 TO 7:SET( X,44):NEXT X:FOR X=7 TO 9:SET (X ,43):NEXT X:FOR X=9 TO 19:SET(X, 44 ):NEXT X:FOR X=19 TO 23:SET(X,43):NEXT X:FOR X=23 TO 27:SET(X ,44):NEXT X:Y=44:FOR X=28 TO 38:SET(X,Y):SET(X+1,Y):Y=Y-1:NEXT X 2115 FOR X=39 TO 42:SET(X,34):NEXT X: SET(42,33):Y=33:FOR X=43 TO 50:SET (X,Y):SET (X+1, Y):Y=Y- 1:NEXT X:SET(51, 25) 2120 Y=26:FOR X=51 TO 54:SET(X,Y):SET(X+1,Y):Y=Y+1 :NEXT X:SET(56,29):SET(57,29):Y=29:FOR X=56 TO 65:SET(X, Y):SET(X+1,Y):Y=Y+1:NEXT X:SET(65,37):SET(66,37): 2121 Y=37:FOR X=67 TO 71:SET(X, Y):SET(X+1,Y):Y=Y-1:NEXT X:Y=33:FOR X=73 TO 75:SET (X, Y):SET (X+1,Y):Y=Y+1:NEXT X 2125 SET(77,35):SET (77, 36) :Y=36:FOR X=78 TO 81:SET(X,Y):SET(X+1,Y):Y=Y+1:NEXT X:Y=39:FOR X=82 TO 84:SET(X, Y):SET(X+1,Y):Y=Y+1:NEXT X:SET(86, 41) 2130 FOR X=86 TO 89:SET(X,42):NEXT X:FOR X=89 TO 93:SET(X,43):NEXT X:FOR X=93 TO 105:SET(X,44):NEXT X:FOR X=105 TO 119:SET(X,43):NEXT:FOR X=116 TO 118:SET(X,42):NEXT:FOR X=119 TO 127:SET(X,44):NEXT X 2150 FOR N=1 TO 7:PRINT@ST(N),".";:NEXT 2200 GRAV=6.4 2210 VEL=RND(50)+10 2220 TIME=.5:FUEL=700 2230 IF GD>4 FUEL=650 ELSE IF GD>9 FUEL=600 2250 PIC=0 2251 REM PIC= -1 BIT ON 2252 REM PIC= 0 BIT OFF 2253 REM PIC= 1 STaR 2560 LY=2:LY=2:X=2:ALT=430 2570 HI=0 2900 PRINT@960,"FUEL";:PRINT@975,"VELOCITY";:PRINT@995,"ALTITUDE";:PRINT@1017,"BASE"; 3000 IF FUEL>0 THEN GOTO 3100 ELSE BURN=0: GOTO 3900 3100 BURN=PEEK(14352)/2 3900 FUEL=INT (FUEL-BURN*TIME):IF FUEL<1 THEN FUEL=0 4000 PRINT@965,FUEL;:VEL=INT(VEL-BURN*TIME+GRAV*TIME*TIME) ::PRINT@984,VEL;:ALT=INT(ALT- VEL*TIME):IF ALT<1 THEN ALT=0 4001 PRINT@1004,ALT-10;:Y=43-INT(ALT/10) 4010 IF ALT>0 GOTO 4070 4011 IF Y<1 THEN Y=1 4012 IF VEL>15 GOTO 4050 ELSE IF VEL>5 GOTO 4039 4015 IF VEL<0 GOTO 4100 4019 IF Y=41 THEN Y=42 4020 RESET(LX,LY) :RESET(LX+1,LY-1):RESET(LX+2,LY) :SET(X,Y):SET(X+1,Y-1):SET(X+2,Y) 4022 IFLX>113ANDLX<121THENGOSUB9100:PRINT@851,"NICE LANDING, SPORT";:PRINT@915, "BUT YOU HIT THE BASE!";:GOTO 9200 ELSEIFLX>1190RLX<105THENPRINT@851,"NOT TOO BAD, BUT ITS ";:PRINT@915 ,"A LONG WALK HOME ! ";:GOTO 9200 4023 G=RND(2):ON G GOSUB 4025,4026,4027:GOTO 9300 4025 PRINT@851,"RIGHT ON THE MONEY!";:RETURN 4026 PRINT@851, "PROMOTION ON THE WAY !";:RETURN 4027 PRINT@851, "YOU'RE A NATURAL";: PRINT@915, "STAR PILOT";: RETURN 4039 IF Y=41 THEN Y=42 4040 RESET(LX,LY) :RESET(LX+1,LY-1):RESET(LX+2,LY):SET(X,Y+1):SET(X+1,Y):SET(X+1,Y+1):SET (X+2,Y+1 ) 4041 IF X>0 SET(X-1,Y) 4042 IF X<125 SET( X+3,Y) 4043 G=RND(3):ON G GOSUB 4045,4046,4047,4048 4044 IF LX>113 AND LX<121 THEN GOSUB 9100:PRINT@746 , "AND YOU HIT THE BASE!!";: GOTO 9200 ELSE GOTO 9200 4045 PRINT@851,"YOU SAVED THE CARGO";:PRINT@913,"BUT YOU SMASHED THE CREW!";:RETURN 4046 PRINT@851,"YOU SAVED THE CREW";:PRINT@913,"BUT YOU SMASHED THE CARGO!";:RETURN 4047 PRINT@851,"UFF! ";:PRINT@915,"SHE'LL NEVER FLY AGAIN!";:RETURN 4048 PRINT@851 ,"NOT SO GOOD,";:PRINT@915 ,"L I E U T E N A N T !!";:RETURN 4050 RESET(LX,LY):RESET(LX+1,LY-1):RESET(LX+2,LY):RESET(X+1,Y):Y=Y+1:SET(X,Y-1):SET(X+2,Y-1):RESET(X,Y):RESET(X+2,Y):RESET(X+1,Y-1) 4051 IF X>0 SET(X-1,Y-2) 4052 IF X<125 SET(X+3,Y-2) 4053 IF POINT(X+1,Y)=0 SET (X+1,Y)I 4055 PRINT@64,CHR$ (30);:IFX<28ORX>89PRINT"NOTE THE NEW LUNAR FORMATION...":PRINT"IT IS THE CRATER OF ";NA$:GOTO 9200 ELSEPRINT"COULDN'T YOU SEE THAT MOUNTAIN, ";NA$;"?":PRINT"WERE YOU TRYING TO DRILL A TUNNEL TO THE OTHER SIDE?";:GOTO 9200 4070 RESET(BX,BY):IF Y<0 GOTO 4150 ELSE IF POINT(X,Y+1)=-1 OR POINT(X+1,Y+1)=-1 OR POINT(X+2,Y+1)=-1 GOTO 9000 4100 RESET (BX,BY) 4150 IF Y<2 THEN RESET (LX, LY):RESET(LX+1,LY- 1):RESET(LX+2,LY) 4200 IF FUEL <5 GOTO 4220 ELSE IF PEEK(14368)=64 THEN X=X+1:FUEL=FUEL-5 ELSE IF PEEK(14368)=16 THEN X=X-1:FUEL=FUEL-5 4210 IF X>124 THEN X=X-1 ELSE IF X<0 THEN X=X+1 4220 IF X=LX AND Y=LY GOTO 8999 ELSE IF Y<1 GOTO 8999 4400 RESET(LX , LY):RESET(LX+1,LY- 1):RESET(LX+2, LY) : IF Y<12 THEN FOR N=1 TO 7 :PRINT@ST( N) , "."; : NEXT N 4405 IF PIC=-1 THEN SET(LX+1,LY+1) 4410 SET(X,Y):SET(X+1,Y-1):SET(X+2 ,Y):LX=X:LY=Y:BX=X+1:BY=Y+1 4420 PIC=POINT(BX,BY):IF BURN>1 SET(BX , BY) 8999 GOTO 3000 9000 IF ALT<230 GOTO 4011 ELSE GOTO 4150 9100 SET(113, 41):SET(114,42):RESET(115,42):SET(116,42):RESET(117,42):SET(118,42):SET(119,41):FOR X= 114 TO 118:RESET(X,41):NEXT:RESET(119,42):RESET(120,42):RETURN 9200 BD=BD+1: GOTO 9400 9300 GD=GD+1 9400 PRINT@192, "GOOD LANDINGS SO FAR... " ;GD: PRINT "BAD LANDINGS SO FAR.... ";BD:INPUT"TRY YOUR LUCK AGAIN? Y OR N";R$:IF R$="Y" THEN GOTO 2100 ELSE IF R$="N" END ELSE GOTO 9400 9999 END