/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Asteroid = Container.expand(function () { var self = Container.call(this); var asteroidGraphic = self.attachAsset('asteroid', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 3 + Math.random() * 3; self.rotationSpeed = (Math.random() - 0.5) * 0.05; self.size = 0.8 + Math.random() * 0.8; asteroidGraphic.scale.set(self.size); self.update = function () { self.x -= self.speed; asteroidGraphic.rotation += self.rotationSpeed; // Remove if off screen if (self.x < -200) { self.toRemove = true; } }; return self; }); var Astronaut = Container.expand(function () { var self = Container.call(this); var astronautBody = self.attachAsset('astronaut', { anchorX: 0.5, anchorY: 0.5 }); var jetpackFlame = self.attachAsset('jetpackFlame', { anchorX: 0.5, anchorY: 0, x: 0, y: 50, alpha: 0 }); self.vx = 0; self.vy = 0; self.thrust = 0; self.fuel = 100; self.isDead = false; self.activateJetpack = function (strength) { if (self.fuel <= 0 || self.isDead) { jetpackFlame.alpha = 0; return; } self.thrust = strength; jetpackFlame.alpha = strength; // Consume fuel when jetpack is active self.fuel -= 0.3 * strength; if (self.fuel < 0) { self.fuel = 0; } }; self.deactivateJetpack = function () { self.thrust = 0; jetpackFlame.alpha = 0; }; self.update = function () { if (self.isDead) { return; } // Apply gravity self.vy += 0.2; // Apply thrust self.vy -= self.thrust * 0.4; // Apply velocity self.y += self.vy; self.x += self.vx; // Tilt astronaut based on vertical movement var targetRotation = self.vy * 0.05; astronautBody.rotation = astronautBody.rotation * 0.8 + targetRotation * 0.2; // Screen boundaries if (self.y < 100) { self.y = 100; self.vy = 0; } if (self.y > 2732 - 100) { self.y = 2732 - 100; self.vy = 0; } }; return self; }); var FuelCell = Container.expand(function () { var self = Container.call(this); var fuelGraphic = self.attachAsset('fuelCell', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 2 + Math.random() * 2; self.collected = false; // Add subtle floating animation self.baseY = 0; self.floatOffset = 0; self.floatSpeed = 0.02 + Math.random() * 0.01; self.update = function () { self.x -= self.speed; // Floating animation self.floatOffset += self.floatSpeed; fuelGraphic.y = self.baseY + Math.sin(self.floatOffset) * 10; // Remove if off screen if (self.x < -200) { self.toRemove = true; } }; self.collect = function () { if (self.collected) { return; } self.collected = true; LK.getSound('collect').play(); // Flash and scale animation tween(fuelGraphic, { alpha: 0, scaleX: 2, scaleY: 2 }, { duration: 300, easing: tween.easeOut }); }; return self; }); var Star = Container.expand(function () { var self = Container.call(this); var starGraphic = self.attachAsset('star', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 0.2 + Math.random() * 1; self.size = 0.3 + Math.random() * 0.7; starGraphic.scale.set(self.size); starGraphic.alpha = 0.3 + Math.random() * 0.7; self.update = function () { self.x -= self.speed; // Reset position if off screen if (self.x < -50) { self.x = 2048 + 50; self.y = Math.random() * 2732; } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000011 }); /**** * Game Code ****/ // Game state variables var astronaut; var asteroids = []; var fuelCells = []; var stars = []; var isJetpackActive = false; var score = 0; var gameOver = false; var asteroidSpawnTimer = 0; var asteroidSpawnRate = 120; var fuelCellSpawnTimer = 0; var fuelCellSpawnRate = 180; var highScore = storage.highScore || 0; // UI elements var scoreText = new Text2('0', { size: 80, fill: 0xFFFFFF }); scoreText.anchor.set(1.0, 0); LK.gui.topRight.addChild(scoreText); var highScoreText = new Text2('BEST: 0', { size: 50, fill: 0xAAAAAA }); highScoreText.anchor.set(1.0, 0); highScoreText.y = 90; LK.gui.topRight.addChild(highScoreText); highScoreText.setText('BEST: ' + highScore); var fuelBarBg = LK.getAsset('fuelBarBg', { anchorX: 0.5, anchorY: 0.5 }); var fuelBar = LK.getAsset('fuelBar', { anchorX: 0, anchorY: 0.5, x: -400 }); var fuelBarContainer = new Container(); fuelBarContainer.addChild(fuelBarBg); fuelBarContainer.addChild(fuelBar); fuelBarContainer.y = 50; LK.gui.top.addChild(fuelBarContainer); // Create background stars function createStars() { for (var i = 0; i < 100; i++) { var star = new Star(); star.x = Math.random() * 2048; star.y = Math.random() * 2732; stars.push(star); game.addChild(star); } } // Initialize game elements function initGame() { // Reset game state score = 0; gameOver = false; // Clear existing game objects if (astronaut) { astronaut.destroy(); } for (var i = asteroids.length - 1; i >= 0; i--) { asteroids[i].destroy(); } asteroids = []; for (var i = fuelCells.length - 1; i >= 0; i--) { fuelCells[i].destroy(); } fuelCells = []; for (var i = stars.length - 1; i >= 0; i--) { stars[i].destroy(); } stars = []; // Create background stars createStars(); // Create astronaut astronaut = new Astronaut(); astronaut.x = 300; astronaut.y = 2732 / 2; game.addChild(astronaut); // Reset UI scoreText.setText('0'); LK.setScore(0); // Play background music LK.playMusic('spaceBgm', { fade: { start: 0, end: 0.4, duration: 1000 } }); } // Spawn a new asteroid function spawnAsteroid() { var asteroid = new Asteroid(); asteroid.x = 2048 + 200; asteroid.y = 200 + Math.random() * (2732 - 400); asteroids.push(asteroid); game.addChild(asteroid); } // Spawn a new fuel cell function spawnFuelCell() { var fuelCell = new FuelCell(); fuelCell.x = 2048 + 200; fuelCell.y = 200 + Math.random() * (2732 - 400); fuelCells.push(fuelCell); game.addChild(fuelCell); } // Handle input for astronaut jetpack game.down = function (x, y) { if (gameOver) { return; } isJetpackActive = true; astronaut.activateJetpack(1.0); LK.getSound('jetpack').play(); }; game.up = function () { isJetpackActive = false; astronaut.deactivateJetpack(); }; game.move = function (x, y) { if (isJetpackActive && !gameOver) { astronaut.activateJetpack(1.0); } }; // Main game update function game.update = function () { if (!astronaut) { initGame(); return; } // Increment score if (!gameOver) { score += 0.1; LK.setScore(Math.floor(score)); scoreText.setText(Math.floor(score)); } // Update fuel bar var fuelPercent = astronaut.fuel / 100; fuelBar.width = 800 * fuelPercent; // Change fuel bar color based on amount if (fuelPercent < 0.3) { fuelBar.tint = 0xff0000; } else if (fuelPercent < 0.6) { fuelBar.tint = 0xffff00; } else { fuelBar.tint = 0x00ff00; } // Spawn asteroids asteroidSpawnTimer++; if (asteroidSpawnTimer >= asteroidSpawnRate && !gameOver) { spawnAsteroid(); asteroidSpawnTimer = 0; // Gradually increase difficulty if (asteroidSpawnRate > 40) { asteroidSpawnRate -= 0.2; } } // Spawn fuel cells fuelCellSpawnTimer++; if (fuelCellSpawnTimer >= fuelCellSpawnRate && !gameOver) { spawnFuelCell(); fuelCellSpawnTimer = 0; } // Update game objects for (var i = asteroids.length - 1; i >= 0; i--) { var asteroid = asteroids[i]; asteroid.update(); // Check collision with astronaut if (!gameOver && !astronaut.isDead && asteroid.intersects(astronaut)) { // Collision with asteroid - game over LK.getSound('explosion').play(); astronaut.isDead = true; gameOver = true; // Flash screen red LK.effects.flashScreen(0xff0000, 800); // Update high score if (score > highScore) { highScore = Math.floor(score); storage.highScore = highScore; highScoreText.setText('BEST: ' + highScore); } // Show game over after a short delay LK.setTimeout(function () { LK.showGameOver(); }, 1500); // Stop music LK.stopMusic(); // Visual effect for asteroid collision tween(asteroid, { alpha: 0, scaleX: 2, scaleY: 2 }, { duration: 500, easing: tween.easeOut }); } // Remove asteroids that are marked for removal if (asteroid.toRemove) { asteroid.destroy(); asteroids.splice(i, 1); } } // Update fuel cells for (var i = fuelCells.length - 1; i >= 0; i--) { var fuelCell = fuelCells[i]; fuelCell.update(); // Check collision with astronaut if (!gameOver && !fuelCell.collected && fuelCell.intersects(astronaut)) { // Collect fuel cell fuelCell.collect(); // Add fuel astronaut.fuel += 30; if (astronaut.fuel > 100) { astronaut.fuel = 100; } // Remove fuel cell after animation LK.setTimeout(function () { var index = fuelCells.indexOf(fuelCell); if (index !== -1) { fuelCell.destroy(); fuelCells.splice(index, 1); } }, 300); } // Remove fuel cells that are marked for removal if (fuelCell.toRemove) { fuelCell.destroy(); fuelCells.splice(i, 1); } } // Update stars for (var i = 0; i < stars.length; i++) { stars[i].update(); } // Check for out of fuel condition if (!gameOver && astronaut.fuel <= 0 && astronaut.y > 2732 - 200) { // Out of fuel and hitting the bottom - game over astronaut.isDead = true; gameOver = true; // Flash screen LK.effects.flashScreen(0xff0000, 800); // Update high score if (score > highScore) { highScore = Math.floor(score); storage.highScore = highScore; highScoreText.setText('BEST: ' + highScore); } // Show game over after a short delay LK.setTimeout(function () { LK.showGameOver(); }, 1500); // Stop music LK.stopMusic(); } };
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,419 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+var storage = LK.import("@upit/storage.v1");
+
+/****
+* Classes
+****/
+var Asteroid = Container.expand(function () {
+ var self = Container.call(this);
+ var asteroidGraphic = self.attachAsset('asteroid', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 3 + Math.random() * 3;
+ self.rotationSpeed = (Math.random() - 0.5) * 0.05;
+ self.size = 0.8 + Math.random() * 0.8;
+ asteroidGraphic.scale.set(self.size);
+ self.update = function () {
+ self.x -= self.speed;
+ asteroidGraphic.rotation += self.rotationSpeed;
+ // Remove if off screen
+ if (self.x < -200) {
+ self.toRemove = true;
+ }
+ };
+ return self;
+});
+var Astronaut = Container.expand(function () {
+ var self = Container.call(this);
+ var astronautBody = self.attachAsset('astronaut', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var jetpackFlame = self.attachAsset('jetpackFlame', {
+ anchorX: 0.5,
+ anchorY: 0,
+ x: 0,
+ y: 50,
+ alpha: 0
+ });
+ self.vx = 0;
+ self.vy = 0;
+ self.thrust = 0;
+ self.fuel = 100;
+ self.isDead = false;
+ self.activateJetpack = function (strength) {
+ if (self.fuel <= 0 || self.isDead) {
+ jetpackFlame.alpha = 0;
+ return;
+ }
+ self.thrust = strength;
+ jetpackFlame.alpha = strength;
+ // Consume fuel when jetpack is active
+ self.fuel -= 0.3 * strength;
+ if (self.fuel < 0) {
+ self.fuel = 0;
+ }
+ };
+ self.deactivateJetpack = function () {
+ self.thrust = 0;
+ jetpackFlame.alpha = 0;
+ };
+ self.update = function () {
+ if (self.isDead) {
+ return;
+ }
+ // Apply gravity
+ self.vy += 0.2;
+ // Apply thrust
+ self.vy -= self.thrust * 0.4;
+ // Apply velocity
+ self.y += self.vy;
+ self.x += self.vx;
+ // Tilt astronaut based on vertical movement
+ var targetRotation = self.vy * 0.05;
+ astronautBody.rotation = astronautBody.rotation * 0.8 + targetRotation * 0.2;
+ // Screen boundaries
+ if (self.y < 100) {
+ self.y = 100;
+ self.vy = 0;
+ }
+ if (self.y > 2732 - 100) {
+ self.y = 2732 - 100;
+ self.vy = 0;
+ }
+ };
+ return self;
+});
+var FuelCell = Container.expand(function () {
+ var self = Container.call(this);
+ var fuelGraphic = self.attachAsset('fuelCell', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 2 + Math.random() * 2;
+ self.collected = false;
+ // Add subtle floating animation
+ self.baseY = 0;
+ self.floatOffset = 0;
+ self.floatSpeed = 0.02 + Math.random() * 0.01;
+ self.update = function () {
+ self.x -= self.speed;
+ // Floating animation
+ self.floatOffset += self.floatSpeed;
+ fuelGraphic.y = self.baseY + Math.sin(self.floatOffset) * 10;
+ // Remove if off screen
+ if (self.x < -200) {
+ self.toRemove = true;
+ }
+ };
+ self.collect = function () {
+ if (self.collected) {
+ return;
+ }
+ self.collected = true;
+ LK.getSound('collect').play();
+ // Flash and scale animation
+ tween(fuelGraphic, {
+ alpha: 0,
+ scaleX: 2,
+ scaleY: 2
+ }, {
+ duration: 300,
+ easing: tween.easeOut
+ });
+ };
+ return self;
+});
+var Star = Container.expand(function () {
+ var self = Container.call(this);
+ var starGraphic = self.attachAsset('star', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 0.2 + Math.random() * 1;
+ self.size = 0.3 + Math.random() * 0.7;
+ starGraphic.scale.set(self.size);
+ starGraphic.alpha = 0.3 + Math.random() * 0.7;
+ self.update = function () {
+ self.x -= self.speed;
+ // Reset position if off screen
+ if (self.x < -50) {
+ self.x = 2048 + 50;
+ self.y = Math.random() * 2732;
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x000011
+});
+
+/****
+* Game Code
+****/
+// Game state variables
+var astronaut;
+var asteroids = [];
+var fuelCells = [];
+var stars = [];
+var isJetpackActive = false;
+var score = 0;
+var gameOver = false;
+var asteroidSpawnTimer = 0;
+var asteroidSpawnRate = 120;
+var fuelCellSpawnTimer = 0;
+var fuelCellSpawnRate = 180;
+var highScore = storage.highScore || 0;
+// UI elements
+var scoreText = new Text2('0', {
+ size: 80,
+ fill: 0xFFFFFF
+});
+scoreText.anchor.set(1.0, 0);
+LK.gui.topRight.addChild(scoreText);
+var highScoreText = new Text2('BEST: 0', {
+ size: 50,
+ fill: 0xAAAAAA
+});
+highScoreText.anchor.set(1.0, 0);
+highScoreText.y = 90;
+LK.gui.topRight.addChild(highScoreText);
+highScoreText.setText('BEST: ' + highScore);
+var fuelBarBg = LK.getAsset('fuelBarBg', {
+ anchorX: 0.5,
+ anchorY: 0.5
+});
+var fuelBar = LK.getAsset('fuelBar', {
+ anchorX: 0,
+ anchorY: 0.5,
+ x: -400
+});
+var fuelBarContainer = new Container();
+fuelBarContainer.addChild(fuelBarBg);
+fuelBarContainer.addChild(fuelBar);
+fuelBarContainer.y = 50;
+LK.gui.top.addChild(fuelBarContainer);
+// Create background stars
+function createStars() {
+ for (var i = 0; i < 100; i++) {
+ var star = new Star();
+ star.x = Math.random() * 2048;
+ star.y = Math.random() * 2732;
+ stars.push(star);
+ game.addChild(star);
+ }
+}
+// Initialize game elements
+function initGame() {
+ // Reset game state
+ score = 0;
+ gameOver = false;
+ // Clear existing game objects
+ if (astronaut) {
+ astronaut.destroy();
+ }
+ for (var i = asteroids.length - 1; i >= 0; i--) {
+ asteroids[i].destroy();
+ }
+ asteroids = [];
+ for (var i = fuelCells.length - 1; i >= 0; i--) {
+ fuelCells[i].destroy();
+ }
+ fuelCells = [];
+ for (var i = stars.length - 1; i >= 0; i--) {
+ stars[i].destroy();
+ }
+ stars = [];
+ // Create background stars
+ createStars();
+ // Create astronaut
+ astronaut = new Astronaut();
+ astronaut.x = 300;
+ astronaut.y = 2732 / 2;
+ game.addChild(astronaut);
+ // Reset UI
+ scoreText.setText('0');
+ LK.setScore(0);
+ // Play background music
+ LK.playMusic('spaceBgm', {
+ fade: {
+ start: 0,
+ end: 0.4,
+ duration: 1000
+ }
+ });
+}
+// Spawn a new asteroid
+function spawnAsteroid() {
+ var asteroid = new Asteroid();
+ asteroid.x = 2048 + 200;
+ asteroid.y = 200 + Math.random() * (2732 - 400);
+ asteroids.push(asteroid);
+ game.addChild(asteroid);
+}
+// Spawn a new fuel cell
+function spawnFuelCell() {
+ var fuelCell = new FuelCell();
+ fuelCell.x = 2048 + 200;
+ fuelCell.y = 200 + Math.random() * (2732 - 400);
+ fuelCells.push(fuelCell);
+ game.addChild(fuelCell);
+}
+// Handle input for astronaut jetpack
+game.down = function (x, y) {
+ if (gameOver) {
+ return;
+ }
+ isJetpackActive = true;
+ astronaut.activateJetpack(1.0);
+ LK.getSound('jetpack').play();
+};
+game.up = function () {
+ isJetpackActive = false;
+ astronaut.deactivateJetpack();
+};
+game.move = function (x, y) {
+ if (isJetpackActive && !gameOver) {
+ astronaut.activateJetpack(1.0);
+ }
+};
+// Main game update function
+game.update = function () {
+ if (!astronaut) {
+ initGame();
+ return;
+ }
+ // Increment score
+ if (!gameOver) {
+ score += 0.1;
+ LK.setScore(Math.floor(score));
+ scoreText.setText(Math.floor(score));
+ }
+ // Update fuel bar
+ var fuelPercent = astronaut.fuel / 100;
+ fuelBar.width = 800 * fuelPercent;
+ // Change fuel bar color based on amount
+ if (fuelPercent < 0.3) {
+ fuelBar.tint = 0xff0000;
+ } else if (fuelPercent < 0.6) {
+ fuelBar.tint = 0xffff00;
+ } else {
+ fuelBar.tint = 0x00ff00;
+ }
+ // Spawn asteroids
+ asteroidSpawnTimer++;
+ if (asteroidSpawnTimer >= asteroidSpawnRate && !gameOver) {
+ spawnAsteroid();
+ asteroidSpawnTimer = 0;
+ // Gradually increase difficulty
+ if (asteroidSpawnRate > 40) {
+ asteroidSpawnRate -= 0.2;
+ }
+ }
+ // Spawn fuel cells
+ fuelCellSpawnTimer++;
+ if (fuelCellSpawnTimer >= fuelCellSpawnRate && !gameOver) {
+ spawnFuelCell();
+ fuelCellSpawnTimer = 0;
+ }
+ // Update game objects
+ for (var i = asteroids.length - 1; i >= 0; i--) {
+ var asteroid = asteroids[i];
+ asteroid.update();
+ // Check collision with astronaut
+ if (!gameOver && !astronaut.isDead && asteroid.intersects(astronaut)) {
+ // Collision with asteroid - game over
+ LK.getSound('explosion').play();
+ astronaut.isDead = true;
+ gameOver = true;
+ // Flash screen red
+ LK.effects.flashScreen(0xff0000, 800);
+ // Update high score
+ if (score > highScore) {
+ highScore = Math.floor(score);
+ storage.highScore = highScore;
+ highScoreText.setText('BEST: ' + highScore);
+ }
+ // Show game over after a short delay
+ LK.setTimeout(function () {
+ LK.showGameOver();
+ }, 1500);
+ // Stop music
+ LK.stopMusic();
+ // Visual effect for asteroid collision
+ tween(asteroid, {
+ alpha: 0,
+ scaleX: 2,
+ scaleY: 2
+ }, {
+ duration: 500,
+ easing: tween.easeOut
+ });
+ }
+ // Remove asteroids that are marked for removal
+ if (asteroid.toRemove) {
+ asteroid.destroy();
+ asteroids.splice(i, 1);
+ }
+ }
+ // Update fuel cells
+ for (var i = fuelCells.length - 1; i >= 0; i--) {
+ var fuelCell = fuelCells[i];
+ fuelCell.update();
+ // Check collision with astronaut
+ if (!gameOver && !fuelCell.collected && fuelCell.intersects(astronaut)) {
+ // Collect fuel cell
+ fuelCell.collect();
+ // Add fuel
+ astronaut.fuel += 30;
+ if (astronaut.fuel > 100) {
+ astronaut.fuel = 100;
+ }
+ // Remove fuel cell after animation
+ LK.setTimeout(function () {
+ var index = fuelCells.indexOf(fuelCell);
+ if (index !== -1) {
+ fuelCell.destroy();
+ fuelCells.splice(index, 1);
+ }
+ }, 300);
+ }
+ // Remove fuel cells that are marked for removal
+ if (fuelCell.toRemove) {
+ fuelCell.destroy();
+ fuelCells.splice(i, 1);
+ }
+ }
+ // Update stars
+ for (var i = 0; i < stars.length; i++) {
+ stars[i].update();
+ }
+ // Check for out of fuel condition
+ if (!gameOver && astronaut.fuel <= 0 && astronaut.y > 2732 - 200) {
+ // Out of fuel and hitting the bottom - game over
+ astronaut.isDead = true;
+ gameOver = true;
+ // Flash screen
+ LK.effects.flashScreen(0xff0000, 800);
+ // Update high score
+ if (score > highScore) {
+ highScore = Math.floor(score);
+ storage.highScore = highScore;
+ highScoreText.setText('BEST: ' + highScore);
+ }
+ // Show game over after a short delay
+ LK.setTimeout(function () {
+ LK.showGameOver();
+ }, 1500);
+ // Stop music
+ LK.stopMusic();
+ }
+};
\ No newline at end of file