User prompt
Düşmanlar 5 saniyede 3 kere ateş etsin
User prompt
Düşmanlar 5 saniyede 2 kere ateş etsin
User prompt
Düşmanlar 5 saniyede ateş etsin
User prompt
Düşmanlar saniyede 2 kere ateş etsin
User prompt
Karakter sadece aynı hizada sağa sola hareket edebilsin
User prompt
Boss u yendikten sonra oyun bitsin
User prompt
Boss 2. Levelden sonra gelsin
User prompt
2. Boss 5 level sonra gelsin
User prompt
Boss 1. Levelden sonra gelsin
User prompt
Boss daha az ateş etsin
User prompt
2 . Levelden sonra ekranın üst orta kısmında daha büyük düşman olsun ve onun ölmesi için 30 mermi atamak gereksin ayrıca büyük düşman geldiğinde diğer düşmanlar gelmesin ve büyük düşman küçük düşmana göre daha çok ateş etsin
User prompt
Enemy ler daha çok gelsin ama ateş etmeleri az olsun
User prompt
Oyunda sadece enemy ve spaceship olsun
User prompt
Shield olmasın
Code edit (1 edits merged)
Please save this source code
User prompt
Retro Cosmos
Initial prompt
Ateri oyunu
/**** * 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, scaleX: 0.8 + Math.random() * 0.6, // Random size scaleY: 0.8 + Math.random() * 0.6 }); self.rotationSpeed = (Math.random() - 0.5) * 0.1; self.speedY = 2 + Math.random() * 3; self.speedX = (Math.random() - 0.5) * 2; self.update = function () { self.y += self.speedY; self.x += self.speedX; asteroidGraphics.rotation += self.rotationSpeed; // Loop sides of the screen if (self.x < -50) self.x = 2048 + 50; if (self.x > 2048 + 50) self.x = -50; // Remove if off bottom of screen if (self.y > 2732 + 100) { return true; // Mark for removal } return false; }; 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 = -10; self.update = function () { self.y += self.speed; // Remove bullets that go off screen if (self.y < -50) { return true; // Return true to mark for removal } return false; }; return self; }); var Enemy = Container.expand(function () { var self = Container.call(this); var enemyGraphics = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); self.speedY = 1.5 + Math.random() * 1.5; self.movePattern = Math.floor(Math.random() * 3); // 0: straight, 1: zigzag, 2: sine self.patternOffset = Math.random() * 100; self.shootTimer = 60 + Math.floor(Math.random() * 120); self.update = function () { self.y += self.speedY; // Different movement patterns switch (self.movePattern) { case 1: // Zigzag self.x += Math.sin(LK.ticks * 0.05 + self.patternOffset) * 3; break; case 2: // Sine wave self.x = self.startX + Math.sin(LK.ticks * 0.03 + self.patternOffset) * 150; break; } // Shoot occasionally self.shootTimer--; if (self.shootTimer <= 0) { // Create enemy bullet var bullet = new Bullet(); bullet.speed = 5; // Bullets move down bullet.x = self.x; bullet.y = self.y + 30; game.addChild(bullet); enemyBullets.push(bullet); self.shootTimer = 60 + Math.floor(Math.random() * 120); } // Remove if off bottom of screen if (self.y > 2732 + 100) { return true; // Mark for removal } return false; }; return self; }); var Gem = Container.expand(function () { var self = Container.call(this); var gemGraphics = self.attachAsset('gem', { anchorX: 0.5, anchorY: 0.5 }); self.speedY = 2 + Math.random() * 2; self.rotationSpeed = (Math.random() - 0.5) * 0.1; self.value = 10; self.update = function () { self.y += self.speedY; gemGraphics.rotation += self.rotationSpeed; // Remove if off bottom of screen if (self.y > 2732 + 50) { return true; // Mark for removal } return false; }; return self; }); var Powerup = Container.expand(function () { var self = Container.call(this); var powerupGraphics = self.attachAsset('powerup', { anchorX: 0.5, anchorY: 0.5 }); self.speedY = 2 + Math.random(); self.type = Math.floor(Math.random() * 2); // 0: shield, 1: double fire // Tint based on type if (self.type === 0) { powerupGraphics.tint = 0x2ecc71; // Green for shield } else { powerupGraphics.tint = 0xe74c3c; // Red for double fire } self.update = function () { self.y += self.speedY; powerupGraphics.rotation += 0.03; // Remove if off bottom of screen if (self.y > 2732 + 50) { return true; // Mark for removal } return false; }; return self; }); var Spaceship = Container.expand(function () { var self = Container.call(this); var spaceshipGraphics = self.attachAsset('spaceship', { anchorX: 0.5, anchorY: 0.5 }); self.shield = false; self.shieldTime = 0; self.shieldGraphic = null; self.shootCooldown = 0; self.shootDelay = 15; self.doubleFire = false; self.powerupTime = 0; self.speed = 5; self.lives = 3; self.activateShield = function (duration) { self.shield = true; self.shieldTime = duration; if (!self.shieldGraphic) { self.shieldGraphic = self.attachAsset('shield', { anchorX: 0.5, anchorY: 0.5, alpha: 0.5 }); } else { self.shieldGraphic.visible = true; } }; self.deactivateShield = function () { self.shield = false; if (self.shieldGraphic) { self.shieldGraphic.visible = false; } }; self.activateDoubleFire = function (duration) { self.doubleFire = true; self.powerupTime = duration; }; self.deactivateDoubleFire = function () { self.doubleFire = false; }; self.shoot = function () { if (self.shootCooldown <= 0) { self.shootCooldown = self.shootDelay; if (self.doubleFire) { // Create two bullets side by side var bullet1 = new Bullet(); bullet1.x = self.x - 20; bullet1.y = self.y; game.addChild(bullet1); bullets.push(bullet1); var bullet2 = new Bullet(); bullet2.x = self.x + 20; bullet2.y = self.y; game.addChild(bullet2); bullets.push(bullet2); } else { // Create a single bullet var bullet = new Bullet(); bullet.x = self.x; bullet.y = self.y; game.addChild(bullet); bullets.push(bullet); } // Play shoot sound LK.getSound('shoot').play(); return true; } return false; }; self.update = function () { // Update cooldown if (self.shootCooldown > 0) { self.shootCooldown--; } // Update shield time if (self.shield && self.shieldTime > 0) { self.shieldTime--; if (self.shieldTime <= 0) { self.deactivateShield(); } } // Update powerup time if (self.doubleFire && self.powerupTime > 0) { self.powerupTime--; if (self.powerupTime <= 0) { self.deactivateDoubleFire(); } } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ // Game state var gameRunning = true; var level = 1; var score = 0; var lives = 3; var asteroidSpawnRate = 120; var enemySpawnRate = 300; var gemSpawnRate = 180; var powerupSpawnRate = 600; var spawnCountdown = 60; var enemySpawnCountdown = 300; var gemSpawnCountdown = 120; var powerupSpawnCountdown = 600; // Game elements var spaceship; var bullets = []; var enemyBullets = []; var asteroids = []; var enemies = []; var gems = []; var powerups = []; // Create UI elements var scoreTxt = new Text2('Score: 0', { size: 50, fill: 0xFFFFFF }); scoreTxt.anchor.set(0, 0); LK.gui.topRight.addChild(scoreTxt); scoreTxt.x = -250; // Offset from right edge var levelTxt = new Text2('Level: 1', { size: 50, fill: 0xFFFFFF }); levelTxt.anchor.set(0.5, 0); LK.gui.top.addChild(levelTxt); levelTxt.y = 10; var livesTxt = new Text2('Lives: 3', { size: 50, fill: 0xFFFFFF }); livesTxt.anchor.set(0, 0); LK.gui.topLeft.addChild(livesTxt); livesTxt.x = 120; // Offset to avoid menu button livesTxt.y = 10; var highScoreTxt = new Text2('High Score: ' + storage.highScore, { size: 40, fill: 0xFFFFFF }); highScoreTxt.anchor.set(1, 0); LK.gui.topRight.addChild(highScoreTxt); highScoreTxt.y = 60; // Drag handling var isDragging = false; // Initialize game elements function initializeGame() { // Create player spaceship spaceship = new Spaceship(); spaceship.x = 2048 / 2; spaceship.y = 2732 - 200; game.addChild(spaceship); // Reset variables bullets = []; enemyBullets = []; asteroids = []; enemies = []; gems = []; powerups = []; level = 1; score = 0; lives = 3; // Update UI updateUI(); // Start game music LK.playMusic('gameMusic'); } // Update UI elements function updateUI() { scoreTxt.setText('Score: ' + score); levelTxt.setText('Level: ' + level); livesTxt.setText('Lives: ' + lives); highScoreTxt.setText('High Score: ' + storage.highScore); // Update score in LK system LK.setScore(score); } // Create explosion effect function createExplosion(x, y, color) { // Flash object var explosionObj = new Container(); explosionObj.x = x; explosionObj.y = y; var explosionGraphic = explosionObj.attachAsset('asteroid', { anchorX: 0.5, anchorY: 0.5, alpha: 0.7 }); game.addChild(explosionObj); // Animate explosion tween(explosionGraphic, { scaleX: 2, scaleY: 2, alpha: 0 }, { duration: 500, easing: tween.easeOut, onFinish: function onFinish() { explosionObj.destroy(); } }); // Play explosion sound LK.getSound('explosion').play(); } // Handle collisions function checkCollisions() { // Player bullets with asteroids for (var i = bullets.length - 1; i >= 0; i--) { var bullet = bullets[i]; // Check collision with asteroids for (var j = asteroids.length - 1; j >= 0; j--) { var asteroid = asteroids[j]; if (bullet.intersects(asteroid)) { // Create explosion createExplosion(asteroid.x, asteroid.y, 0x7f8c8d); // Remove asteroid and bullet asteroid.destroy(); asteroids.splice(j, 1); bullet.destroy(); bullets.splice(i, 1); // Increase score score += 5; updateUI(); break; // Bullet can only hit one asteroid } } // Check collision with enemies if (bullets[i]) { // Make sure bullet still exists for (var j = enemies.length - 1; j >= 0; j--) { var enemy = enemies[j]; if (bullet.intersects(enemy)) { // Create explosion createExplosion(enemy.x, enemy.y, 0xe74c3c); // Remove enemy and bullet enemy.destroy(); enemies.splice(j, 1); bullet.destroy(); bullets.splice(i, 1); // Increase score score += 15; updateUI(); break; // Bullet can only hit one enemy } } } } // Check player collisions with asteroids if (!spaceship.shield) { for (var i = asteroids.length - 1; i >= 0; i--) { if (spaceship.intersects(asteroids[i])) { // Create explosion createExplosion(asteroids[i].x, asteroids[i].y, 0x7f8c8d); // Remove asteroid asteroids[i].destroy(); asteroids.splice(i, 1); // Player loses a life lives--; updateUI(); if (lives <= 0) { gameOver(); } else { // Give temporary shield spaceship.activateShield(120); } } } } // Check player collisions with enemy ships if (!spaceship.shield) { for (var i = enemies.length - 1; i >= 0; i--) { if (spaceship.intersects(enemies[i])) { // Create explosion createExplosion(enemies[i].x, enemies[i].y, 0xe74c3c); // Remove enemy enemies[i].destroy(); enemies.splice(i, 1); // Player loses a life lives--; updateUI(); if (lives <= 0) { gameOver(); } else { // Give temporary shield spaceship.activateShield(120); } } } } // Check player collisions with enemy bullets if (!spaceship.shield) { for (var i = enemyBullets.length - 1; i >= 0; i--) { if (spaceship.intersects(enemyBullets[i])) { // Create small explosion createExplosion(enemyBullets[i].x, enemyBullets[i].y, 0xffffff); // Remove bullet enemyBullets[i].destroy(); enemyBullets.splice(i, 1); // Player loses a life lives--; updateUI(); if (lives <= 0) { gameOver(); } else { // Give temporary shield spaceship.activateShield(120); } } } } // Check player collisions with gems for (var i = gems.length - 1; i >= 0; i--) { if (spaceship.intersects(gems[i])) { // Play collect sound LK.getSound('collect').play(); // Add score score += gems[i].value; updateUI(); // Remove gem with a small animation tween(gems[i], { alpha: 0, scaleX: 0.5, scaleY: 0.5 }, { duration: 300, onFinish: function (gem) { return function () { gem.destroy(); }; }(gems[i]) }); gems.splice(i, 1); } } // Check player collisions with powerups for (var i = powerups.length - 1; i >= 0; i--) { if (spaceship.intersects(powerups[i])) { // Play powerup sound LK.getSound('powerup').play(); // Apply powerup effect if (powerups[i].type === 0) { // Shield spaceship.activateShield(600); } else { // Double fire spaceship.activateDoubleFire(600); } // Remove powerup with animation tween(powerups[i], { alpha: 0, scaleX: 2, scaleY: 2 }, { duration: 300, onFinish: function (powerup) { return function () { powerup.destroy(); }; }(powerups[i]) }); powerups.splice(i, 1); } } } // Check if game level should increase function checkLevelProgression() { if (score >= level * 100) { level++; updateUI(); // Increase difficulty asteroidSpawnRate = Math.max(60, asteroidSpawnRate - 10); enemySpawnRate = Math.max(180, enemySpawnRate - 20); gemSpawnRate = Math.max(120, gemSpawnRate - 5); // Show level up text var levelUpTxt = new Text2('Level ' + level + '!', { size: 100, fill: 0xFFFF00 }); levelUpTxt.anchor.set(0.5, 0.5); levelUpTxt.x = 2048 / 2; levelUpTxt.y = 2732 / 2; game.addChild(levelUpTxt); // Animate and remove tween(levelUpTxt, { alpha: 0, scaleX: 2, scaleY: 2 }, { duration: 1500, onFinish: function onFinish() { levelUpTxt.destroy(); } }); } } // Game over function function gameOver() { gameRunning = false; // Update high score if (score > storage.highScore) { storage.highScore = score; updateUI(); } // Show game over screen LK.showGameOver(); } // Initialize the game initializeGame(); // Touch and mouse controls game.down = function (x, y, obj) { isDragging = true; // Fire a bullet when tapping if (gameRunning) { spaceship.shoot(); } // Move spaceship to touch position spaceship.x = x; spaceship.y = y; }; game.up = function (x, y, obj) { isDragging = false; }; game.move = function (x, y, obj) { if (isDragging && gameRunning) { // Move spaceship to touch position spaceship.x = x; // Limit Y position to bottom area spaceship.y = Math.min(y, 2732 - 150); spaceship.y = Math.max(spaceship.y, 2732 / 2); } }; // Game update function game.update = function () { if (!gameRunning) return; // Update spaceship spaceship.update(); // Auto-fire when holding if (isDragging && LK.ticks % 15 === 0) { spaceship.shoot(); } // Spawn asteroids spawnCountdown--; if (spawnCountdown <= 0) { var asteroid = new Asteroid(); asteroid.x = Math.random() * 2048; asteroid.y = -100; game.addChild(asteroid); asteroids.push(asteroid); spawnCountdown = asteroidSpawnRate; } // Spawn enemies enemySpawnCountdown--; if (enemySpawnCountdown <= 0) { var enemy = new Enemy(); enemy.x = Math.random() * 2048; enemy.y = -100; enemy.startX = enemy.x; // Save starting X for sine movement game.addChild(enemy); enemies.push(enemy); enemySpawnCountdown = enemySpawnRate; } // Spawn gems gemSpawnCountdown--; if (gemSpawnCountdown <= 0) { var gem = new Gem(); gem.x = Math.random() * 2048; gem.y = -50; game.addChild(gem); gems.push(gem); gemSpawnCountdown = gemSpawnRate; } // Spawn powerups powerupSpawnCountdown--; if (powerupSpawnCountdown <= 0) { var powerup = new Powerup(); powerup.x = Math.random() * 2048; powerup.y = -50; game.addChild(powerup); powerups.push(powerup); powerupSpawnCountdown = powerupSpawnRate; } // Update bullets for (var i = bullets.length - 1; i >= 0; i--) { if (bullets[i].update()) { bullets[i].destroy(); bullets.splice(i, 1); } } // Update enemy bullets for (var i = enemyBullets.length - 1; i >= 0; i--) { if (enemyBullets[i].update()) { enemyBullets[i].destroy(); enemyBullets.splice(i, 1); } } // Update asteroids for (var i = asteroids.length - 1; i >= 0; i--) { if (asteroids[i].update()) { asteroids[i].destroy(); asteroids.splice(i, 1); } } // Update enemies for (var i = enemies.length - 1; i >= 0; i--) { if (enemies[i].update()) { enemies[i].destroy(); enemies.splice(i, 1); } } // Update gems for (var i = gems.length - 1; i >= 0; i--) { if (gems[i].update()) { gems[i].destroy(); gems.splice(i, 1); } } // Update powerups for (var i = powerups.length - 1; i >= 0; i--) { if (powerups[i].update()) { powerups[i].destroy(); powerups.splice(i, 1); } } // Check collisions checkCollisions(); // Check level progression checkLevelProgression(); };
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,681 @@
-/****
+/****
+* 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,
+ scaleX: 0.8 + Math.random() * 0.6,
+ // Random size
+ scaleY: 0.8 + Math.random() * 0.6
+ });
+ self.rotationSpeed = (Math.random() - 0.5) * 0.1;
+ self.speedY = 2 + Math.random() * 3;
+ self.speedX = (Math.random() - 0.5) * 2;
+ self.update = function () {
+ self.y += self.speedY;
+ self.x += self.speedX;
+ asteroidGraphics.rotation += self.rotationSpeed;
+ // Loop sides of the screen
+ if (self.x < -50) self.x = 2048 + 50;
+ if (self.x > 2048 + 50) self.x = -50;
+ // Remove if off bottom of screen
+ if (self.y > 2732 + 100) {
+ return true; // Mark for removal
+ }
+ return false;
+ };
+ 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 = -10;
+ self.update = function () {
+ self.y += self.speed;
+ // Remove bullets that go off screen
+ if (self.y < -50) {
+ return true; // Return true to mark for removal
+ }
+ return false;
+ };
+ return self;
+});
+var Enemy = Container.expand(function () {
+ var self = Container.call(this);
+ var enemyGraphics = self.attachAsset('enemy', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speedY = 1.5 + Math.random() * 1.5;
+ self.movePattern = Math.floor(Math.random() * 3); // 0: straight, 1: zigzag, 2: sine
+ self.patternOffset = Math.random() * 100;
+ self.shootTimer = 60 + Math.floor(Math.random() * 120);
+ self.update = function () {
+ self.y += self.speedY;
+ // Different movement patterns
+ switch (self.movePattern) {
+ case 1:
+ // Zigzag
+ self.x += Math.sin(LK.ticks * 0.05 + self.patternOffset) * 3;
+ break;
+ case 2:
+ // Sine wave
+ self.x = self.startX + Math.sin(LK.ticks * 0.03 + self.patternOffset) * 150;
+ break;
+ }
+ // Shoot occasionally
+ self.shootTimer--;
+ if (self.shootTimer <= 0) {
+ // Create enemy bullet
+ var bullet = new Bullet();
+ bullet.speed = 5; // Bullets move down
+ bullet.x = self.x;
+ bullet.y = self.y + 30;
+ game.addChild(bullet);
+ enemyBullets.push(bullet);
+ self.shootTimer = 60 + Math.floor(Math.random() * 120);
+ }
+ // Remove if off bottom of screen
+ if (self.y > 2732 + 100) {
+ return true; // Mark for removal
+ }
+ return false;
+ };
+ return self;
+});
+var Gem = Container.expand(function () {
+ var self = Container.call(this);
+ var gemGraphics = self.attachAsset('gem', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speedY = 2 + Math.random() * 2;
+ self.rotationSpeed = (Math.random() - 0.5) * 0.1;
+ self.value = 10;
+ self.update = function () {
+ self.y += self.speedY;
+ gemGraphics.rotation += self.rotationSpeed;
+ // Remove if off bottom of screen
+ if (self.y > 2732 + 50) {
+ return true; // Mark for removal
+ }
+ return false;
+ };
+ return self;
+});
+var Powerup = Container.expand(function () {
+ var self = Container.call(this);
+ var powerupGraphics = self.attachAsset('powerup', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speedY = 2 + Math.random();
+ self.type = Math.floor(Math.random() * 2); // 0: shield, 1: double fire
+ // Tint based on type
+ if (self.type === 0) {
+ powerupGraphics.tint = 0x2ecc71; // Green for shield
+ } else {
+ powerupGraphics.tint = 0xe74c3c; // Red for double fire
+ }
+ self.update = function () {
+ self.y += self.speedY;
+ powerupGraphics.rotation += 0.03;
+ // Remove if off bottom of screen
+ if (self.y > 2732 + 50) {
+ return true; // Mark for removal
+ }
+ return false;
+ };
+ return self;
+});
+var Spaceship = Container.expand(function () {
+ var self = Container.call(this);
+ var spaceshipGraphics = self.attachAsset('spaceship', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.shield = false;
+ self.shieldTime = 0;
+ self.shieldGraphic = null;
+ self.shootCooldown = 0;
+ self.shootDelay = 15;
+ self.doubleFire = false;
+ self.powerupTime = 0;
+ self.speed = 5;
+ self.lives = 3;
+ self.activateShield = function (duration) {
+ self.shield = true;
+ self.shieldTime = duration;
+ if (!self.shieldGraphic) {
+ self.shieldGraphic = self.attachAsset('shield', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ alpha: 0.5
+ });
+ } else {
+ self.shieldGraphic.visible = true;
+ }
+ };
+ self.deactivateShield = function () {
+ self.shield = false;
+ if (self.shieldGraphic) {
+ self.shieldGraphic.visible = false;
+ }
+ };
+ self.activateDoubleFire = function (duration) {
+ self.doubleFire = true;
+ self.powerupTime = duration;
+ };
+ self.deactivateDoubleFire = function () {
+ self.doubleFire = false;
+ };
+ self.shoot = function () {
+ if (self.shootCooldown <= 0) {
+ self.shootCooldown = self.shootDelay;
+ if (self.doubleFire) {
+ // Create two bullets side by side
+ var bullet1 = new Bullet();
+ bullet1.x = self.x - 20;
+ bullet1.y = self.y;
+ game.addChild(bullet1);
+ bullets.push(bullet1);
+ var bullet2 = new Bullet();
+ bullet2.x = self.x + 20;
+ bullet2.y = self.y;
+ game.addChild(bullet2);
+ bullets.push(bullet2);
+ } else {
+ // Create a single bullet
+ var bullet = new Bullet();
+ bullet.x = self.x;
+ bullet.y = self.y;
+ game.addChild(bullet);
+ bullets.push(bullet);
+ }
+ // Play shoot sound
+ LK.getSound('shoot').play();
+ return true;
+ }
+ return false;
+ };
+ self.update = function () {
+ // Update cooldown
+ if (self.shootCooldown > 0) {
+ self.shootCooldown--;
+ }
+ // Update shield time
+ if (self.shield && self.shieldTime > 0) {
+ self.shieldTime--;
+ if (self.shieldTime <= 0) {
+ self.deactivateShield();
+ }
+ }
+ // Update powerup time
+ if (self.doubleFire && self.powerupTime > 0) {
+ self.powerupTime--;
+ if (self.powerupTime <= 0) {
+ self.deactivateDoubleFire();
+ }
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
backgroundColor: 0x000000
-});
\ No newline at end of file
+});
+
+/****
+* Game Code
+****/
+// Game state
+var gameRunning = true;
+var level = 1;
+var score = 0;
+var lives = 3;
+var asteroidSpawnRate = 120;
+var enemySpawnRate = 300;
+var gemSpawnRate = 180;
+var powerupSpawnRate = 600;
+var spawnCountdown = 60;
+var enemySpawnCountdown = 300;
+var gemSpawnCountdown = 120;
+var powerupSpawnCountdown = 600;
+// Game elements
+var spaceship;
+var bullets = [];
+var enemyBullets = [];
+var asteroids = [];
+var enemies = [];
+var gems = [];
+var powerups = [];
+// Create UI elements
+var scoreTxt = new Text2('Score: 0', {
+ size: 50,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0, 0);
+LK.gui.topRight.addChild(scoreTxt);
+scoreTxt.x = -250; // Offset from right edge
+var levelTxt = new Text2('Level: 1', {
+ size: 50,
+ fill: 0xFFFFFF
+});
+levelTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(levelTxt);
+levelTxt.y = 10;
+var livesTxt = new Text2('Lives: 3', {
+ size: 50,
+ fill: 0xFFFFFF
+});
+livesTxt.anchor.set(0, 0);
+LK.gui.topLeft.addChild(livesTxt);
+livesTxt.x = 120; // Offset to avoid menu button
+livesTxt.y = 10;
+var highScoreTxt = new Text2('High Score: ' + storage.highScore, {
+ size: 40,
+ fill: 0xFFFFFF
+});
+highScoreTxt.anchor.set(1, 0);
+LK.gui.topRight.addChild(highScoreTxt);
+highScoreTxt.y = 60;
+// Drag handling
+var isDragging = false;
+// Initialize game elements
+function initializeGame() {
+ // Create player spaceship
+ spaceship = new Spaceship();
+ spaceship.x = 2048 / 2;
+ spaceship.y = 2732 - 200;
+ game.addChild(spaceship);
+ // Reset variables
+ bullets = [];
+ enemyBullets = [];
+ asteroids = [];
+ enemies = [];
+ gems = [];
+ powerups = [];
+ level = 1;
+ score = 0;
+ lives = 3;
+ // Update UI
+ updateUI();
+ // Start game music
+ LK.playMusic('gameMusic');
+}
+// Update UI elements
+function updateUI() {
+ scoreTxt.setText('Score: ' + score);
+ levelTxt.setText('Level: ' + level);
+ livesTxt.setText('Lives: ' + lives);
+ highScoreTxt.setText('High Score: ' + storage.highScore);
+ // Update score in LK system
+ LK.setScore(score);
+}
+// Create explosion effect
+function createExplosion(x, y, color) {
+ // Flash object
+ var explosionObj = new Container();
+ explosionObj.x = x;
+ explosionObj.y = y;
+ var explosionGraphic = explosionObj.attachAsset('asteroid', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ alpha: 0.7
+ });
+ game.addChild(explosionObj);
+ // Animate explosion
+ tween(explosionGraphic, {
+ scaleX: 2,
+ scaleY: 2,
+ alpha: 0
+ }, {
+ duration: 500,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ explosionObj.destroy();
+ }
+ });
+ // Play explosion sound
+ LK.getSound('explosion').play();
+}
+// Handle collisions
+function checkCollisions() {
+ // Player bullets with asteroids
+ for (var i = bullets.length - 1; i >= 0; i--) {
+ var bullet = bullets[i];
+ // Check collision with asteroids
+ for (var j = asteroids.length - 1; j >= 0; j--) {
+ var asteroid = asteroids[j];
+ if (bullet.intersects(asteroid)) {
+ // Create explosion
+ createExplosion(asteroid.x, asteroid.y, 0x7f8c8d);
+ // Remove asteroid and bullet
+ asteroid.destroy();
+ asteroids.splice(j, 1);
+ bullet.destroy();
+ bullets.splice(i, 1);
+ // Increase score
+ score += 5;
+ updateUI();
+ break; // Bullet can only hit one asteroid
+ }
+ }
+ // Check collision with enemies
+ if (bullets[i]) {
+ // Make sure bullet still exists
+ for (var j = enemies.length - 1; j >= 0; j--) {
+ var enemy = enemies[j];
+ if (bullet.intersects(enemy)) {
+ // Create explosion
+ createExplosion(enemy.x, enemy.y, 0xe74c3c);
+ // Remove enemy and bullet
+ enemy.destroy();
+ enemies.splice(j, 1);
+ bullet.destroy();
+ bullets.splice(i, 1);
+ // Increase score
+ score += 15;
+ updateUI();
+ break; // Bullet can only hit one enemy
+ }
+ }
+ }
+ }
+ // Check player collisions with asteroids
+ if (!spaceship.shield) {
+ for (var i = asteroids.length - 1; i >= 0; i--) {
+ if (spaceship.intersects(asteroids[i])) {
+ // Create explosion
+ createExplosion(asteroids[i].x, asteroids[i].y, 0x7f8c8d);
+ // Remove asteroid
+ asteroids[i].destroy();
+ asteroids.splice(i, 1);
+ // Player loses a life
+ lives--;
+ updateUI();
+ if (lives <= 0) {
+ gameOver();
+ } else {
+ // Give temporary shield
+ spaceship.activateShield(120);
+ }
+ }
+ }
+ }
+ // Check player collisions with enemy ships
+ if (!spaceship.shield) {
+ for (var i = enemies.length - 1; i >= 0; i--) {
+ if (spaceship.intersects(enemies[i])) {
+ // Create explosion
+ createExplosion(enemies[i].x, enemies[i].y, 0xe74c3c);
+ // Remove enemy
+ enemies[i].destroy();
+ enemies.splice(i, 1);
+ // Player loses a life
+ lives--;
+ updateUI();
+ if (lives <= 0) {
+ gameOver();
+ } else {
+ // Give temporary shield
+ spaceship.activateShield(120);
+ }
+ }
+ }
+ }
+ // Check player collisions with enemy bullets
+ if (!spaceship.shield) {
+ for (var i = enemyBullets.length - 1; i >= 0; i--) {
+ if (spaceship.intersects(enemyBullets[i])) {
+ // Create small explosion
+ createExplosion(enemyBullets[i].x, enemyBullets[i].y, 0xffffff);
+ // Remove bullet
+ enemyBullets[i].destroy();
+ enemyBullets.splice(i, 1);
+ // Player loses a life
+ lives--;
+ updateUI();
+ if (lives <= 0) {
+ gameOver();
+ } else {
+ // Give temporary shield
+ spaceship.activateShield(120);
+ }
+ }
+ }
+ }
+ // Check player collisions with gems
+ for (var i = gems.length - 1; i >= 0; i--) {
+ if (spaceship.intersects(gems[i])) {
+ // Play collect sound
+ LK.getSound('collect').play();
+ // Add score
+ score += gems[i].value;
+ updateUI();
+ // Remove gem with a small animation
+ tween(gems[i], {
+ alpha: 0,
+ scaleX: 0.5,
+ scaleY: 0.5
+ }, {
+ duration: 300,
+ onFinish: function (gem) {
+ return function () {
+ gem.destroy();
+ };
+ }(gems[i])
+ });
+ gems.splice(i, 1);
+ }
+ }
+ // Check player collisions with powerups
+ for (var i = powerups.length - 1; i >= 0; i--) {
+ if (spaceship.intersects(powerups[i])) {
+ // Play powerup sound
+ LK.getSound('powerup').play();
+ // Apply powerup effect
+ if (powerups[i].type === 0) {
+ // Shield
+ spaceship.activateShield(600);
+ } else {
+ // Double fire
+ spaceship.activateDoubleFire(600);
+ }
+ // Remove powerup with animation
+ tween(powerups[i], {
+ alpha: 0,
+ scaleX: 2,
+ scaleY: 2
+ }, {
+ duration: 300,
+ onFinish: function (powerup) {
+ return function () {
+ powerup.destroy();
+ };
+ }(powerups[i])
+ });
+ powerups.splice(i, 1);
+ }
+ }
+}
+// Check if game level should increase
+function checkLevelProgression() {
+ if (score >= level * 100) {
+ level++;
+ updateUI();
+ // Increase difficulty
+ asteroidSpawnRate = Math.max(60, asteroidSpawnRate - 10);
+ enemySpawnRate = Math.max(180, enemySpawnRate - 20);
+ gemSpawnRate = Math.max(120, gemSpawnRate - 5);
+ // Show level up text
+ var levelUpTxt = new Text2('Level ' + level + '!', {
+ size: 100,
+ fill: 0xFFFF00
+ });
+ levelUpTxt.anchor.set(0.5, 0.5);
+ levelUpTxt.x = 2048 / 2;
+ levelUpTxt.y = 2732 / 2;
+ game.addChild(levelUpTxt);
+ // Animate and remove
+ tween(levelUpTxt, {
+ alpha: 0,
+ scaleX: 2,
+ scaleY: 2
+ }, {
+ duration: 1500,
+ onFinish: function onFinish() {
+ levelUpTxt.destroy();
+ }
+ });
+ }
+}
+// Game over function
+function gameOver() {
+ gameRunning = false;
+ // Update high score
+ if (score > storage.highScore) {
+ storage.highScore = score;
+ updateUI();
+ }
+ // Show game over screen
+ LK.showGameOver();
+}
+// Initialize the game
+initializeGame();
+// Touch and mouse controls
+game.down = function (x, y, obj) {
+ isDragging = true;
+ // Fire a bullet when tapping
+ if (gameRunning) {
+ spaceship.shoot();
+ }
+ // Move spaceship to touch position
+ spaceship.x = x;
+ spaceship.y = y;
+};
+game.up = function (x, y, obj) {
+ isDragging = false;
+};
+game.move = function (x, y, obj) {
+ if (isDragging && gameRunning) {
+ // Move spaceship to touch position
+ spaceship.x = x;
+ // Limit Y position to bottom area
+ spaceship.y = Math.min(y, 2732 - 150);
+ spaceship.y = Math.max(spaceship.y, 2732 / 2);
+ }
+};
+// Game update function
+game.update = function () {
+ if (!gameRunning) return;
+ // Update spaceship
+ spaceship.update();
+ // Auto-fire when holding
+ if (isDragging && LK.ticks % 15 === 0) {
+ spaceship.shoot();
+ }
+ // Spawn asteroids
+ spawnCountdown--;
+ if (spawnCountdown <= 0) {
+ var asteroid = new Asteroid();
+ asteroid.x = Math.random() * 2048;
+ asteroid.y = -100;
+ game.addChild(asteroid);
+ asteroids.push(asteroid);
+ spawnCountdown = asteroidSpawnRate;
+ }
+ // Spawn enemies
+ enemySpawnCountdown--;
+ if (enemySpawnCountdown <= 0) {
+ var enemy = new Enemy();
+ enemy.x = Math.random() * 2048;
+ enemy.y = -100;
+ enemy.startX = enemy.x; // Save starting X for sine movement
+ game.addChild(enemy);
+ enemies.push(enemy);
+ enemySpawnCountdown = enemySpawnRate;
+ }
+ // Spawn gems
+ gemSpawnCountdown--;
+ if (gemSpawnCountdown <= 0) {
+ var gem = new Gem();
+ gem.x = Math.random() * 2048;
+ gem.y = -50;
+ game.addChild(gem);
+ gems.push(gem);
+ gemSpawnCountdown = gemSpawnRate;
+ }
+ // Spawn powerups
+ powerupSpawnCountdown--;
+ if (powerupSpawnCountdown <= 0) {
+ var powerup = new Powerup();
+ powerup.x = Math.random() * 2048;
+ powerup.y = -50;
+ game.addChild(powerup);
+ powerups.push(powerup);
+ powerupSpawnCountdown = powerupSpawnRate;
+ }
+ // Update bullets
+ for (var i = bullets.length - 1; i >= 0; i--) {
+ if (bullets[i].update()) {
+ bullets[i].destroy();
+ bullets.splice(i, 1);
+ }
+ }
+ // Update enemy bullets
+ for (var i = enemyBullets.length - 1; i >= 0; i--) {
+ if (enemyBullets[i].update()) {
+ enemyBullets[i].destroy();
+ enemyBullets.splice(i, 1);
+ }
+ }
+ // Update asteroids
+ for (var i = asteroids.length - 1; i >= 0; i--) {
+ if (asteroids[i].update()) {
+ asteroids[i].destroy();
+ asteroids.splice(i, 1);
+ }
+ }
+ // Update enemies
+ for (var i = enemies.length - 1; i >= 0; i--) {
+ if (enemies[i].update()) {
+ enemies[i].destroy();
+ enemies.splice(i, 1);
+ }
+ }
+ // Update gems
+ for (var i = gems.length - 1; i >= 0; i--) {
+ if (gems[i].update()) {
+ gems[i].destroy();
+ gems.splice(i, 1);
+ }
+ }
+ // Update powerups
+ for (var i = powerups.length - 1; i >= 0; i--) {
+ if (powerups[i].update()) {
+ powerups[i].destroy();
+ powerups.splice(i, 1);
+ }
+ }
+ // Check collisions
+ checkCollisions();
+ // Check level progression
+ checkLevelProgression();
+};
\ No newline at end of file