diff --git a/Games/Lunar_Lander/README.md b/Games/Lunar_Lander/README.md
new file mode 100644
index 0000000000..e1e5817c9d
--- /dev/null
+++ b/Games/Lunar_Lander/README.md
@@ -0,0 +1,41 @@
+## Overview
+
+**Lunar Lander** is a classic arcade-style game where the player controls a lunar module attempting to land safely on the surface of the moon. The game challenges the player's ability to manage the module's fuel, speed, and trajectory to achieve a smooth landing.
+
+## Table of Contents
+
+- [Gameplay](#gameplay)
+- [Controls](#controls)
+- [Features](#features)
+- [Installation](#installation)
+- [Usage](#usage)
+- [Screenshots](#screenshots)
+- [Contributing](#contributing)
+- [License](#license)
+- [Acknowledgements](#acknowledgements)
+
+## Gameplay
+
+The objective of the game is to successfully land the lunar module on the moon's surface. The player must control the descent rate and angle to avoid crashing. The game is won when the module lands safely within designated landing zones, marked on the surface.
+
+### Key Points
+
+- **Fuel Management**: The module has a limited amount of fuel. Use it wisely to control your descent.
+- **Landing Speed**: The module must land with a vertical speed below a certain threshold to avoid crashing.
+- **Landing Zones**: Safe landing zones are marked and provide bonuses for landing accuracy.
+
+## Controls
+
+- **Arrow Keys**:
+ - **Up**: Fire thrusters to slow descent.
+ - **Left/Right**: Tilt the module to control horizontal movement.
+- **Spacebar**: Activate main thruster for a powerful, fuel-consuming burst.
+- **P**: Pause the game.
+- **R**: Restart the game.
+
+## Features
+
+- **Realistic Physics**: Simulates lunar gravity and module thruster mechanics.
+- **Fuel Management**: Limited fuel adds a layer of strategy to the game.
+- **Multiple Levels**: Increasing difficulty with various landing zone configurations.
+- **Scoring System**: Points awarded for landing accuracy, fuel efficiency, and speed.
\ No newline at end of file
diff --git a/Games/Lunar_Lander/css/index.css b/Games/Lunar_Lander/css/index.css
new file mode 100644
index 0000000000..2e10d81bcb
--- /dev/null
+++ b/Games/Lunar_Lander/css/index.css
@@ -0,0 +1,70 @@
+html {
+ margin: 0;
+ background-color: black;
+ font-family: monospace;
+ font-size: 16px;
+}
+
+body {
+ margin: 0 0 0 0;
+}
+
+a {
+ color: white;
+}
+
+#menu {
+ position: absolute;
+ top: 0;
+ width: 100%;
+ color: white;
+ height: 3.5em;
+ line-height: 3.5em;
+ text-align: right;
+}
+
+#menu a {
+ margin: 0 4em;
+}
+
+#console-root {
+ margin: 8em 0 0 0;
+ padding: 0 1em 4em 1em;
+}
+
+.console-line {
+ padding: 0;
+ border: none;
+ background-color: black;
+ color: white;
+ font-family: monospace;
+ font-size: 1em;
+ margin: 0 auto;
+ display: block;
+ width: 45em;
+ line-height: 1.4em;
+}
+
+@media (max-width: 760px) {
+ html {
+ font-size: 14px;
+ }
+}
+
+@media (max-width: 660px) {
+ html {
+ font-size: 12px;
+ }
+}
+
+@media (max-width: 560px) {
+ html {
+ font-size: 10px;
+ }
+}
+
+@media (max-width: 460px) {
+ html {
+ font-size: 8px;
+ }
+}
\ No newline at end of file
diff --git a/Games/Lunar_Lander/index.html b/Games/Lunar_Lander/index.html
new file mode 100644
index 0000000000..e942dc7d43
--- /dev/null
+++ b/Games/Lunar_Lander/index.html
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+ LUNAR LANDER SIMULATOR
+
+
+
+
+
+
+
+
+
+
+
+
LUNAR LANDER SIMULATOR
+
----------------------
+
+
RECODING OF JIM STORER'S LUNAR LANDING GAME FROM 1969.
+
PRESS ENTER, CLICK OR TOUCH TO START!
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Games/Lunar_Lander/info.html b/Games/Lunar_Lander/info.html
new file mode 100644
index 0000000000..2208255360
--- /dev/null
+++ b/Games/Lunar_Lander/info.html
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+ LUNAR LANDER SIMULATOR
+
+
+
+
+
+
+
+
+
+
+
+
LUNAR LANDER SIMULATOR
+
----------------------
+
+
THE LUNAR LANDING GAME WAS WRITTEN BY JIM STORER IN 1969.
+IT WAS CODED IN FOCAL FOR A DEC PDP-8 MINICOMPUTER. IT BECAME ONE OF THE MOST INFLUENTIAL COMPUTER GAMES EVER.
+THE LUNAR LANDER SIMULATOR IS AN ACCURATE RECODING IN JAVASCRIPT AND HTML OF THE FOCAL CODE FROM 1969.
+
+
+
LUNAR LINKS
+
-----------
+
+
+
+
+
+
+
+
+
PRIVACY
+
-------
+
+
LUNAR LANDER SIMULATOR DOES NOT TRACK OR COLLECT ANY DATA. NEITHER COOKIES NOR TOOLS LIKE GOOGLE
+ANALYTICS ARE USED. PAGE CALLS ARE NOT LOGGED. LUNAR LANDER SIMULATOR IS HOSTED BY
UEBERSPACE .
+CODE IS FREE ON
GITHUB UNDER
+
AGPLV3 .
+
+
+
CONTACT
+
-------
+
+
+
TANNHAEUSERPLATZ 3
+
28205 BREMEN, GERMANY
+
INFO (AT) STEFANTRENKEL.DE
+
+
+
+
+
\ No newline at end of file
diff --git a/Games/Lunar_Lander/js/delayer.js b/Games/Lunar_Lander/js/delayer.js
new file mode 100644
index 0000000000..cd0c9c7683
--- /dev/null
+++ b/Games/Lunar_Lander/js/delayer.js
@@ -0,0 +1,41 @@
+var delayer = (function() {
+
+ var delayId;
+ var delayerStack = [];
+ var delayTime = 75; // in millis
+
+ // --- PUBLIC METHODS ---
+
+ /**
+ * @param {Function} callbacks
+ * @returns {Function}
+ */
+ var delay = function(callback) {
+ return function() {
+ delayerStack.push([callback, arguments]);
+ runDelayer();
+ }
+ };
+
+ // --- PRIVATE METHODES ---
+
+ var runDelayer = function() {
+ if (delayId == null) {
+ delayId = setTimeout(function() {
+ delayId = null;
+ var task = delayerStack.shift();
+ if (task) {
+ task[0].apply(null, task[1]);
+ if (delayerStack.length != 0) {
+ runDelayer();
+ }
+ }
+ }, delayTime);
+ }
+ };
+
+ return {
+ delay: delay
+ };
+
+})();
\ No newline at end of file
diff --git a/Games/Lunar_Lander/js/htmlfrontend.js b/Games/Lunar_Lander/js/htmlfrontend.js
new file mode 100644
index 0000000000..535f0d4371
--- /dev/null
+++ b/Games/Lunar_Lander/js/htmlfrontend.js
@@ -0,0 +1,62 @@
+(function(myLunarControl, myDelayer) {
+
+ var root = document.getElementById("console-root");
+ var lastFormElm;
+
+ var scrollToBottom = function() {
+ window.scrollTo(0, document.body.scrollHeight);
+ };
+
+ var log = function(message) {
+ clearForm();
+ var input = createInputElm(message);
+ input.disabled = true;
+ root.appendChild(input);
+ scrollToBottom();
+ };
+
+ var prompt = function(message, callback) {
+ clearForm();
+ var inputElm = createInputElm(message);
+ var form = document.createElement("form");
+ form.appendChild(inputElm);
+ root.appendChild(form);
+ inputElm.focus();
+ form.onsubmit = function(event) {
+ event.preventDefault();
+ callback(inputElm.value.substr(message.length));
+ return false; // necessary?
+ };
+ lastFormElm = form;
+ scrollToBottom();
+ };
+
+ var createInputElm = function(message) {
+ var input = document.createElement("input");
+ input.className = "console-line";
+ if (message) {
+ input.value = message;
+ }
+ return input;
+ };
+
+ var clearForm = function() {
+ if (lastFormElm) {
+ lastFormElm.onsubmit = null;
+ lastFormElm.firstElementChild.disabled = true;
+ lastFormElm = null;
+ }
+ };
+
+ var Logger = {
+ log: myDelayer.delay(log),
+ prompt: myDelayer.delay(prompt)
+ };
+
+ var runLL = function() {
+ myLunarControl.run(Logger);
+ };
+
+ runLL();
+
+})(lunarcontrol, delayer);
\ No newline at end of file
diff --git a/Games/Lunar_Lander/js/lunarcalc.js b/Games/Lunar_Lander/js/lunarcalc.js
new file mode 100644
index 0000000000..8368669122
--- /dev/null
+++ b/Games/Lunar_Lander/js/lunarcalc.js
@@ -0,0 +1,174 @@
+/**
+ * Transcription of Storer's lunar lander FOCAL code to JavaScript.
+ * Variable names and line numbers are taken from there. See:
+ * https://www.cs.brandeis.edu/~storer/LunarLander/LunarLander/LunarLanderListing.jpg
+ */
+
+var lunarcalc = {};
+
+/**
+ * Function, that returns an iterator (object with method 'next') doing the lunar landing calculation.
+ */
+lunarcalc.createIterator = function() {
+
+ // Initial values; state of the iterator
+ var L = 0; // Time (seconds)
+ var A = 120; // Altitude (miles)
+ var V = 1; // Velocity (miles/second)
+ var M = 32500; // Total weight (LBS)
+
+ // constants
+ var N = 16500; // Capsule weight (LBS)
+ var G = 0.001; // Gravity (miles/second**2)
+ var Z = 1.8; // Fuel exhaust velocity (miles/seconds)
+
+ // helper vars
+ var S; // Time (seconds)
+ var T; // Time (seconds)
+ var I; // new altitude (miles)
+ var J; // new velocity (miles/second)
+ var K; // Fuel Rate (LBS/SEC)
+ var fuelOutAt;
+ var doIteration = false;
+ var done = false;
+
+ // --- PUBLIC METHODS ---
+
+ /**
+ * @param {Number} myK Fuel Rate (LBS/SEC)
+ */
+ var next = function(myK) {
+
+ K = myK;
+ T = 10; // Time in seconds for one breaking iteration
+
+ while (doIteration && !done) {
+
+ // Fuel out / on moon
+ if (M - N - 0.001 < 0) {
+ var fuelOutAt = L;
+ calcFreeFall();
+ done = true;
+ break;
+ }
+
+ // Iteration ready
+ if (T - 0.001 < 0) {
+ break;
+ }
+
+ S = T;
+
+ // too little fuel
+ if (M - N - S * K < 0) {
+ S = (M - N) / K;
+ }
+
+ // Line 3.50
+ calcNewAltitudeAndVelocity();
+
+ // New hight less than zero -> on the moon
+ if (I <= 0) {
+ calcOnTheMoon();
+ done = true;
+ break;
+ }
+
+ //
+ if (V > 0 && J < 0) {
+ var result = calcDeepestPoint();
+ if (result === "onTheMoon") {
+ done = true;
+ break;
+ }
+ } else {
+ transferNewValues();
+ }
+
+ }
+
+ doIteration = true;
+
+ return {
+ value: {
+ time: L,
+ altitude: A,
+ velocity: V,
+ fuel: M - N,
+ fuelOutAt: fuelOutAt
+ },
+ done: done
+ };
+
+ };
+
+ // -- PRIVATE METHODS --
+
+ /**
+ * Line 04.40.
+ */
+ var calcFreeFall = function() {
+ S = (Math.sqrt(V * V + 2 * A * G) - V) / G;
+ V = V + G * S;
+ L = L + S;
+ };
+
+ /**
+ * Block 06.
+ */
+ var transferNewValues = function() {
+ L = L + S;
+ T = T - S;
+ M = M - S * K;
+ A = I;
+ V = J;
+ };
+
+ /**
+ * Block 07.
+ */
+ var calcOnTheMoon = function() {
+ while (S >= 0.005) {
+ S = 2 * A / (V + Math.sqrt(V * V + 2 * A * (G - Z * K / M)));
+ calcNewAltitudeAndVelocity();
+ transferNewValues();
+ }
+ };
+
+ /**
+ * Block 08.
+ */
+ var calcDeepestPoint = function() {
+ while (true) {
+ var W = (1 - M * G / (Z * K)) / 2;
+ S = M * V / (Z * K * (W + Math.sqrt(W * W + V / Z))) + 0.05;
+ calcNewAltitudeAndVelocity();
+ if (I <= 0) {
+ calcOnTheMoon();
+ return "onTheMoon";
+ }
+ transferNewValues();
+ // Always true. A joke?
+ if (J >= 0 || V <= 0) {
+ return "continue";
+ }
+ }
+ };
+
+ /**
+ * Block 09.
+ */
+ var calcNewAltitudeAndVelocity = function() {
+ var Q = S * K / M;
+ // New velocity based on Tsiolkovsky rocket equation.
+ // Taylor series of ln(1-Q) is used.
+ J = V + G * S + Z * (-Q - Q ** 2 / 2 - Q ** 3 / 3 - Q ** 4 / 4 - Q ** 5 / 5);
+ // new altitude
+ I = A - G * S * S / 2 - V * S + Z * S * (Q / 2 + Q ** 2 / 6 + Q ** 3 / 12 + Q ** 4 / 20 + Q ** 5 / 30);
+ };
+
+ return {
+ next: next
+ }
+
+};
\ No newline at end of file
diff --git a/Games/Lunar_Lander/js/lunarcontrol.js b/Games/Lunar_Lander/js/lunarcontrol.js
new file mode 100644
index 0000000000..f726f54fe4
--- /dev/null
+++ b/Games/Lunar_Lander/js/lunarcontrol.js
@@ -0,0 +1,184 @@
+/**
+ * Object with method 'run'.
+ */
+var lunarcontrol = (function(myLunarCalc) {
+
+ "use strict";
+
+ var inOut;
+ var controlOutCallback;
+
+ // --- PUBLIC METHODS ---
+
+ /**
+ * Controls all in- and outputs.
+ *
+ * myInOut is an object implementing two functions log and prompt.
+ * log should accept a string for output and prompt should accept a string for output
+ * and a callback function for input. The callback should be called with the string input.
+ *
+ * myControlOutCallback is called, when user choose 'CONTROL OUT'.
+ */
+ var run = function(myInOut, myControlOutCallback) {
+
+ inOut = myInOut;
+ controlOutCallback = myControlOutCallback || function() {};
+
+ logIntro();
+ doLanding();
+ };
+
+ // --- PRIVATE METHODS ---
+
+ /**
+ * round(1.1234, 2) = "1.12"
+ * round(1.995, 2) = "2.00"
+ *
+ * @param {Number} x
+ * @param {Integer} d digits, d > 0
+ * @returns {String}
+ */
+ var round = function(x, d) {
+
+ var pow = Math.pow(10, d);
+ var x = Math.round(x * pow) / pow;
+ var trunc = Math.trunc(x);
+ var decimals = Math.abs(x - trunc);
+ trunc = Math.abs(trunc);
+ var sign = x < 0 ? "-" : "";
+
+ var dDecimalString = decimals
+ .toString()
+ .substr(2, d)
+ .padEnd(d, "0");
+
+ return sign + trunc.toString() + "." + dDecimalString;
+ };
+
+ var logIntro = function() {
+ inOut.log("CONTROL CALLING LUNAR MODULE. MANUAL CONTROL IS NECESSARY");
+ inOut.log("YOU MAY RESET FUEL RATE K EACH 10 SECS TO 0 OR ANY VALUE");
+ inOut.log("BETWEEN 8 & 200 LBS/SEC. YOU'VE 16000 LBS FUEL. ESTIMATED");
+ inOut.log("FREE FALL IMPACT TIME-120 SECS. CAPSULE WEIGHT-32500 LBS");
+ };
+
+ var logHeader = function() {
+ inOut.log("FIRST RADAR CHECK COMING UP");
+ inOut.log();
+ inOut.log();
+ inOut.log("COMMENCE LANDING PROCEDURE");
+ inOut.log("TIME,SECS ALTITUDE,MILES+FEET VELOCITY,MPH FUEL,LBS FUEL RATE");
+ };
+
+ var doLanding = function() {
+
+ logHeader();
+ var lunarIterator = myLunarCalc.createIterator();
+
+ var nextStep = function(K) {
+
+ var next = lunarIterator.next(K);
+
+ if (next.done) {
+ printResult(next.value);
+ return;
+ }
+
+ inOut.prompt(getResultLine(next.value), function(input) {
+ validateInput(input, nextStep);
+ });
+ };
+
+ nextStep();
+ };
+
+ var validateInput = function(input, callback) {
+ var K = Number.parseInt(input);
+ if (Number.isFinite(K) && (K === 0 || K >= 8 && K <= 200)) {
+ callback(K);
+ } else {
+ inOut.prompt("NOT POSSIBLE" + ".".repeat(51) + "K=:", function(nextInput) {
+ validateInput(nextInput, callback);
+ });
+ }
+ };
+
+ /**
+ * @param {*} value
+ * @returns {String}
+ */
+ var getResultLine = function(value) {
+ var L = value.time;
+ var A = value.altitude;
+ var V = value.velocity;
+ var MN = value.fuel;
+
+ // 2.10 - 2.20
+ var l = Math.round(L).toString().padStart(8, " ");
+ var aMiles = Math.floor(A).toString().padStart(15, " ");
+ var aFeet = Math.round((5280 * (A - Math.floor(A)))).toString().padStart(7, " ");
+ var v = round(3600 * V, 2).padStart(15, " ");
+ var fuel = round(MN, 1).padStart(12, " ");
+ return `${l}${aMiles}${aFeet}${v}${fuel} K=:`;
+ };
+
+ var printResult = function(value) {
+
+ if (value.fuelOutAt) {
+ var l = round(value.fuelOutAt, 2).padStart(8);
+ inOut.log(`FUEL OUT AT ${l} SECS`);
+ }
+
+ var t = round(value.time, 2).padStart(8);
+ inOut.log(`ON THE MOON AT ${t} SECS`);
+
+ var W = 3600 * value.velocity;
+ var w = round(W, 2).padStart(8);
+ inOut.log(`IMPACT VELOCITY OF ${w} M.P.H.`);
+
+ var mn = round(value.fuel, 2).padStart(8);
+ inOut.log(`FUEL LEFT: ${mn} LBS`);
+
+ if (W < 1) {
+ inOut.log("PERFECT LANDING !-(LUCKY)");
+ } else if (W < 10) {
+ inOut.log("GOOD LANDING-(COULD BE BETTER)");
+ } else if (W < 22) {
+ inOut.log("CONGRATULATIONS ON A POOR LANDING");
+ } else if (W < 40) {
+ inOut.log("CRAFT DAMAGE. GOOD LUCK")
+ } else if (W < 60) {
+ inOut.log("CRASH LANDING-YOU'VE 5 HRS OXYGEN")
+ } else {
+ inOut.log("SORRY,BUT THERE WERE NO SURVIVORS-YOU BLEW IT!");
+ var deep = round(W * 0.277777, 2).padStart(8);
+ inOut.log(`IN FACT YOU BLASTED A NEW LUNAR CRATER ${deep} FT. DEEP`);
+ }
+ inOut.log("");
+ inOut.log("");
+ inOut.log("");
+ inOut.log("TRY AGAIN?");
+ tryAgain();
+ };
+
+ var tryAgain = function() {
+ inOut.prompt("(ANS. YES OR NO):", function(answer) {
+ if (answer === "YES") {
+ inOut.log("");
+ inOut.log("");
+ inOut.log("");
+ doLanding();
+ } else if (answer === "NO") {
+ inOut.log("CONTROL OUT");
+ controlOutCallback();
+ } else {
+ tryAgain();
+ }
+ });
+ };
+
+ return {
+ run: run
+ };
+
+}) (lunarcalc);
\ No newline at end of file
diff --git a/Games/Lunar_Lander/lunar.html b/Games/Lunar_Lander/lunar.html
new file mode 100644
index 0000000000..53e4fe7d9f
--- /dev/null
+++ b/Games/Lunar_Lander/lunar.html
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+ LUNAR LANDER SIMULATOR
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/README.md b/README.md
index eb94cbb257..a2a7852732 100644
--- a/README.md
+++ b/README.md
@@ -329,6 +329,17 @@ This repository also provides one such platforms where contributers come over an
| [Sudoku_light_theme](https://github.com/kunjgit/GameZone/tree/main/Games/Sudoku_light_theme) |
| [Find_the_ball](https://github.com/kunjgit/GameZone/tree/main/Games/Find_the_ball) |
|[Color The Page](https://github.com/kunjgit/GameZone/tree/main/Games/Color_The_Page)|
+|[Lunar Lander](https://github.com/kunjgit/GameZone/tree/main/Games/Lunar_Lander)|
+
+
+
+
+
+
+
+|[AquaSort_Game](https://github.com/kunjgit/GameZone/tree/main/Games/AquaSort_Game) |
+|[Chess_Game_computer](https://github.com/kunjgit/GameZone/tree/main/Games/Chess_Game_computer) |
+|[Turn_on_the_light](https://github.com/kunjgit/GameZone/tree/main/Games/Turn_on_the_light) |
|[AquaSort_Game](https://github.com/kunjgit/GameZone/tree/main/Games/AquaSort_Game) |
| [Snake](https://github.com/kunjgit/GameZone/tree/main/Games/snake) |
| [Tetris Game](https://github.com/kunjgit/GameZone/tree/main/Games/tetris_game)|
diff --git a/assets/images/Lunar_Lander.png b/assets/images/Lunar_Lander.png
new file mode 100644
index 0000000000..736149daf3
Binary files /dev/null and b/assets/images/Lunar_Lander.png differ