// 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 // Arena version, 2006 Hans Bezemer int enter () { return ((int) (fgets (stdin))); } void ready () { print ("Ready for detachment\n"); print (" -- COUNTDOWN --\n"); for (x = 10; x > 0; x--) printf ("%d ", x); print ("\nYou have left the spacecraft.\n"); print ("Try to land with velocity less than 5 m/sec.\n\n"); } void meter (int v, int h, int f) { print ("Meter readings\n"); print ("--------------\n"); printf ("Fuel (gal): %d\n", f); print (h > 0 ? "Landing v" : "V"); printf ("elocity (m/sec): %d\n", v); printf ("Height (m): %d\n\n", h); } bool boost_not_ok (int u, int f) { if (u < 0) print ("No cheating please! Fuel must be >= 0.\n"); else if (u > f) print ("Sorry, you have not got that much fuel!\n"); return ((u < 0) || (u > f)); } int boost (int f) { if (f > 0) { do { print ("How much fuel will you use? "); u = enter (); } while (boost_not_ok (u, f)); } else u = 0; return (u); } void calculate (int g, int u, int h, int v, int f) { h -= v; f -= u; v = (((v + g) * 10) - (u * 2)) / 10; } void report (int v) { print (v > 4 ? "You have crashed." : "Congratulations! This was a very good landing."); print ("\n\n"); } void lander () { do { ready (); g = 2; v = 70; h = 1000; f = 500; // G-force, velocity, height, fuel while (h > 0) { // as long as we have height meter (v, h, f); // show the readings u = boost (f); // give a boost calculate (g, u, &h, &v, &f); // calculate the next values } h = h > 0 ? h : 0; // we don't make big dents meter (v, h, f); report (v); // final reading and evaluation print ("Do you want to play again? (0 = no, 1 = yes) "); a = enter (); print ("\n"); } while (a == 1); print ("Have a nice day.\n"); } lander ();