User prompt
güçlendirmeleri kaydetme ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
güçlendirmeleri büyüt ve sağ üst köşeye koy
User prompt
hayır savaş alanına koyulan karakterlere tıklanınca güçlendirmeler çıksın ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
karakter güçlendirme ekle ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
karakter koyma tuşları kare olsun arkaso
User prompt
karakter koyma tuşları birbirine deymesin
Code edit (1 edits merged)
Please save this source code
User prompt
Battle Command: War Simulator
Initial prompt
war simulator
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Base = Container.expand(function () { var self = Container.call(this); var baseGraphics = self.attachAsset('playerBase', { anchorX: 0.5, anchorY: 0.5 }); self.health = 500; self.maxHealth = 500; self.isDead = false; self.takeDamage = function (damage) { self.health -= damage; if (self.health <= 0) { self.health = 0; self.isDead = true; } }; 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.damage = 25; self.targetX = 0; self.targetY = 0; self.isPlayerBullet = true; self.update = function () { 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 = self.targetX; self.y = self.targetY; self.hasReachedTarget = true; } else { self.x += dx / distance * self.speed; self.y += dy / distance * self.speed; } }; return self; }); var Enemy = Container.expand(function () { var self = Container.call(this); self.health = 100; self.maxHealth = 100; self.speed = 1; self.damage = 30; self.isDead = false; self.hasReachedBase = false; self.takeDamage = function (damage) { self.health -= damage; if (self.health <= 0) { self.health = 0; self.isDead = true; } }; self.update = function () { if (self.isDead || self.hasReachedBase) return; var dx = playerBase.x - self.x; var dy = playerBase.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < 80) { self.hasReachedBase = true; playerBase.takeDamage(self.damage); } else { self.x += dx / distance * self.speed; self.y += dy / distance * self.speed; } }; return self; }); var EnemyTank = Enemy.expand(function () { var self = Enemy.call(this); var tankGraphics = self.attachAsset('enemyTank', { anchorX: 0.5, anchorY: 0.5 }); self.health = 120; self.maxHealth = 120; self.speed = 0.8; self.damage = 40; return self; }); var EnemyInfantry = Enemy.expand(function () { var self = Enemy.call(this); var infantryGraphics = self.attachAsset('enemyInfantry', { anchorX: 0.5, anchorY: 0.5 }); self.health = 50; self.maxHealth = 50; self.speed = 1.5; self.damage = 25; return self; }); var PlayerUnit = Container.expand(function () { var self = Container.call(this); self.health = 100; self.maxHealth = 100; self.attackRange = 200; self.attackCooldown = 0; self.attackDelay = 60; self.damage = 25; self.unitType = 'tank'; self.lastTarget = null; self.takeDamage = function (damage) { self.health -= damage; if (self.health <= 0) { self.health = 0; self.isDead = true; } }; self.findNearestEnemy = function () { var nearestEnemy = null; var shortestDistance = self.attackRange; for (var i = 0; i < enemies.length; i++) { var enemy = enemies[i]; if (enemy.isDead) continue; var dx = enemy.x - self.x; var dy = enemy.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < shortestDistance) { shortestDistance = distance; nearestEnemy = enemy; } } return nearestEnemy; }; self.attack = function (target) { if (self.attackCooldown <= 0) { var bullet = new Bullet(); bullet.x = self.x; bullet.y = self.y; bullet.targetX = target.x; bullet.targetY = target.y; bullet.damage = self.damage; bullet.isPlayerBullet = true; bullets.push(bullet); game.addChild(bullet); LK.getSound('shoot').play(); self.attackCooldown = self.attackDelay; } }; self.update = function () { if (self.isDead) return; if (self.attackCooldown > 0) { self.attackCooldown--; } var target = self.findNearestEnemy(); if (target) { self.attack(target); } }; return self; }); var Tank = PlayerUnit.expand(function () { var self = PlayerUnit.call(this); var tankGraphics = self.attachAsset('playerTank', { anchorX: 0.5, anchorY: 0.5 }); self.health = 150; self.maxHealth = 150; self.attackRange = 250; self.attackDelay = 45; self.damage = 40; self.unitType = 'tank'; self.cost = 100; return self; }); var Infantry = PlayerUnit.expand(function () { var self = PlayerUnit.call(this); var infantryGraphics = self.attachAsset('playerInfantry', { anchorX: 0.5, anchorY: 0.5 }); self.health = 60; self.maxHealth = 60; self.attackRange = 150; self.attackDelay = 30; self.damage = 20; self.unitType = 'infantry'; self.cost = 50; return self; }); var Artillery = PlayerUnit.expand(function () { var self = PlayerUnit.call(this); var artilleryGraphics = self.attachAsset('playerArtillery', { anchorX: 0.5, anchorY: 0.5 }); self.health = 80; self.maxHealth = 80; self.attackRange = 350; self.attackDelay = 90; self.damage = 60; self.unitType = 'artillery'; self.cost = 120; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x2F4F2F }); /**** * Game Code ****/ var playerUnits = []; var enemies = []; var bullets = []; var explosions = []; var resources = 200; var maxResources = 500; var resourceRegenRate = 1; var resourceRegenTimer = 0; var waveNumber = 1; var enemiesSpawned = 0; var enemiesPerWave = 5; var spawnTimer = 0; var spawnDelay = 120; var timeBetweenWaves = 300; var waveTimer = 0; var isWaveActive = false; var selectedUnitType = 'tank'; var unitCosts = { tank: 100, artillery: 120, infantry: 50 }; // Create player base var playerBase = game.addChild(new Base()); playerBase.x = 1024; playerBase.y = 2400; // Create UI elements var resourceText = new Text2('Resources: ' + resources, { size: 40, fill: 0xFFFFFF }); resourceText.anchor.set(0, 0); LK.gui.topLeft.addChild(resourceText); resourceText.x = 120; resourceText.y = 20; var waveText = new Text2('Wave: ' + waveNumber, { size: 40, fill: 0xFFFFFF }); waveText.anchor.set(0.5, 0); LK.gui.top.addChild(waveText); waveText.y = 20; var baseHealthText = new Text2('Base Health: ' + playerBase.health, { size: 40, fill: 0xFFFFFF }); baseHealthText.anchor.set(1, 0); LK.gui.topRight.addChild(baseHealthText); baseHealthText.x = -20; baseHealthText.y = 20; var scoreText = new Text2('Score: 0', { size: 40, fill: 0xFFFFFF }); scoreText.anchor.set(0, 0); LK.gui.topLeft.addChild(scoreText); scoreText.x = 120; scoreText.y = 70; // Unit selection buttons var tankButton = new Text2('TANK (100)', { size: 35, fill: 0x4169E1 }); tankButton.anchor.set(0.5, 1); LK.gui.bottom.addChild(tankButton); tankButton.x = -200; tankButton.y = -20; var artilleryButton = new Text2('ARTILLERY (120)', { size: 35, fill: 0x8B4513 }); artilleryButton.anchor.set(0.5, 1); LK.gui.bottom.addChild(artilleryButton); artilleryButton.y = -20; var infantryButton = new Text2('INFANTRY (50)', { size: 35, fill: 0x228B22 }); infantryButton.anchor.set(0.5, 1); LK.gui.bottom.addChild(infantryButton); infantryButton.x = 200; infantryButton.y = -20; function updateSelectedUnit() { tankButton.fill = selectedUnitType === 'tank' ? "#FFFF00" : "#4169E1"; artilleryButton.fill = selectedUnitType === 'artillery' ? "#FFFF00" : "#8B4513"; infantryButton.fill = selectedUnitType === 'infantry' ? "#FFFF00" : "#228B22"; } updateSelectedUnit(); tankButton.down = function () { selectedUnitType = 'tank'; updateSelectedUnit(); }; artilleryButton.down = function () { selectedUnitType = 'artillery'; updateSelectedUnit(); }; infantryButton.down = function () { selectedUnitType = 'infantry'; updateSelectedUnit(); }; function spawnEnemy() { var enemy; var spawnSide = Math.floor(Math.random() * 4); var spawnX, spawnY; // Random spawn from edges switch (spawnSide) { case 0: // Top spawnX = Math.random() * 2048; spawnY = 0; break; case 1: // Right spawnX = 2048; spawnY = Math.random() * 1500; break; case 2: // Left spawnX = 0; spawnY = Math.random() * 1500; break; case 3: // Top corners spawnX = Math.random() < 0.5 ? 0 : 2048; spawnY = Math.random() * 500; break; } // Random enemy type based on wave if (Math.random() < 0.3 + waveNumber * 0.1) { enemy = new EnemyTank(); } else { enemy = new EnemyInfantry(); } enemy.x = spawnX; enemy.y = spawnY; enemy.speed += Math.random() * 0.5 + waveNumber * 0.1; enemy.health += waveNumber * 10; enemy.maxHealth = enemy.health; enemies.push(enemy); game.addChild(enemy); } function createExplosion(x, y) { var explosion = LK.getAsset('explosion', { anchorX: 0.5, anchorY: 0.5, x: x, y: y, alpha: 1, scaleX: 0.5, scaleY: 0.5 }); game.addChild(explosion); tween(explosion, { scaleX: 2, scaleY: 2, alpha: 0 }, { duration: 500, onFinish: function onFinish() { explosion.destroy(); } }); LK.getSound('explosion').play(); } game.down = function (x, y, obj) { // Check if click is on battlefield (not on UI) if (y > 200 && y < 2200) { var cost = unitCosts[selectedUnitType]; if (resources >= cost) { var unit; switch (selectedUnitType) { case 'tank': unit = new Tank(); break; case 'artillery': unit = new Artillery(); break; case 'infantry': unit = new Infantry(); break; } unit.x = x; unit.y = y; playerUnits.push(unit); game.addChild(unit); resources -= cost; resourceText.setText('Resources: ' + resources); } } }; game.update = function () { // Resource regeneration resourceRegenTimer++; if (resourceRegenTimer >= 60) { if (resources < maxResources) { resources += resourceRegenRate; resourceText.setText('Resources: ' + resources); } resourceRegenTimer = 0; } // Wave management if (!isWaveActive) { waveTimer++; if (waveTimer >= timeBetweenWaves) { isWaveActive = true; enemiesSpawned = 0; waveTimer = 0; enemiesPerWave = 5 + waveNumber * 2; } } else { spawnTimer++; if (spawnTimer >= spawnDelay && enemiesSpawned < enemiesPerWave) { spawnEnemy(); enemiesSpawned++; spawnTimer = 0; } // Check if wave is complete if (enemiesSpawned >= enemiesPerWave && enemies.length === 0) { isWaveActive = false; waveNumber++; waveText.setText('Wave: ' + waveNumber); LK.setScore(LK.getScore() + 100); scoreText.setText('Score: ' + LK.getScore()); } } // Update bullets for (var i = bullets.length - 1; i >= 0; i--) { var bullet = bullets[i]; bullet.update(); if (bullet.hasReachedTarget || bullet.x < -50 || bullet.x > 2098 || bullet.y < -50 || bullet.y > 2782) { if (bullet.hasReachedTarget) { createExplosion(bullet.x, bullet.y); } bullet.destroy(); bullets.splice(i, 1); continue; } // Check bullet collisions with enemies if (bullet.isPlayerBullet) { for (var j = enemies.length - 1; j >= 0; j--) { var enemy = enemies[j]; if (!enemy.isDead && bullet.intersects(enemy)) { enemy.takeDamage(bullet.damage); createExplosion(bullet.x, bullet.y); if (enemy.isDead) { LK.setScore(LK.getScore() + 25); scoreText.setText('Score: ' + LK.getScore()); enemy.destroy(); enemies.splice(j, 1); } bullet.destroy(); bullets.splice(i, 1); break; } } } } // Update player units for (var i = playerUnits.length - 1; i >= 0; i--) { var unit = playerUnits[i]; unit.update(); if (unit.isDead) { unit.destroy(); playerUnits.splice(i, 1); } } // Update enemies for (var i = enemies.length - 1; i >= 0; i--) { var enemy = enemies[i]; enemy.update(); if (enemy.isDead) { enemy.destroy(); enemies.splice(i, 1); } else if (enemy.hasReachedBase) { enemy.destroy(); enemies.splice(i, 1); } } // Update base health display baseHealthText.setText('Base Health: ' + playerBase.health); // Check game over condition if (playerBase.isDead) { LK.showGameOver(); } // Check win condition (survive 20 waves) if (waveNumber > 20) { LK.showYouWin(); } };
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,511 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Base = Container.expand(function () {
+ var self = Container.call(this);
+ var baseGraphics = self.attachAsset('playerBase', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.health = 500;
+ self.maxHealth = 500;
+ self.isDead = false;
+ self.takeDamage = function (damage) {
+ self.health -= damage;
+ if (self.health <= 0) {
+ self.health = 0;
+ self.isDead = true;
+ }
+ };
+ 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.damage = 25;
+ self.targetX = 0;
+ self.targetY = 0;
+ self.isPlayerBullet = true;
+ self.update = function () {
+ 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 = self.targetX;
+ self.y = self.targetY;
+ self.hasReachedTarget = true;
+ } else {
+ self.x += dx / distance * self.speed;
+ self.y += dy / distance * self.speed;
+ }
+ };
+ return self;
+});
+var Enemy = Container.expand(function () {
+ var self = Container.call(this);
+ self.health = 100;
+ self.maxHealth = 100;
+ self.speed = 1;
+ self.damage = 30;
+ self.isDead = false;
+ self.hasReachedBase = false;
+ self.takeDamage = function (damage) {
+ self.health -= damage;
+ if (self.health <= 0) {
+ self.health = 0;
+ self.isDead = true;
+ }
+ };
+ self.update = function () {
+ if (self.isDead || self.hasReachedBase) return;
+ var dx = playerBase.x - self.x;
+ var dy = playerBase.y - self.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance < 80) {
+ self.hasReachedBase = true;
+ playerBase.takeDamage(self.damage);
+ } else {
+ self.x += dx / distance * self.speed;
+ self.y += dy / distance * self.speed;
+ }
+ };
+ return self;
+});
+var EnemyTank = Enemy.expand(function () {
+ var self = Enemy.call(this);
+ var tankGraphics = self.attachAsset('enemyTank', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.health = 120;
+ self.maxHealth = 120;
+ self.speed = 0.8;
+ self.damage = 40;
+ return self;
+});
+var EnemyInfantry = Enemy.expand(function () {
+ var self = Enemy.call(this);
+ var infantryGraphics = self.attachAsset('enemyInfantry', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.health = 50;
+ self.maxHealth = 50;
+ self.speed = 1.5;
+ self.damage = 25;
+ return self;
+});
+var PlayerUnit = Container.expand(function () {
+ var self = Container.call(this);
+ self.health = 100;
+ self.maxHealth = 100;
+ self.attackRange = 200;
+ self.attackCooldown = 0;
+ self.attackDelay = 60;
+ self.damage = 25;
+ self.unitType = 'tank';
+ self.lastTarget = null;
+ self.takeDamage = function (damage) {
+ self.health -= damage;
+ if (self.health <= 0) {
+ self.health = 0;
+ self.isDead = true;
+ }
+ };
+ self.findNearestEnemy = function () {
+ var nearestEnemy = null;
+ var shortestDistance = self.attackRange;
+ for (var i = 0; i < enemies.length; i++) {
+ var enemy = enemies[i];
+ if (enemy.isDead) continue;
+ var dx = enemy.x - self.x;
+ var dy = enemy.y - self.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance < shortestDistance) {
+ shortestDistance = distance;
+ nearestEnemy = enemy;
+ }
+ }
+ return nearestEnemy;
+ };
+ self.attack = function (target) {
+ if (self.attackCooldown <= 0) {
+ var bullet = new Bullet();
+ bullet.x = self.x;
+ bullet.y = self.y;
+ bullet.targetX = target.x;
+ bullet.targetY = target.y;
+ bullet.damage = self.damage;
+ bullet.isPlayerBullet = true;
+ bullets.push(bullet);
+ game.addChild(bullet);
+ LK.getSound('shoot').play();
+ self.attackCooldown = self.attackDelay;
+ }
+ };
+ self.update = function () {
+ if (self.isDead) return;
+ if (self.attackCooldown > 0) {
+ self.attackCooldown--;
+ }
+ var target = self.findNearestEnemy();
+ if (target) {
+ self.attack(target);
+ }
+ };
+ return self;
+});
+var Tank = PlayerUnit.expand(function () {
+ var self = PlayerUnit.call(this);
+ var tankGraphics = self.attachAsset('playerTank', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.health = 150;
+ self.maxHealth = 150;
+ self.attackRange = 250;
+ self.attackDelay = 45;
+ self.damage = 40;
+ self.unitType = 'tank';
+ self.cost = 100;
+ return self;
+});
+var Infantry = PlayerUnit.expand(function () {
+ var self = PlayerUnit.call(this);
+ var infantryGraphics = self.attachAsset('playerInfantry', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.health = 60;
+ self.maxHealth = 60;
+ self.attackRange = 150;
+ self.attackDelay = 30;
+ self.damage = 20;
+ self.unitType = 'infantry';
+ self.cost = 50;
+ return self;
+});
+var Artillery = PlayerUnit.expand(function () {
+ var self = PlayerUnit.call(this);
+ var artilleryGraphics = self.attachAsset('playerArtillery', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.health = 80;
+ self.maxHealth = 80;
+ self.attackRange = 350;
+ self.attackDelay = 90;
+ self.damage = 60;
+ self.unitType = 'artillery';
+ self.cost = 120;
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x2F4F2F
+});
+
+/****
+* Game Code
+****/
+var playerUnits = [];
+var enemies = [];
+var bullets = [];
+var explosions = [];
+var resources = 200;
+var maxResources = 500;
+var resourceRegenRate = 1;
+var resourceRegenTimer = 0;
+var waveNumber = 1;
+var enemiesSpawned = 0;
+var enemiesPerWave = 5;
+var spawnTimer = 0;
+var spawnDelay = 120;
+var timeBetweenWaves = 300;
+var waveTimer = 0;
+var isWaveActive = false;
+var selectedUnitType = 'tank';
+var unitCosts = {
+ tank: 100,
+ artillery: 120,
+ infantry: 50
+};
+// Create player base
+var playerBase = game.addChild(new Base());
+playerBase.x = 1024;
+playerBase.y = 2400;
+// Create UI elements
+var resourceText = new Text2('Resources: ' + resources, {
+ size: 40,
+ fill: 0xFFFFFF
+});
+resourceText.anchor.set(0, 0);
+LK.gui.topLeft.addChild(resourceText);
+resourceText.x = 120;
+resourceText.y = 20;
+var waveText = new Text2('Wave: ' + waveNumber, {
+ size: 40,
+ fill: 0xFFFFFF
+});
+waveText.anchor.set(0.5, 0);
+LK.gui.top.addChild(waveText);
+waveText.y = 20;
+var baseHealthText = new Text2('Base Health: ' + playerBase.health, {
+ size: 40,
+ fill: 0xFFFFFF
+});
+baseHealthText.anchor.set(1, 0);
+LK.gui.topRight.addChild(baseHealthText);
+baseHealthText.x = -20;
+baseHealthText.y = 20;
+var scoreText = new Text2('Score: 0', {
+ size: 40,
+ fill: 0xFFFFFF
+});
+scoreText.anchor.set(0, 0);
+LK.gui.topLeft.addChild(scoreText);
+scoreText.x = 120;
+scoreText.y = 70;
+// Unit selection buttons
+var tankButton = new Text2('TANK (100)', {
+ size: 35,
+ fill: 0x4169E1
+});
+tankButton.anchor.set(0.5, 1);
+LK.gui.bottom.addChild(tankButton);
+tankButton.x = -200;
+tankButton.y = -20;
+var artilleryButton = new Text2('ARTILLERY (120)', {
+ size: 35,
+ fill: 0x8B4513
+});
+artilleryButton.anchor.set(0.5, 1);
+LK.gui.bottom.addChild(artilleryButton);
+artilleryButton.y = -20;
+var infantryButton = new Text2('INFANTRY (50)', {
+ size: 35,
+ fill: 0x228B22
+});
+infantryButton.anchor.set(0.5, 1);
+LK.gui.bottom.addChild(infantryButton);
+infantryButton.x = 200;
+infantryButton.y = -20;
+function updateSelectedUnit() {
+ tankButton.fill = selectedUnitType === 'tank' ? "#FFFF00" : "#4169E1";
+ artilleryButton.fill = selectedUnitType === 'artillery' ? "#FFFF00" : "#8B4513";
+ infantryButton.fill = selectedUnitType === 'infantry' ? "#FFFF00" : "#228B22";
+}
+updateSelectedUnit();
+tankButton.down = function () {
+ selectedUnitType = 'tank';
+ updateSelectedUnit();
+};
+artilleryButton.down = function () {
+ selectedUnitType = 'artillery';
+ updateSelectedUnit();
+};
+infantryButton.down = function () {
+ selectedUnitType = 'infantry';
+ updateSelectedUnit();
+};
+function spawnEnemy() {
+ var enemy;
+ var spawnSide = Math.floor(Math.random() * 4);
+ var spawnX, spawnY;
+ // Random spawn from edges
+ switch (spawnSide) {
+ case 0:
+ // Top
+ spawnX = Math.random() * 2048;
+ spawnY = 0;
+ break;
+ case 1:
+ // Right
+ spawnX = 2048;
+ spawnY = Math.random() * 1500;
+ break;
+ case 2:
+ // Left
+ spawnX = 0;
+ spawnY = Math.random() * 1500;
+ break;
+ case 3:
+ // Top corners
+ spawnX = Math.random() < 0.5 ? 0 : 2048;
+ spawnY = Math.random() * 500;
+ break;
+ }
+ // Random enemy type based on wave
+ if (Math.random() < 0.3 + waveNumber * 0.1) {
+ enemy = new EnemyTank();
+ } else {
+ enemy = new EnemyInfantry();
+ }
+ enemy.x = spawnX;
+ enemy.y = spawnY;
+ enemy.speed += Math.random() * 0.5 + waveNumber * 0.1;
+ enemy.health += waveNumber * 10;
+ enemy.maxHealth = enemy.health;
+ enemies.push(enemy);
+ game.addChild(enemy);
+}
+function createExplosion(x, y) {
+ var explosion = LK.getAsset('explosion', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: x,
+ y: y,
+ alpha: 1,
+ scaleX: 0.5,
+ scaleY: 0.5
+ });
+ game.addChild(explosion);
+ tween(explosion, {
+ scaleX: 2,
+ scaleY: 2,
+ alpha: 0
+ }, {
+ duration: 500,
+ onFinish: function onFinish() {
+ explosion.destroy();
+ }
+ });
+ LK.getSound('explosion').play();
+}
+game.down = function (x, y, obj) {
+ // Check if click is on battlefield (not on UI)
+ if (y > 200 && y < 2200) {
+ var cost = unitCosts[selectedUnitType];
+ if (resources >= cost) {
+ var unit;
+ switch (selectedUnitType) {
+ case 'tank':
+ unit = new Tank();
+ break;
+ case 'artillery':
+ unit = new Artillery();
+ break;
+ case 'infantry':
+ unit = new Infantry();
+ break;
+ }
+ unit.x = x;
+ unit.y = y;
+ playerUnits.push(unit);
+ game.addChild(unit);
+ resources -= cost;
+ resourceText.setText('Resources: ' + resources);
+ }
+ }
+};
+game.update = function () {
+ // Resource regeneration
+ resourceRegenTimer++;
+ if (resourceRegenTimer >= 60) {
+ if (resources < maxResources) {
+ resources += resourceRegenRate;
+ resourceText.setText('Resources: ' + resources);
+ }
+ resourceRegenTimer = 0;
+ }
+ // Wave management
+ if (!isWaveActive) {
+ waveTimer++;
+ if (waveTimer >= timeBetweenWaves) {
+ isWaveActive = true;
+ enemiesSpawned = 0;
+ waveTimer = 0;
+ enemiesPerWave = 5 + waveNumber * 2;
+ }
+ } else {
+ spawnTimer++;
+ if (spawnTimer >= spawnDelay && enemiesSpawned < enemiesPerWave) {
+ spawnEnemy();
+ enemiesSpawned++;
+ spawnTimer = 0;
+ }
+ // Check if wave is complete
+ if (enemiesSpawned >= enemiesPerWave && enemies.length === 0) {
+ isWaveActive = false;
+ waveNumber++;
+ waveText.setText('Wave: ' + waveNumber);
+ LK.setScore(LK.getScore() + 100);
+ scoreText.setText('Score: ' + LK.getScore());
+ }
+ }
+ // Update bullets
+ for (var i = bullets.length - 1; i >= 0; i--) {
+ var bullet = bullets[i];
+ bullet.update();
+ if (bullet.hasReachedTarget || bullet.x < -50 || bullet.x > 2098 || bullet.y < -50 || bullet.y > 2782) {
+ if (bullet.hasReachedTarget) {
+ createExplosion(bullet.x, bullet.y);
+ }
+ bullet.destroy();
+ bullets.splice(i, 1);
+ continue;
+ }
+ // Check bullet collisions with enemies
+ if (bullet.isPlayerBullet) {
+ for (var j = enemies.length - 1; j >= 0; j--) {
+ var enemy = enemies[j];
+ if (!enemy.isDead && bullet.intersects(enemy)) {
+ enemy.takeDamage(bullet.damage);
+ createExplosion(bullet.x, bullet.y);
+ if (enemy.isDead) {
+ LK.setScore(LK.getScore() + 25);
+ scoreText.setText('Score: ' + LK.getScore());
+ enemy.destroy();
+ enemies.splice(j, 1);
+ }
+ bullet.destroy();
+ bullets.splice(i, 1);
+ break;
+ }
+ }
+ }
+ }
+ // Update player units
+ for (var i = playerUnits.length - 1; i >= 0; i--) {
+ var unit = playerUnits[i];
+ unit.update();
+ if (unit.isDead) {
+ unit.destroy();
+ playerUnits.splice(i, 1);
+ }
+ }
+ // Update enemies
+ for (var i = enemies.length - 1; i >= 0; i--) {
+ var enemy = enemies[i];
+ enemy.update();
+ if (enemy.isDead) {
+ enemy.destroy();
+ enemies.splice(i, 1);
+ } else if (enemy.hasReachedBase) {
+ enemy.destroy();
+ enemies.splice(i, 1);
+ }
+ }
+ // Update base health display
+ baseHealthText.setText('Base Health: ' + playerBase.health);
+ // Check game over condition
+ if (playerBase.isDead) {
+ LK.showGameOver();
+ }
+ // Check win condition (survive 20 waves)
+ if (waveNumber > 20) {
+ LK.showYouWin();
+ }
+};
\ No newline at end of file