10 REM LUNAR LANDER. VERSION DE M.ALFONSECA
20 RANDOMIZE
30 LET A=100000+INT(RND*100000):REM ALTURA INICIAL EN METROS
40 LET PE=15000:REM PESO DE LA CAPSULA EN KILOS
50 LET CO=7500:REM PESO DEL COMBUSTIBLE DISPONIBLE EN KILOS
60 LET V=0.625:REM VELOCIDAD EN KM/SEG
70 LET G=0.0016:REM ACELERACION DE LA GRAVEDAD EN LA LUNA, KM/S2
80 LET Z=1.8
90 PRINT"LUNAR LANDER"
100 PRINT"TE ENCUENTRAS A BORDO DE UNA CAPSULA LUNAR QUE ESTA A PUNTO DE "
110 PRINT"ALUNIZAR. EN CADA MOMENTO DEBES ESCOGER LA CANTIDAD DE"
120 PRINT"COMBUSTIBLE QUE VAS A DIRIGIR A LOS COHETES DE FRENADO."
130 PRINT"PUEDES ESCOGER ENTRE 0 Y 200 KG/SEG CADA 10 SEGUNDOS."
140 PRINT"ELIGE CON CUIDADO, PARA NO ESTRELLARTE."
150 PRINT"COMIENZA EL JUEGO.":PRINT
160 PRINT"T=TIEMPO A=ALTURA V=VELOCIDAD"
170 PRINT"C=COMBUSTIBLE FRN=FRENADO":PRINT
180 PRINT"T(S) A(KM) V(KM/H) C(KG) FRN"
190 PRINT SE;TAB(7);INT(A);TAB(15);0.1*INT(36000*V);TAB(24);CO;
200 INPUT FR
210 IF FR>200 THEN PRINT"FRENADO INVALIDO. REPITE.":GOTO190
220 IF FR<0 THEN PRINT"FRENADO INVALIDO.REPITE.":GOTO190
230 LET T=10:REM TIEMPO HASTA LA PROXIMA PETICION
240 IF CO<0.001 THEN GOTO1000
250 IF T<0.001 THEN GOTO 190
260 LET S=T: REM S ES EL NUMERO DE SEGSS QUE DURA EL COMBUSTIBLE A ESTE RITMO
270 IF CO>=S*FR THEN GOTO 300
280 LET S=CO/FR
300 GOSUB 2000
310 IF A1<=0 THEN GOTO 1200
320 IF V<=0 THEN GOTO 340
330 IF A2<0 THEN GOTO 1400
340 GOSUB 3000
350 GOTO 240
1000 PRINT"SE ACABO EL COMBUSTIBLE DESPUES DE ";SE;"SEGUNDOS."
1010 LET S=(SQR(V*V+.002*A*G)-V)/G
1020 LET V=V+G*S:REM VELOCIDAD FINAL EN KM/SEG
1030 LET SE=SE+S
1040 LET V1=3600*V: REM VELOCIDAD FINAL EN KM/H
1050 PRINT"ALCANZADA LA SUPERFICIE DE LA LUNA EN ";SE;"SEGUNDOS."
1060 PRINT"VELOCIDAD DE IMPACTO = ";INT(V1);"KM/H."
1070 IF V1<=2 THEN PRINT"ALUNIZAJE PERFECTO. ENHORABUENA.":GOTO1110
1080 IF V1<=20 THEN PRINT"HAS CAUSADO DA#OS A LA CAPSULA.":GOTO1110
1090 PRINT"TE HAS ESTRELLADO CONTRA LA LUNA. NO HUBO SUPERVIVIENTES."
1100 PRINT"HAS ABIERTO UN CRATER DE ";INT(V1*.052);"METROS"
1110 STOP
1200 IF S<.005 THEN GOTO1040
1210 LET D=V+SQR(V*V+.002*A*(G-Z*FR/PE))
1220 LET S=.002*A/D
1230 GOSUB 2000
1240 GOSUB 3000
1250 GOTO 1200
1400 LET V1=(1-PE*G/(Z*FR))/2
1410 LET S=PE*V/(Z*FR*(V1+SQR(V1*V1+V/Z)))+.05
1420 GOSUB 2000
1430 IF A1<=0 THEN GOTO 1200
1440 GOSUB 3000
1450 IF A2>0 THEN GOTO240
1460 IF V>0 THEN GOTO 1400
1470 GOTO240
2000 LET Q=S*FR/PE
2010 LET A2=V+G*S+Z*(-Q*(1+Q+(.5+Q*(.333333+Q*(.25+Q/S)))))
2020 LET A1=A-1000*(G*S*S/2+V*S-Z*S*Q*(.5+Q*(.1666667+Q*(1/12+Q*(.05+Q/30)))))
2030 RETURN
3000 LET SE=SE+S
3010 LET T=T-S
3020 LET PE=PE-S*FR
3030 LET CO=CO-S*FR
3040 LET A=A1
3050 LET V=A2
3060 RETURN
NOTAS: El programa como está corre en Spectrum
Para Commodore hay que cambiar las siguientes lineas:
20 X=RND(-TI)
30 A=100000+INT(RND(1)*100000):REM ALTURA INICIAL EN METROS