\ Lunar Lander by Diomidis Spinellis, Chipmunk Basic version
\ I know it stinks as a game, but see it as a relic from old times.
\ Ingemar Ragnemalm, PhD
\ Image processing, Mac shareware games
\ E-mail address: ingemar@isy.liu.se or ingemar@lysator.liu.se
\ 4tH version Copyright 2006,2007 Hans Bezemer
include lib/ansfacil.4th
include lib/enter.4th
: ready ( --)
." Ready for detachment" cr
." -- COUNTDOWN --" cr
0 10 do i . sync 500 ms -1 +loop cr
." You have left the spacecraft." cr
." Try to land with velocity less than 5 m/sec." cr cr
;
: meter ( g v h f -- g v h f)
." Meter readings" cr
." --------------" cr
dup ." Fuel (gal): " . cr over >r rot r>
0= if ." Landing v" else ." V" then
dup ." elocity (m/sec): " . cr rot
dup ." Height (m): " . cr cr rot
;
: boost ( f -- f u)
dup dup 0> if
begin
drop ." How much fuel will you use? " enter
dup 0< dup if ." No cheating please! Fuel must be >= 0." cr
else drop 2dup < dup if ." Sorry, you have not got that much fuel!" cr
then then 0=
until cr
then
;
: calculate ( g v1 h1 f1 u -- g v2 h2 f2 flag)
tuck - >r >r \ calculate new fuel F = F - U
over - r> swap >r >r \ calculate new height H = H - V
over + 10 * r> 2* - 10 / \ calculate new velocity
r> r> over 0> 0= \ return height and fuel
; \ V = (((V + G) * 10) - (U * 2)) / 10
: report ( g v h f --)
drop drop 4 >
if ." You have crashed."
else ." Congratulations! This was a very good landing."
then drop cr cr
;
: lander
begin
ready
2 70 1000 500 \ G-force, velocity, height, fuel
begin
meter boost calculate
until
>r 0 max r> meter report
." Do you want to play again? (0 = no, 1 = yes) " enter
0= dup abort" Have a nice day." cr
until
;
lander
|