/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { highScore: 0 }); /**** * Classes ****/ var Asteroid = Container.expand(function () { var self = Container.call(this); var asteroidGraphics = self.attachAsset('asteroid', { anchorX: 0.5, anchorY: 0.5 }); // Randomize asteroid appearance asteroidGraphics.rotation = Math.random() * Math.PI * 2; var scale = 0.6 + Math.random() * 0.8; asteroidGraphics.scale.set(scale, scale); self.speed = 2 + Math.random() * 3; self.rotationSpeed = (Math.random() - 0.5) * 0.05; self.width = asteroidGraphics.width * scale; self.height = asteroidGraphics.height * scale; self.update = function () { self.y += self.speed; asteroidGraphics.rotation += self.rotationSpeed; }; 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 = -8; self.width = bulletGraphics.width; self.height = bulletGraphics.height; self.update = function () { self.y += self.speed; }; return self; }); var PowerUp = Container.expand(function () { var self = Container.call(this); var powerupGraphics = self.attachAsset('powerup', { anchorX: 0.5, anchorY: 0.5 }); self.type = Math.floor(Math.random() * 3); // 0: shield, 1: slow motion, 2: blaster // Set color based on powerup type if (self.type === 0) { powerupGraphics.tint = 0x3498db; // Blue for shield } else if (self.type === 1) { powerupGraphics.tint = 0xf1c40f; // Yellow for slow motion } else { powerupGraphics.tint = 0xe74c3c; // Red for blaster } self.speed = 1.5 + Math.random() * 1.5; self.width = powerupGraphics.width; self.height = powerupGraphics.height; self.update = function () { self.y += self.speed; powerupGraphics.rotation += 0.02; }; return self; }); var Spaceship = Container.expand(function () { var self = Container.call(this); var shipGraphics = self.attachAsset('spaceship', { anchorX: 0.5, anchorY: 0.5 }); self.shield = self.attachAsset('shield', { anchorX: 0.5, anchorY: 0.5, alpha: 0 }); self.hasShield = false; self.canShoot = false; self.width = shipGraphics.width; self.height = shipGraphics.height; self.activateShield = function (duration) { self.hasShield = true; self.shield.alpha = 0.5; // Deactivate shield after duration LK.setTimeout(function () { self.deactivateShield(); }, duration); }; self.deactivateShield = function () { self.hasShield = false; self.shield.alpha = 0; }; self.activateBlaster = function (duration) { self.canShoot = true; // Disable blaster after duration LK.setTimeout(function () { self.canShoot = false; }, duration); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ game.setBackgroundColor(0x000022); // Deep space blue // Game variables var spaceship; var asteroids = []; var powerups = []; var bullets = []; var score = 0; var gameSpeed = 1; // Used for slow-motion effect var lastAsteroidTime = 0; var lastPowerupTime = 0; var isSlowMotion = false; var gameStartTime = Date.now(); var dragNode = null; // Load high score var highScore = storage.highScore || 0; // Create score text var scoreTxt = new Text2('Score: 0', { size: 50, fill: 0xFFFFFF }); scoreTxt.anchor.set(0, 0); LK.gui.topRight.addChild(scoreTxt); scoreTxt.x = -250; scoreTxt.y = 50; // Create high score text var highScoreTxt = new Text2('High Score: ' + highScore, { size: 40, fill: 0xAAAAAA }); highScoreTxt.anchor.set(0, 0); LK.gui.topRight.addChild(highScoreTxt); highScoreTxt.x = -250; highScoreTxt.y = 110; // Initialize game elements function initGame() { // Start game music LK.playMusic('space_music', { fade: { start: 0, end: 0.7, duration: 1000 } }); // Reset score score = 0; LK.setScore(0); updateScoreDisplay(); // Reset game speed gameSpeed = 1; // Record start time gameStartTime = Date.now(); // Create spaceship spaceship = new Spaceship(); spaceship.x = 2048 / 2; spaceship.y = 2732 - 300; game.addChild(spaceship); // Clear existing arrays clearGameElements(); // Reset timers lastAsteroidTime = 0; lastPowerupTime = 0; } function clearGameElements() { // Clear all asteroids for (var i = asteroids.length - 1; i >= 0; i--) { asteroids[i].destroy(); } asteroids = []; // Clear all powerups for (var i = powerups.length - 1; i >= 0; i--) { powerups[i].destroy(); } powerups = []; // Clear all bullets for (var i = bullets.length - 1; i >= 0; i--) { bullets[i].destroy(); } bullets = []; } function updateScoreDisplay() { scoreTxt.setText('Score: ' + score); highScoreTxt.setText('High Score: ' + highScore); } function createAsteroid() { var asteroid = new Asteroid(); asteroid.x = Math.random() * 2048; asteroid.y = -100; asteroids.push(asteroid); game.addChild(asteroid); } function createPowerup() { var powerup = new PowerUp(); powerup.x = 100 + Math.random() * (2048 - 200); powerup.y = -100; powerups.push(powerup); game.addChild(powerup); } function createBullet() { var bullet = new Bullet(); bullet.x = spaceship.x; bullet.y = spaceship.y - 60; bullets.push(bullet); game.addChild(bullet); LK.getSound('shoot').play(); } function activateSlowMotion(duration) { isSlowMotion = true; gameSpeed = 0.5; // Return to normal speed after duration LK.setTimeout(function () { isSlowMotion = false; gameSpeed = 1; }, duration); } function handleCollision() { // Flash the screen red LK.effects.flashScreen(0xff0000, 500); // Play explosion sound LK.getSound('explosion').play(); // Flash the ship LK.effects.flashObject(spaceship, 0xff0000, 500); // Store high score if (score > highScore) { highScore = score; storage.highScore = highScore; updateScoreDisplay(); } // Show game over LK.setTimeout(function () { LK.showGameOver(); }, 500); } // Event handlers function handleMove(x, y, obj) { if (dragNode) { // Keep spaceship within game bounds dragNode.x = Math.max(dragNode.width / 2, Math.min(2048 - dragNode.width / 2, x)); dragNode.y = Math.max(dragNode.height / 2, Math.min(2732 - dragNode.height / 2, y)); } } game.move = handleMove; game.down = function (x, y, obj) { dragNode = spaceship; handleMove(x, y, obj); }; game.up = function (x, y, obj) { dragNode = null; }; // Game update function game.update = function () { // Increment score based on survival time (10 points per second) var currentTime = Date.now(); var elapsedSeconds = Math.floor((currentTime - gameStartTime) / 1000); score = elapsedSeconds * 10; LK.setScore(score); updateScoreDisplay(); // Spawn asteroids with increasing frequency var difficulty = Math.min(10, 1 + Math.floor(elapsedSeconds / 10)); var asteroidInterval = Math.max(30, 60 - difficulty * 5); if (LK.ticks - lastAsteroidTime > asteroidInterval / gameSpeed) { createAsteroid(); lastAsteroidTime = LK.ticks; } // Occasionally spawn power-ups if (LK.ticks - lastPowerupTime > 300 / gameSpeed && Math.random() < 0.01) { createPowerup(); lastPowerupTime = LK.ticks; } // Update asteroids for (var i = asteroids.length - 1; i >= 0; i--) { var asteroid = asteroids[i]; // Increase asteroid speed every 100 points if (score % 100 === 0 && score !== 0) { asteroid.speed += 0.5; } // Apply game speed to movement asteroid.speed = asteroid.speed * gameSpeed; asteroid.update(); asteroid.speed = asteroid.speed / gameSpeed; // Check if asteroid is off screen if (asteroid.y > 2732 + 100) { asteroid.destroy(); asteroids.splice(i, 1); continue; } // Check for collision with spaceship if (spaceship && asteroid.intersects(spaceship)) { if (spaceship.hasShield) { // Shield protects the spaceship spaceship.deactivateShield(); asteroid.destroy(); asteroids.splice(i, 1); score += 25; // Bonus for destroying asteroid with shield continue; } else { // Game over on collision handleCollision(); return; } } // Check for collision with bullets for (var j = bullets.length - 1; j >= 0; j--) { if (asteroid.intersects(bullets[j])) { asteroid.destroy(); asteroids.splice(i, 1); bullets[j].destroy(); bullets.splice(j, 1); score += 50; // Bonus for destroying asteroid with bullet break; } } } // Update powerups for (var i = powerups.length - 1; i >= 0; i--) { var powerup = powerups[i]; // Apply game speed to movement powerup.speed = powerup.speed * gameSpeed; powerup.update(); powerup.speed = powerup.speed / gameSpeed; // Check if powerup is off screen if (powerup.y > 2732 + 100) { powerup.destroy(); powerups.splice(i, 1); continue; } // Check for collision with spaceship if (spaceship && powerup.intersects(spaceship)) { // Play powerup sound LK.getSound('powerup_collect').play(); // Apply powerup effect if (powerup.type === 0) { // Shield spaceship.activateShield(10000); } else if (powerup.type === 1) { // Slow motion activateSlowMotion(8000); } else { // Blaster spaceship.activateBlaster(12000); } // Remove powerup powerup.destroy(); powerups.splice(i, 1); } } // Update bullets for (var i = bullets.length - 1; i >= 0; i--) { var bullet = bullets[i]; bullet.update(); // Remove bullets that go off screen if (bullet.y < -100) { bullet.destroy(); bullets.splice(i, 1); } } // Fire bullet if spaceship has blaster and space is pressed if (spaceship && spaceship.canShoot && LK.ticks % 15 === 0) { createBullet(); } }; // Initialize the game initGame();
===================================================================
--- original.js
+++ change.js
@@ -284,8 +284,12 @@
}
// Update asteroids
for (var i = asteroids.length - 1; i >= 0; i--) {
var asteroid = asteroids[i];
+ // Increase asteroid speed every 100 points
+ if (score % 100 === 0 && score !== 0) {
+ asteroid.speed += 0.5;
+ }
// Apply game speed to movement
asteroid.speed = asteroid.speed * gameSpeed;
asteroid.update();
asteroid.speed = asteroid.speed / gameSpeed;