User prompt
Delay game over for 2 seconds in level 1 and 2
User prompt
Only show crash message in level 1 or 2
User prompt
Every 5 levels increase gravity by 10%
User prompt
Asteroids should not spawn on a radius of 500 pixels from where the lander spawns
User prompt
Only show crash message if level is 1 or 2
User prompt
Increase time between crash and game over for 2 second
User prompt
Move crash message 100 pixela higer
User prompt
When lander crashes show a message in white font in the center of thebscreen thatvreads: "Slow down cap! Keep Y speed below 2!"
User prompt
Show crash message in the center of thebscreen
User prompt
When lander crashes into platform show messgae that reads: "Watch your speed cap! Keep it below 2!"
User prompt
On game start fuel txt should say 100% Fuel
User prompt
500 fuel is 100%
User prompt
Set initial fuel to 500
User prompt
As game progresses decrease initial fuel and increase gravity
User prompt
Fuel should read 100% Fuel on game start
User prompt
Reduce initial spawn of asteroids to half
User prompt
Show fuel txt as a percentage
User prompt
Asteroids should start spawning on level 5
User prompt
Double size of level txr
User prompt
Spawn asteroids on elvel 1
User prompt
Move thruster 20 pixela higher
User prompt
Move thruster 30 pixela up
User prompt
Fix Bug: 'Uncaught Error: [object Object]addChildAt: The index 1 supplied is out of bounds 0' in this line: 'var background = game.addChildAt(LK.getAsset('background', 'Game Background', 0, 0), 1);' Line Number: 315
User prompt
Show baclground in front of baclground2
User prompt
Make stars smaller
/****
* Classes
****/
var CrashedLander = Container.expand(function () {
var self = Container.call(this);
var crashedLanderGraphics = self.createAsset('crashedlander', 'Crashed Lander', 0.5, 0.5);
self.destroyAfterOneSecond = function () {
LK.setTimeout(function () {
self.destroy();
}, 1000);
};
});
var LandedLander = Container.expand(function () {
var self = Container.call(this);
var landedLanderGraphics = self.createAsset('landedlander', 'Landed Lander', 0.5, 0.5);
self.destroyAfterOneSecond = function () {
LK.setTimeout(function () {
self.destroy();
}, 1000);
};
});
// Thruster class
var Thruster = Container.expand(function () {
var self = Container.call(this);
var thrusterGraphics = self.createAsset('thruster', 'Thruster', 0.5, 0.5);
self.update = function () {
// Thruster update code here
};
});
// Lander class
var Lander = Container.expand(function () {
var self = Container.call(this);
var landerGraphics = self.createAsset('lander', 'Player Lander', 0.5, 0.5);
self.speedX = 0;
self.speedY = 0;
self.fuel = 1000;
self.isThrusting = false;
self.isLanding = false;
self.update = function () {
if (!self.isLanding) {
self.x += self.speedX;
self.y += self.speedY;
if (self.isThrusting && self.fuel > 0) {
self.speedY -= 0.2; // Thruster effect
self.fuel -= 1;
fuelTxt.setText(self.fuel.toString() + ' Fuel'); // Update fuel display
} else {
self.speedY += 0.05; // Gravity effect
}
ySpeedTxt.setText('Y Speed: ' + self.speedY.toFixed(2)); // Update Y Speed display
}
// Update thruster position and visibility
thruster.x = self.x;
thruster.y = self.y + self.height; // Position thruster 20 pixels closer to the lander
thruster.visible = self.isThrusting;
};
self.land = function () {
self.isLanding = true;
var landedLander = game.addChild(new LandedLander());
landedLander.x = self.x;
landedLander.y = self.y;
landedLander.destroyAfterOneSecond();
levelManager.incrementLevel();
};
self.refuel = function () {
self.fuel = 1000;
fuelTxt.setText(self.fuel.toString() + ' Fuel'); // Update fuel display
};
});
// Platform class
var MovingPlatform = Container.expand(function () {
var self = Container.call(this);
var platformGraphics = self.createAsset('platform', 'Landing Platform', 0.5, 0.5);
self.speedX = 0;
self.startMoving = function (level) {
if (level >= 3) {
self.speedX = 2.8 + (level - 3) * 0.2; // Increase sideways speed by 0.2 for each level above 3
}
};
self.update = function () {
self.x += self.speedX;
if (self.x > 1524 || self.x < 524) {
self.speedX *= -1; // Change direction when hitting screen bounds
}
};
self.checkLanding = function (lander) {
if (lander.intersects(self)) {
if (lander.speedY < 2 && lander.x > self.x - self.width / 2 && lander.x < self.x + self.width / 2) {
return true;
} else {
isGameOver = true;
var crashedLander = game.addChild(new CrashedLander());
crashedLander.x = lander.x;
crashedLander.y = lander.y;
crashedLander.destroyAfterOneSecond();
LK.setTimeout(function () {
LK.showGameOver();
}, 1000);
return false;
}
}
return false;
};
});
// Level class
var Level = Container.expand(function () {
var self = Container.call(this);
self.currentLevel = 1;
var levelTxt = new Text2('Level: ' + self.currentLevel, {
size: 50,
fill: "#ffffff"
});
levelTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(levelTxt);
self.incrementLevel = function () {
self.currentLevel += 1;
levelTxt.setText('Level: ' + self.currentLevel);
platform.startMoving(self.currentLevel);
isPaused = true;
pauseTimer = 60;
};
});
// Asteroid class
var Asteroid = Container.expand(function () {
var self = Container.call(this);
var asteroidGraphics = self.createAsset('asteroid', 'Asteroid', 0.5, 0.5);
self.speedX = Math.random() * 2 - 1; // Random horizontal speed
self.speedY = Math.random() * 3 + 1; // Random vertical speed
self.update = function () {
self.x += self.speedX;
self.y += self.speedY;
// Destroy asteroid if it goes off-screen
if (self.y > 2732 || self.x < 0 || self.x > 2048) {
self.destroy();
}
};
});
/****
* Initialize Game
****/
// Stars class
// Center vertically
// Initialize lander
var game = new LK.Game({
backgroundColor: 0x000000 // Init game with black background
});
/****
* Game Code
****/
// Stars class
// Initialize lander
function _typeof(o) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof(o);
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) {
descriptor.writable = true;
}
Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) {
_defineProperties(Constructor.prototype, protoProps);
}
if (staticProps) {
_defineProperties(Constructor, staticProps);
}
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _toPropertyKey(t) {
var i = _toPrimitive(t, "string");
return "symbol" == _typeof(i) ? i : String(i);
}
function _toPrimitive(t, r) {
if ("object" != _typeof(t) || !t) {
return t;
}
var e = t[Symbol.toPrimitive];
if (void 0 !== e) {
var i = e.call(t, r || "default");
if ("object" != _typeof(i)) {
return i;
}
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return ("string" === r ? String : Number)(t);
}
function _inherits(subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function");
}
subClass.prototype = Object.create(superClass && superClass.prototype, {
constructor: {
value: subClass,
writable: true,
configurable: true
}
});
Object.defineProperty(subClass, "prototype", {
writable: false
});
if (superClass) {
_setPrototypeOf(subClass, superClass);
}
}
function _setPrototypeOf(o, p) {
_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
o.__proto__ = p;
return o;
};
return _setPrototypeOf(o, p);
}
function _createSuper(Derived) {
var hasNativeReflectConstruct = _isNativeReflectConstruct();
return function _createSuperInternal() {
var Super = _getPrototypeOf(Derived),
result;
if (hasNativeReflectConstruct) {
var NewTarget = _getPrototypeOf(this).constructor;
result = Reflect.construct(Super, arguments, NewTarget);
} else {
result = Super.apply(this, arguments);
}
return _possibleConstructorReturn(this, result);
};
}
function _possibleConstructorReturn(self, call) {
if (call && (_typeof(call) === "object" || typeof call === "function")) {
return call;
} else if (call !== void 0) {
throw new TypeError("Derived constructors may only return object or undefined");
}
return _assertThisInitialized(self);
}
function _assertThisInitialized(self) {
if (self === void 0) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}
return self;
}
function _isNativeReflectConstruct() {
if (typeof Reflect === "undefined" || !Reflect.construct) {
return false;
}
if (Reflect.construct.sham) {
return false;
}
if (typeof Proxy === "function") {
return true;
}
try {
Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
return true;
} catch (e) {
return false;
}
}
function _getPrototypeOf(o) {
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {
return o.__proto__ || Object.getPrototypeOf(o);
};
return _getPrototypeOf(o);
}
var Stars = /*#__PURE__*/function (_Container) {
_inherits(Stars, _Container);
var _super = _createSuper(Stars);
function Stars() {
var _this;
_classCallCheck(this, Stars);
_this = _super.call(this);
_this.createStars();
return _this;
}
_createClass(Stars, [{
key: "createStars",
value: function createStars() {
for (var i = 0; i < 100; i++) {
var star = this.addChild(LK.getAsset('star', 'Star', 0.5, 0.5));
star.x = Math.random() * 2048;
star.y = Math.random() * 2732;
star.alpha = Math.random() * 0.5 + 0.5; // Random transparency for twinkling effect
var randomScale = Math.random() * 0.3 + 0.2; // Random scale for different sizes
star.scale.x = randomScale;
star.scale.y = randomScale;
}
}
}]);
return Stars;
}(Container);
var background = game.addChild(LK.getAsset('background', 'Game Background', 0, 0));
background.x = 1024; // Center horizontally
background.y = 1366;
// Add stars behind the main background
var stars = game.addChild(new Stars());
// Add second background
var secondBackground = game.addChildAt(LK.getAsset('secondBackground', 'Second Game Background', 0.5, 0.5), 1);
secondBackground.width = 2048;
secondBackground.height = 2732;
secondBackground.x = 2048 / 2; // Center horizontally
secondBackground.y = 2732 / 2; // Center vertically
var scoreTxt = new Text2('0', {
size: 50,
fill: "#ffffff"
});
scoreTxt.anchor.set(0.5, 0);
//LK.gui.top.addChild(scoreTxt);
var lander = game.addChild(new Lander());
lander.x = 1024; // Start in the middle of the screen horizontally
lander.y = 100; // Start 100 pixels down from the top
// Initialize thruster
var thruster = game.addChild(new Thruster());
thruster.x = lander.x;
thruster.y = lander.y + lander.height + 5; // Position thruster 5 pixels below the lander
// Initialize level manager
var levelManager = game.addChild(new Level());
// Initialize moving platform
var platform = game.addChild(new MovingPlatform());
platform.x = 1024; // Center horizontally
platform.y = 2632; // Place at the bottom
// Game variables
var isGameOver = false;
var isPaused = false;
var pauseTimer = 0;
var score = 0;
var asteroids = [];
// Fuel display text
var fuelTxt = new Text2('1000 Fuel', {
size: 50,
fill: "#ffffff"
});
fuelTxt.anchor.set(1, 0);
LK.gui.topRight.addChild(fuelTxt);
// Y Speed display text
var ySpeedTxt = new Text2('Y Speed: ' + lander.speedY.toFixed(2), {
size: 50,
fill: "#ffffff"
});
ySpeedTxt.anchor.set(1, 0);
ySpeedTxt.y = 50;
LK.gui.topRight.addChild(ySpeedTxt);
// Gravity display text
var gravityTxt = new Text2('Gravity: 0.05', {
size: 50,
fill: "#ffffff"
});
gravityTxt.anchor.set(1, 0);
gravityTxt.y = 100;
LK.gui.topRight.addChild(gravityTxt);
// Event listeners
game.on('down', function (obj) {
lander.isThrusting = true;
});
game.on('up', function (obj) {
lander.isThrusting = false;
});
// Game tick update
LK.on('tick', function () {
if (isPaused) {
lander.visible = false;
pauseTimer--;
if (pauseTimer <= 0) {
isPaused = false;
lander.visible = true;
}
return;
}
if (!isGameOver) {
// Update all asteroids
asteroids = game.children.filter(function (child) {
return child instanceof Asteroid;
});
lander.update();
platform.update(); // Update platform position
// Check for landing
if (platform.checkLanding(lander)) {
lander.land();
score += 1;
scoreTxt.setText(score.toString());
lander.refuel();
lander.x = 1024;
lander.y = 100;
lander.speedY = 0;
lander.isLanding = false;
}
// Check for collision with asteroids and game over conditions
for (var i = 0; i < asteroids.length; i++) {
if (lander.intersects(asteroids[i])) {
isGameOver = true;
LK.showGameOver();
break;
}
}
// Check if lander is off-screen for game over
if (lander.y > 2732) {
isGameOver = true;
LK.showGameOver();
}
// Asteroid spawning
if (levelManager.currentLevel >= 4 && LK.ticks % (120 - (levelManager.currentLevel - 4) * 10) == 0) {
// Spawn an asteroid more frequently as levels progress
var newAsteroid = new Asteroid();
var safeZoneRadius = 200;
var landerSpawnX = 1024;
var minDistanceFromLander;
do {
newAsteroid.x = Math.random() * 2048; // Random horizontal start position
minDistanceFromLander = Math.abs(newAsteroid.x - landerSpawnX);
} while (minDistanceFromLander <= safeZoneRadius);
newAsteroid.y = -50; // Start just above the screen
game.addChild(newAsteroid);
}
// Update all asteroids
asteroids = game.children.filter(function (child) {
return child instanceof Asteroid;
});
for (var i = 0; i < asteroids.length; i++) {
asteroids[i].update();
}
// Check for game over conditions
if (lander.y > 2732) {
isGameOver = true;
LK.showGameOver();
}
}
});