User prompt
can restore health when got resource
User prompt
enemy bullet low speed
User prompt
obstacle can destroy
User prompt
auto bullet shoot
User prompt
rover can attack
User prompt
rover auto slow bullet
User prompt
enemy multi direction bullet attack player
User prompt
enemy can shoot targeting player
Code edit (1 edits merged)
Please save this source code
User prompt
Mars Rover: Red Planet Rescue
Initial prompt
mars scifi game action gameboy advance style
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { highScore: 0, roverLevel: 1, speedLevel: 1, weaponLevel: 1 }); /**** * Classes ****/ var Alien = Container.expand(function () { var self = Container.call(this); var alienGraphics = self.attachAsset('alien', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 1 + Math.random() * 2; self.health = 2; self.active = true; self.points = 25; self.movePattern = Math.floor(Math.random() * 3); // 0: straight, 1: zigzag, 2: sine self.moveCounter = 0; self.update = function () { if (!self.active) { return; } self.y += self.speed; // Different movement patterns if (self.movePattern === 1) { // ZigZag if (self.moveCounter % 60 < 30) { self.x += 1.5; } else { self.x -= 1.5; } } else if (self.movePattern === 2) { // Sine wave self.x += Math.sin(self.moveCounter / 20) * 2; } self.moveCounter++; // Check if alien is off screen if (self.y > 2732 + 50) { self.active = false; } }; self.takeDamage = function (amount) { self.health -= amount; // Flash effect LK.effects.flashObject(self, 0xFF0000, 200); if (self.health <= 0) { self.destroy(); } }; self.destroy = function () { self.active = false; // Scale out and fade tween(alienGraphics, { alpha: 0, scaleX: 0.2, scaleY: 0.2, rotation: Math.PI * 2 }, { duration: 400, easing: tween.easeInOut, onFinish: function onFinish() { // Alien will be removed by the game update loop } }); }; return self; }); var Bullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.attachAsset('bullet', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 12; self.damage = 1; self.active = true; self.update = function () { if (!self.active) { return; } self.y -= self.speed; // Check if bullet is off screen if (self.y < -50) { self.active = false; } }; self.hit = function () { self.active = false; tween(bulletGraphics, { alpha: 0 }, { duration: 200, onFinish: function onFinish() { // Bullet will be removed by the game update loop } }); }; return self; }); var Obstacle = Container.expand(function () { var self = Container.call(this); var obstacleGraphics = self.attachAsset('obstacle', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 1.5 + Math.random() * 1.5; self.active = true; self.update = function () { if (!self.active) { return; } self.y += self.speed; // Slowly rotate the obstacle obstacleGraphics.rotation += 0.01; // Check if obstacle is off screen if (self.y > 2732 + 50) { self.active = false; } }; self.hit = function () { self.active = false; LK.effects.flashObject(self, 0xFF0000, 200); tween(obstacleGraphics, { alpha: 0, scaleX: 1.5, scaleY: 1.5, rotation: obstacleGraphics.rotation + Math.PI }, { duration: 300, onFinish: function onFinish() { // Obstacle will be removed by the game update loop } }); }; return self; }); var Resource = Container.expand(function () { var self = Container.call(this); var resourceGraphics = self.attachAsset('resource', { anchorX: 0.5, anchorY: 0.5 }); self.value = 10; self.active = true; self.speed = 2 + Math.random() * 2; self.update = function () { if (!self.active) { return; } self.y += self.speed; // Make the resource bob slightly side to side self.x += Math.sin(LK.ticks / 20) * 0.8; // Check if resource is off screen if (self.y > 2732 + 50) { self.active = false; } }; self.collect = function () { self.active = false; tween(resourceGraphics, { alpha: 0, scaleX: 1.5, scaleY: 1.5 }, { duration: 300, onFinish: function onFinish() { // Resource will be removed by the game update loop } }); }; return self; }); var Rover = Container.expand(function () { var self = Container.call(this); // Main rover body var roverBody = self.attachAsset('rover', { anchorX: 0.5, anchorY: 0.5 }); // Left wheel var leftWheel = LK.getAsset('wheel', { anchorX: 0.5, anchorY: 0.5, x: -45, y: 25 }); self.addChild(leftWheel); // Right wheel var rightWheel = LK.getAsset('wheel', { anchorX: 0.5, anchorY: 0.5, x: 45, y: 25 }); self.addChild(rightWheel); // Solar panel var solarPanel = LK.getAsset('solar', { anchorX: 0.5, anchorY: 0.5, x: 0, y: -20 }); self.addChild(solarPanel); // Antenna var antenna = LK.getAsset('antenna', { anchorX: 0.5, anchorY: 0.5, x: 30, y: -40 }); self.addChild(antenna); // Set rover properties self.speed = 5 + (storage.speedLevel - 1) * 0.8; self.fireRate = 800 - (storage.weaponLevel - 1) * 100; self.lastFire = 0; self.health = 3 + (storage.roverLevel - 1); self.shieldActive = false; // Initialize movement self.isMoving = false; self.targetX = 0; self.targetY = 0; self.moveTowards = function (x, y) { self.isMoving = true; self.targetX = x; self.targetY = y; }; self.stopMoving = function () { self.isMoving = false; }; self.update = function () { if (self.isMoving) { var dx = self.targetX - self.x; var dy = self.targetY - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > self.speed) { self.x += dx / distance * self.speed; self.y += dy / distance * self.speed; // Animate wheels leftWheel.rotation += 0.2; rightWheel.rotation += 0.2; } else { self.x = self.targetX; self.y = self.targetY; } } // Constrain to game bounds if (self.x < roverBody.width / 2) { self.x = roverBody.width / 2; } else if (self.x > 2048 - roverBody.width / 2) { self.x = 2048 - roverBody.width / 2; } if (self.y < roverBody.height / 2) { self.y = roverBody.height / 2; } else if (self.y > 2732 - roverBody.height / 2) { self.y = 2732 - roverBody.height / 2; } }; self.fire = function () { var currentTime = Date.now(); if (currentTime - self.lastFire < self.fireRate) { return null; } self.lastFire = currentTime; var bullet = new Bullet(); bullet.x = self.x; bullet.y = self.y - 40; bullet.damage = storage.weaponLevel; // Play shoot sound LK.getSound('shoot').play(); return bullet; }; self.takeDamage = function () { if (self.shieldActive) { return; } self.health--; LK.effects.flashObject(self, 0xFF0000, 300); LK.getSound('damage').play(); // Activate brief shield self.shieldActive = true; tween(roverBody, { alpha: 0.5 }, { duration: 200, onFinish: function onFinish() { tween(roverBody, { alpha: 1 }, { duration: 200 }); } }); // Deactivate shield after invulnerability period LK.setTimeout(function () { self.shieldActive = false; }, 1500); return self.health <= 0; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0xC0392B // Mars red }); /**** * Game Code ****/ // Game state variables var score = 0; var level = 1; var gameActive = true; var spawnRate = 120; // Frames between spawns var spawnCounter = 0; var difficultyTimer = 0; // Game objects var rover; var bullets = []; var resources = []; var aliens = []; var obstacles = []; // Background - Mars terrain var terrainBackground = LK.getAsset('terrain', { anchorX: 0, anchorY: 0, x: 0, y: 0 }); game.addChild(terrainBackground); // Create rover rover = new Rover(); rover.x = 2048 / 2; rover.y = 2732 - 200; game.addChild(rover); // UI elements var scoreTxt = new Text2('SCORE: 0', { size: 60, fill: 0xFFFFFF }); scoreTxt.anchor.set(0, 0); LK.gui.topRight.addChild(scoreTxt); scoreTxt.x = -scoreTxt.width - 20; scoreTxt.y = 20; var levelTxt = new Text2('LEVEL: 1', { size: 60, fill: 0xFFFFFF }); levelTxt.anchor.set(0, 0); LK.gui.top.addChild(levelTxt); levelTxt.y = 20; var healthTxt = new Text2('HEALTH: ' + rover.health, { size: 60, fill: 0xFFFFFF }); healthTxt.anchor.set(0, 0); LK.gui.topRight.addChild(healthTxt); healthTxt.x = -healthTxt.width - 20; healthTxt.y = 90; // Touch controls var dragNode = null; // Handle touch/mouse down game.down = function (x, y, obj) { if (!gameActive) { return; } // Fire when touching the top half of the screen if (y < 2732 / 2) { var newBullet = rover.fire(); if (newBullet) { bullets.push(newBullet); game.addChild(newBullet); } } else { // Move rover when touching the bottom half rover.moveTowards(x, y); dragNode = rover; } }; // Handle touch/mouse move game.move = function (x, y, obj) { if (!gameActive || !dragNode) { return; } rover.moveTowards(x, y); }; // Handle touch/mouse up game.up = function (x, y, obj) { dragNode = null; }; // Spawn a resource function spawnResource() { var resource = new Resource(); resource.x = 100 + Math.random() * (2048 - 200); resource.y = -50; resources.push(resource); game.addChild(resource); } // Spawn an alien function spawnAlien() { var alien = new Alien(); alien.x = 100 + Math.random() * (2048 - 200); alien.y = -50; alien.health = 1 + Math.floor(level / 3); alien.points = 25 + level * 5; aliens.push(alien); game.addChild(alien); } // Spawn an obstacle function spawnObstacle() { var obstacle = new Obstacle(); obstacle.x = 100 + Math.random() * (2048 - 200); obstacle.y = -50; obstacles.push(obstacle); game.addChild(obstacle); } // Update score display function updateScore(newScore) { score = newScore; scoreTxt.setText('SCORE: ' + score); scoreTxt.x = -scoreTxt.width - 20; // Update high score if needed if (score > storage.highScore) { storage.highScore = score; } } // Update level display function updateLevel(newLevel) { level = newLevel; levelTxt.setText('LEVEL: ' + level); // Increase difficulty with level spawnRate = Math.max(60, 120 - level * 10); } // Update health display function updateHealth() { healthTxt.setText('HEALTH: ' + rover.health); healthTxt.x = -healthTxt.width - 20; } // Start background music LK.playMusic('bgMusic', { loop: true, fade: { start: 0, end: 0.3, duration: 1000 } }); // Game update loop game.update = function () { if (!gameActive) { return; } // Increase difficulty over time difficultyTimer++; if (difficultyTimer >= 900) { // Every 15 seconds difficultyTimer = 0; updateLevel(level + 1); } // Spawn objects spawnCounter++; if (spawnCounter >= spawnRate) { spawnCounter = 0; // Randomly decide what to spawn var rand = Math.random(); if (rand < 0.5) { spawnResource(); } else if (rand < 0.8) { spawnAlien(); } else { spawnObstacle(); } } // Update rover rover.update(); // Update bullets for (var i = bullets.length - 1; i >= 0; i--) { var bullet = bullets[i]; bullet.update(); // Remove inactive bullets if (!bullet.active) { game.removeChild(bullet); bullets.splice(i, 1); } } // Update resources for (var i = resources.length - 1; i >= 0; i--) { var resource = resources[i]; resource.update(); // Check for collision with rover if (resource.active && resource.intersects(rover)) { resource.collect(); updateScore(score + resource.value); LK.getSound('collect').play(); } // Remove inactive resources if (!resource.active) { game.removeChild(resource); resources.splice(i, 1); } } // Update aliens for (var i = aliens.length - 1; i >= 0; i--) { var alien = aliens[i]; alien.update(); // Check for collision with bullets for (var j = bullets.length - 1; j >= 0; j--) { var bullet = bullets[j]; if (alien.active && bullet.active && alien.intersects(bullet)) { bullet.hit(); alien.takeDamage(bullet.damage); if (!alien.active) { updateScore(score + alien.points); } } } // Check for collision with rover if (alien.active && alien.intersects(rover)) { alien.destroy(); var gameOver = rover.takeDamage(); updateHealth(); if (gameOver) { endGame(); } } // Remove inactive aliens if (!alien.active) { game.removeChild(alien); aliens.splice(i, 1); } } // Update obstacles for (var i = obstacles.length - 1; i >= 0; i--) { var obstacle = obstacles[i]; obstacle.update(); // Check for collision with bullets for (var j = bullets.length - 1; j >= 0; j--) { var bullet = bullets[j]; if (obstacle.active && bullet.active && obstacle.intersects(bullet)) { bullet.hit(); // Obstacles are not destroyed by bullets, but bullets are destroyed } } // Check for collision with rover if (obstacle.active && obstacle.intersects(rover)) { obstacle.hit(); var gameOver = rover.takeDamage(); updateHealth(); if (gameOver) { endGame(); } } // Remove inactive obstacles if (!obstacle.active) { game.removeChild(obstacle); obstacles.splice(i, 1); } } }; // End the game function endGame() { gameActive = false; // Save final score to leaderboard LK.setScore(score); // Play explosion sound LK.getSound('explosion').play(); // Flash screen and show game over LK.effects.flashScreen(0xFF0000, 1000); LK.setTimeout(function () { LK.showGameOver(); }, 1000); }
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,582 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+var storage = LK.import("@upit/storage.v1", {
+ highScore: 0,
+ roverLevel: 1,
+ speedLevel: 1,
+ weaponLevel: 1
+});
+
+/****
+* Classes
+****/
+var Alien = Container.expand(function () {
+ var self = Container.call(this);
+ var alienGraphics = self.attachAsset('alien', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 1 + Math.random() * 2;
+ self.health = 2;
+ self.active = true;
+ self.points = 25;
+ self.movePattern = Math.floor(Math.random() * 3); // 0: straight, 1: zigzag, 2: sine
+ self.moveCounter = 0;
+ self.update = function () {
+ if (!self.active) {
+ return;
+ }
+ self.y += self.speed;
+ // Different movement patterns
+ if (self.movePattern === 1) {
+ // ZigZag
+ if (self.moveCounter % 60 < 30) {
+ self.x += 1.5;
+ } else {
+ self.x -= 1.5;
+ }
+ } else if (self.movePattern === 2) {
+ // Sine wave
+ self.x += Math.sin(self.moveCounter / 20) * 2;
+ }
+ self.moveCounter++;
+ // Check if alien is off screen
+ if (self.y > 2732 + 50) {
+ self.active = false;
+ }
+ };
+ self.takeDamage = function (amount) {
+ self.health -= amount;
+ // Flash effect
+ LK.effects.flashObject(self, 0xFF0000, 200);
+ if (self.health <= 0) {
+ self.destroy();
+ }
+ };
+ self.destroy = function () {
+ self.active = false;
+ // Scale out and fade
+ tween(alienGraphics, {
+ alpha: 0,
+ scaleX: 0.2,
+ scaleY: 0.2,
+ rotation: Math.PI * 2
+ }, {
+ duration: 400,
+ easing: tween.easeInOut,
+ onFinish: function onFinish() {
+ // Alien will be removed by the game update loop
+ }
+ });
+ };
+ return self;
+});
+var Bullet = Container.expand(function () {
+ var self = Container.call(this);
+ var bulletGraphics = self.attachAsset('bullet', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 12;
+ self.damage = 1;
+ self.active = true;
+ self.update = function () {
+ if (!self.active) {
+ return;
+ }
+ self.y -= self.speed;
+ // Check if bullet is off screen
+ if (self.y < -50) {
+ self.active = false;
+ }
+ };
+ self.hit = function () {
+ self.active = false;
+ tween(bulletGraphics, {
+ alpha: 0
+ }, {
+ duration: 200,
+ onFinish: function onFinish() {
+ // Bullet will be removed by the game update loop
+ }
+ });
+ };
+ return self;
+});
+var Obstacle = Container.expand(function () {
+ var self = Container.call(this);
+ var obstacleGraphics = self.attachAsset('obstacle', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 1.5 + Math.random() * 1.5;
+ self.active = true;
+ self.update = function () {
+ if (!self.active) {
+ return;
+ }
+ self.y += self.speed;
+ // Slowly rotate the obstacle
+ obstacleGraphics.rotation += 0.01;
+ // Check if obstacle is off screen
+ if (self.y > 2732 + 50) {
+ self.active = false;
+ }
+ };
+ self.hit = function () {
+ self.active = false;
+ LK.effects.flashObject(self, 0xFF0000, 200);
+ tween(obstacleGraphics, {
+ alpha: 0,
+ scaleX: 1.5,
+ scaleY: 1.5,
+ rotation: obstacleGraphics.rotation + Math.PI
+ }, {
+ duration: 300,
+ onFinish: function onFinish() {
+ // Obstacle will be removed by the game update loop
+ }
+ });
+ };
+ return self;
+});
+var Resource = Container.expand(function () {
+ var self = Container.call(this);
+ var resourceGraphics = self.attachAsset('resource', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.value = 10;
+ self.active = true;
+ self.speed = 2 + Math.random() * 2;
+ self.update = function () {
+ if (!self.active) {
+ return;
+ }
+ self.y += self.speed;
+ // Make the resource bob slightly side to side
+ self.x += Math.sin(LK.ticks / 20) * 0.8;
+ // Check if resource is off screen
+ if (self.y > 2732 + 50) {
+ self.active = false;
+ }
+ };
+ self.collect = function () {
+ self.active = false;
+ tween(resourceGraphics, {
+ alpha: 0,
+ scaleX: 1.5,
+ scaleY: 1.5
+ }, {
+ duration: 300,
+ onFinish: function onFinish() {
+ // Resource will be removed by the game update loop
+ }
+ });
+ };
+ return self;
+});
+var Rover = Container.expand(function () {
+ var self = Container.call(this);
+ // Main rover body
+ var roverBody = self.attachAsset('rover', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ // Left wheel
+ var leftWheel = LK.getAsset('wheel', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: -45,
+ y: 25
+ });
+ self.addChild(leftWheel);
+ // Right wheel
+ var rightWheel = LK.getAsset('wheel', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 45,
+ y: 25
+ });
+ self.addChild(rightWheel);
+ // Solar panel
+ var solarPanel = LK.getAsset('solar', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 0,
+ y: -20
+ });
+ self.addChild(solarPanel);
+ // Antenna
+ var antenna = LK.getAsset('antenna', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 30,
+ y: -40
+ });
+ self.addChild(antenna);
+ // Set rover properties
+ self.speed = 5 + (storage.speedLevel - 1) * 0.8;
+ self.fireRate = 800 - (storage.weaponLevel - 1) * 100;
+ self.lastFire = 0;
+ self.health = 3 + (storage.roverLevel - 1);
+ self.shieldActive = false;
+ // Initialize movement
+ self.isMoving = false;
+ self.targetX = 0;
+ self.targetY = 0;
+ self.moveTowards = function (x, y) {
+ self.isMoving = true;
+ self.targetX = x;
+ self.targetY = y;
+ };
+ self.stopMoving = function () {
+ self.isMoving = false;
+ };
+ self.update = function () {
+ if (self.isMoving) {
+ var dx = self.targetX - self.x;
+ var dy = self.targetY - self.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance > self.speed) {
+ self.x += dx / distance * self.speed;
+ self.y += dy / distance * self.speed;
+ // Animate wheels
+ leftWheel.rotation += 0.2;
+ rightWheel.rotation += 0.2;
+ } else {
+ self.x = self.targetX;
+ self.y = self.targetY;
+ }
+ }
+ // Constrain to game bounds
+ if (self.x < roverBody.width / 2) {
+ self.x = roverBody.width / 2;
+ } else if (self.x > 2048 - roverBody.width / 2) {
+ self.x = 2048 - roverBody.width / 2;
+ }
+ if (self.y < roverBody.height / 2) {
+ self.y = roverBody.height / 2;
+ } else if (self.y > 2732 - roverBody.height / 2) {
+ self.y = 2732 - roverBody.height / 2;
+ }
+ };
+ self.fire = function () {
+ var currentTime = Date.now();
+ if (currentTime - self.lastFire < self.fireRate) {
+ return null;
+ }
+ self.lastFire = currentTime;
+ var bullet = new Bullet();
+ bullet.x = self.x;
+ bullet.y = self.y - 40;
+ bullet.damage = storage.weaponLevel;
+ // Play shoot sound
+ LK.getSound('shoot').play();
+ return bullet;
+ };
+ self.takeDamage = function () {
+ if (self.shieldActive) {
+ return;
+ }
+ self.health--;
+ LK.effects.flashObject(self, 0xFF0000, 300);
+ LK.getSound('damage').play();
+ // Activate brief shield
+ self.shieldActive = true;
+ tween(roverBody, {
+ alpha: 0.5
+ }, {
+ duration: 200,
+ onFinish: function onFinish() {
+ tween(roverBody, {
+ alpha: 1
+ }, {
+ duration: 200
+ });
+ }
+ });
+ // Deactivate shield after invulnerability period
+ LK.setTimeout(function () {
+ self.shieldActive = false;
+ }, 1500);
+ return self.health <= 0;
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0xC0392B // Mars red
+});
+
+/****
+* Game Code
+****/
+// Game state variables
+var score = 0;
+var level = 1;
+var gameActive = true;
+var spawnRate = 120; // Frames between spawns
+var spawnCounter = 0;
+var difficultyTimer = 0;
+// Game objects
+var rover;
+var bullets = [];
+var resources = [];
+var aliens = [];
+var obstacles = [];
+// Background - Mars terrain
+var terrainBackground = LK.getAsset('terrain', {
+ anchorX: 0,
+ anchorY: 0,
+ x: 0,
+ y: 0
+});
+game.addChild(terrainBackground);
+// Create rover
+rover = new Rover();
+rover.x = 2048 / 2;
+rover.y = 2732 - 200;
+game.addChild(rover);
+// UI elements
+var scoreTxt = new Text2('SCORE: 0', {
+ size: 60,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0, 0);
+LK.gui.topRight.addChild(scoreTxt);
+scoreTxt.x = -scoreTxt.width - 20;
+scoreTxt.y = 20;
+var levelTxt = new Text2('LEVEL: 1', {
+ size: 60,
+ fill: 0xFFFFFF
+});
+levelTxt.anchor.set(0, 0);
+LK.gui.top.addChild(levelTxt);
+levelTxt.y = 20;
+var healthTxt = new Text2('HEALTH: ' + rover.health, {
+ size: 60,
+ fill: 0xFFFFFF
+});
+healthTxt.anchor.set(0, 0);
+LK.gui.topRight.addChild(healthTxt);
+healthTxt.x = -healthTxt.width - 20;
+healthTxt.y = 90;
+// Touch controls
+var dragNode = null;
+// Handle touch/mouse down
+game.down = function (x, y, obj) {
+ if (!gameActive) {
+ return;
+ }
+ // Fire when touching the top half of the screen
+ if (y < 2732 / 2) {
+ var newBullet = rover.fire();
+ if (newBullet) {
+ bullets.push(newBullet);
+ game.addChild(newBullet);
+ }
+ } else {
+ // Move rover when touching the bottom half
+ rover.moveTowards(x, y);
+ dragNode = rover;
+ }
+};
+// Handle touch/mouse move
+game.move = function (x, y, obj) {
+ if (!gameActive || !dragNode) {
+ return;
+ }
+ rover.moveTowards(x, y);
+};
+// Handle touch/mouse up
+game.up = function (x, y, obj) {
+ dragNode = null;
+};
+// Spawn a resource
+function spawnResource() {
+ var resource = new Resource();
+ resource.x = 100 + Math.random() * (2048 - 200);
+ resource.y = -50;
+ resources.push(resource);
+ game.addChild(resource);
+}
+// Spawn an alien
+function spawnAlien() {
+ var alien = new Alien();
+ alien.x = 100 + Math.random() * (2048 - 200);
+ alien.y = -50;
+ alien.health = 1 + Math.floor(level / 3);
+ alien.points = 25 + level * 5;
+ aliens.push(alien);
+ game.addChild(alien);
+}
+// Spawn an obstacle
+function spawnObstacle() {
+ var obstacle = new Obstacle();
+ obstacle.x = 100 + Math.random() * (2048 - 200);
+ obstacle.y = -50;
+ obstacles.push(obstacle);
+ game.addChild(obstacle);
+}
+// Update score display
+function updateScore(newScore) {
+ score = newScore;
+ scoreTxt.setText('SCORE: ' + score);
+ scoreTxt.x = -scoreTxt.width - 20;
+ // Update high score if needed
+ if (score > storage.highScore) {
+ storage.highScore = score;
+ }
+}
+// Update level display
+function updateLevel(newLevel) {
+ level = newLevel;
+ levelTxt.setText('LEVEL: ' + level);
+ // Increase difficulty with level
+ spawnRate = Math.max(60, 120 - level * 10);
+}
+// Update health display
+function updateHealth() {
+ healthTxt.setText('HEALTH: ' + rover.health);
+ healthTxt.x = -healthTxt.width - 20;
+}
+// Start background music
+LK.playMusic('bgMusic', {
+ loop: true,
+ fade: {
+ start: 0,
+ end: 0.3,
+ duration: 1000
+ }
+});
+// Game update loop
+game.update = function () {
+ if (!gameActive) {
+ return;
+ }
+ // Increase difficulty over time
+ difficultyTimer++;
+ if (difficultyTimer >= 900) {
+ // Every 15 seconds
+ difficultyTimer = 0;
+ updateLevel(level + 1);
+ }
+ // Spawn objects
+ spawnCounter++;
+ if (spawnCounter >= spawnRate) {
+ spawnCounter = 0;
+ // Randomly decide what to spawn
+ var rand = Math.random();
+ if (rand < 0.5) {
+ spawnResource();
+ } else if (rand < 0.8) {
+ spawnAlien();
+ } else {
+ spawnObstacle();
+ }
+ }
+ // Update rover
+ rover.update();
+ // Update bullets
+ for (var i = bullets.length - 1; i >= 0; i--) {
+ var bullet = bullets[i];
+ bullet.update();
+ // Remove inactive bullets
+ if (!bullet.active) {
+ game.removeChild(bullet);
+ bullets.splice(i, 1);
+ }
+ }
+ // Update resources
+ for (var i = resources.length - 1; i >= 0; i--) {
+ var resource = resources[i];
+ resource.update();
+ // Check for collision with rover
+ if (resource.active && resource.intersects(rover)) {
+ resource.collect();
+ updateScore(score + resource.value);
+ LK.getSound('collect').play();
+ }
+ // Remove inactive resources
+ if (!resource.active) {
+ game.removeChild(resource);
+ resources.splice(i, 1);
+ }
+ }
+ // Update aliens
+ for (var i = aliens.length - 1; i >= 0; i--) {
+ var alien = aliens[i];
+ alien.update();
+ // Check for collision with bullets
+ for (var j = bullets.length - 1; j >= 0; j--) {
+ var bullet = bullets[j];
+ if (alien.active && bullet.active && alien.intersects(bullet)) {
+ bullet.hit();
+ alien.takeDamage(bullet.damage);
+ if (!alien.active) {
+ updateScore(score + alien.points);
+ }
+ }
+ }
+ // Check for collision with rover
+ if (alien.active && alien.intersects(rover)) {
+ alien.destroy();
+ var gameOver = rover.takeDamage();
+ updateHealth();
+ if (gameOver) {
+ endGame();
+ }
+ }
+ // Remove inactive aliens
+ if (!alien.active) {
+ game.removeChild(alien);
+ aliens.splice(i, 1);
+ }
+ }
+ // Update obstacles
+ for (var i = obstacles.length - 1; i >= 0; i--) {
+ var obstacle = obstacles[i];
+ obstacle.update();
+ // Check for collision with bullets
+ for (var j = bullets.length - 1; j >= 0; j--) {
+ var bullet = bullets[j];
+ if (obstacle.active && bullet.active && obstacle.intersects(bullet)) {
+ bullet.hit();
+ // Obstacles are not destroyed by bullets, but bullets are destroyed
+ }
+ }
+ // Check for collision with rover
+ if (obstacle.active && obstacle.intersects(rover)) {
+ obstacle.hit();
+ var gameOver = rover.takeDamage();
+ updateHealth();
+ if (gameOver) {
+ endGame();
+ }
+ }
+ // Remove inactive obstacles
+ if (!obstacle.active) {
+ game.removeChild(obstacle);
+ obstacles.splice(i, 1);
+ }
+ }
+};
+// End the game
+function endGame() {
+ gameActive = false;
+ // Save final score to leaderboard
+ LK.setScore(score);
+ // Play explosion sound
+ LK.getSound('explosion').play();
+ // Flash screen and show game over
+ LK.effects.flashScreen(0xFF0000, 1000);
+ LK.setTimeout(function () {
+ LK.showGameOver();
+ }, 1000);
+}
\ No newline at end of file
vertical gray top down image mars scifi rover. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
top down image purple squid alien. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
blue thunder orb entity. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
yellow bright aurora. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows