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"); var storage = LK.import("@upit/storage.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.down = function (x, y, obj) { if (unitUpgradePopup.visible && unitUpgradePopup.targetUnit === self) { unitUpgradePopup.hide(); } else { unitUpgradePopup.show(self); } }; 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 + (upgrades.health - 1) * 30; self.maxHealth = self.health; self.attackRange = 250 + (upgrades.range - 1) * 25; self.attackDelay = 45; self.damage = 40 + (upgrades.damage - 1) * 10; 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 + (upgrades.health - 1) * 15; self.maxHealth = self.health; self.attackRange = 150 + (upgrades.range - 1) * 15; self.attackDelay = 30; self.damage = 20 + (upgrades.damage - 1) * 5; 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 + (upgrades.health - 1) * 20; self.maxHealth = self.health; self.attackRange = 350 + (upgrades.range - 1) * 35; self.attackDelay = 90; self.damage = 60 + (upgrades.damage - 1) * 15; self.unitType = 'artillery'; self.cost = 120; return self; }); var UnitUpgradePopup = Container.expand(function () { var self = Container.call(this); // Create popup background var popupBg = LK.getAsset('playerBase', { anchorX: 0.5, anchorY: 0.5, scaleX: 2, scaleY: 1.5, alpha: 0.9 }); self.addChild(popupBg); popupBg.tint = 0x333333; // Create upgrade buttons var damageUpgradeBtn = new Text2('DAMAGE +', { size: 30, fill: 0xFFFFFF }); damageUpgradeBtn.anchor.set(0.5, 0.5); damageUpgradeBtn.x = -60; damageUpgradeBtn.y = -30; self.addChild(damageUpgradeBtn); var healthUpgradeBtn = new Text2('HEALTH +', { size: 30, fill: 0xFFFFFF }); healthUpgradeBtn.anchor.set(0.5, 0.5); healthUpgradeBtn.x = 60; healthUpgradeBtn.y = -30; self.addChild(healthUpgradeBtn); var rangeUpgradeBtn = new Text2('RANGE +', { size: 30, fill: 0xFFFFFF }); rangeUpgradeBtn.anchor.set(0.5, 0.5); rangeUpgradeBtn.x = 0; rangeUpgradeBtn.y = 30; self.addChild(rangeUpgradeBtn); self.targetUnit = null; self.upgradeCost = 75; self.show = function (unit) { self.targetUnit = unit; self.x = unit.x; self.y = unit.y - 100; self.visible = true; }; self.hide = function () { self.visible = false; self.targetUnit = null; }; damageUpgradeBtn.down = function () { if (self.targetUnit && resources >= self.upgradeCost) { resources -= self.upgradeCost; self.targetUnit.damage += 15; if (!self.targetUnit.individualUpgrades) self.targetUnit.individualUpgrades = {}; if (!self.targetUnit.individualUpgrades.damage) self.targetUnit.individualUpgrades.damage = 0; self.targetUnit.individualUpgrades.damage++; storage.individualDamageUpgrades = (storage.individualDamageUpgrades || 0) + 1; resourceText.setText('Resources: ' + resources); self.hide(); } }; healthUpgradeBtn.down = function () { if (self.targetUnit && resources >= self.upgradeCost) { resources -= self.upgradeCost; self.targetUnit.health += 50; self.targetUnit.maxHealth += 50; if (!self.targetUnit.individualUpgrades) self.targetUnit.individualUpgrades = {}; if (!self.targetUnit.individualUpgrades.health) self.targetUnit.individualUpgrades.health = 0; self.targetUnit.individualUpgrades.health++; storage.individualHealthUpgrades = (storage.individualHealthUpgrades || 0) + 1; resourceText.setText('Resources: ' + resources); self.hide(); } }; rangeUpgradeBtn.down = function () { if (self.targetUnit && resources >= self.upgradeCost) { resources -= self.upgradeCost; self.targetUnit.attackRange += 50; if (!self.targetUnit.individualUpgrades) self.targetUnit.individualUpgrades = {}; if (!self.targetUnit.individualUpgrades.range) self.targetUnit.individualUpgrades.range = 0; self.targetUnit.individualUpgrades.range++; storage.individualRangeUpgrades = (storage.individualRangeUpgrades || 0) + 1; resourceText.setText('Resources: ' + resources); self.hide(); } }; self.visible = false; 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 unit upgrade popup var unitUpgradePopup = game.addChild(new UnitUpgradePopup()); // Initialize upgrade system var upgrades = { damage: storage.damageLevel || 1, health: storage.healthLevel || 1, range: storage.rangeLevel || 1 }; var upgradeBaseCost = 150; // 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 with square backgrounds var tankButtonBg = LK.getAsset('playerTank', { anchorX: 0.5, anchorY: 1, scaleX: 2, scaleY: 2 }); LK.gui.bottom.addChild(tankButtonBg); tankButtonBg.x = -350; tankButtonBg.y = -20; var tankButton = new Text2('TANK (100)', { size: 35, fill: 0xFFFFFF }); tankButton.anchor.set(0.5, 1); LK.gui.bottom.addChild(tankButton); tankButton.x = -350; tankButton.y = -80; var artilleryButtonBg = LK.getAsset('playerArtillery', { anchorX: 0.5, anchorY: 1, scaleX: 2, scaleY: 2 }); LK.gui.bottom.addChild(artilleryButtonBg); artilleryButtonBg.y = -20; var artilleryButton = new Text2('ARTILLERY (120)', { size: 35, fill: 0xFFFFFF }); artilleryButton.anchor.set(0.5, 1); LK.gui.bottom.addChild(artilleryButton); artilleryButton.y = -80; var infantryButtonBg = LK.getAsset('playerInfantry', { anchorX: 0.5, anchorY: 1, scaleX: 2, scaleY: 2 }); LK.gui.bottom.addChild(infantryButtonBg); infantryButtonBg.x = 350; infantryButtonBg.y = -20; var infantryButton = new Text2('INFANTRY (50)', { size: 35, fill: 0xFFFFFF }); infantryButton.anchor.set(0.5, 1); LK.gui.bottom.addChild(infantryButton); infantryButton.x = 350; infantryButton.y = -80; // Create upgrade buttons var damageUpgradeButton = new Text2('DMG LV' + upgrades.damage + ' (' + upgradeBaseCost * upgrades.damage + ')', { size: 50, fill: 0xFFFFFF }); damageUpgradeButton.anchor.set(1, 0); LK.gui.topRight.addChild(damageUpgradeButton); damageUpgradeButton.x = -20; damageUpgradeButton.y = 70; var healthUpgradeButton = new Text2('HP LV' + upgrades.health + ' (' + upgradeBaseCost * upgrades.health + ')', { size: 50, fill: 0xFFFFFF }); healthUpgradeButton.anchor.set(1, 0); LK.gui.topRight.addChild(healthUpgradeButton); healthUpgradeButton.x = -20; healthUpgradeButton.y = 130; var rangeUpgradeButton = new Text2('RNG LV' + upgrades.range + ' (' + upgradeBaseCost * upgrades.range + ')', { size: 50, fill: 0xFFFFFF }); rangeUpgradeButton.anchor.set(1, 0); LK.gui.topRight.addChild(rangeUpgradeButton); rangeUpgradeButton.x = -20; rangeUpgradeButton.y = 190; function updateSelectedUnit() { tankButtonBg.tint = selectedUnitType === 'tank' ? 0xFFFF00 : 0x4169E1; artilleryButtonBg.tint = selectedUnitType === 'artillery' ? 0xFFFF00 : 0x8B4513; infantryButtonBg.tint = selectedUnitType === 'infantry' ? 0xFFFF00 : 0x228B22; } updateSelectedUnit(); tankButtonBg.down = function () { selectedUnitType = 'tank'; updateSelectedUnit(); }; artilleryButtonBg.down = function () { selectedUnitType = 'artillery'; updateSelectedUnit(); }; infantryButtonBg.down = function () { selectedUnitType = 'infantry'; updateSelectedUnit(); }; damageUpgradeButton.down = function () { var cost = upgradeBaseCost * upgrades.damage; if (resources >= cost && upgrades.damage < 10) { resources -= cost; upgrades.damage++; storage.damageLevel = upgrades.damage; damageUpgradeButton.setText('DMG LV' + upgrades.damage + ' (' + upgradeBaseCost * upgrades.damage + ')'); resourceText.setText('Resources: ' + resources); } }; healthUpgradeButton.down = function () { var cost = upgradeBaseCost * upgrades.health; if (resources >= cost && upgrades.health < 10) { resources -= cost; upgrades.health++; storage.healthLevel = upgrades.health; healthUpgradeButton.setText('HP LV' + upgrades.health + ' (' + upgradeBaseCost * upgrades.health + ')'); resourceText.setText('Resources: ' + resources); } }; rangeUpgradeButton.down = function () { var cost = upgradeBaseCost * upgrades.range; if (resources >= cost && upgrades.range < 10) { resources -= cost; upgrades.range++; storage.rangeLevel = upgrades.range; rangeUpgradeButton.setText('RNG LV' + upgrades.range + ' (' + upgradeBaseCost * upgrades.range + ')'); resourceText.setText('Resources: ' + resources); } }; 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) { // Hide upgrade popup when clicking elsewhere if (unitUpgradePopup.visible) { unitUpgradePopup.hide(); } // 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
@@ -269,8 +269,12 @@
damageUpgradeBtn.down = function () {
if (self.targetUnit && resources >= self.upgradeCost) {
resources -= self.upgradeCost;
self.targetUnit.damage += 15;
+ if (!self.targetUnit.individualUpgrades) self.targetUnit.individualUpgrades = {};
+ if (!self.targetUnit.individualUpgrades.damage) self.targetUnit.individualUpgrades.damage = 0;
+ self.targetUnit.individualUpgrades.damage++;
+ storage.individualDamageUpgrades = (storage.individualDamageUpgrades || 0) + 1;
resourceText.setText('Resources: ' + resources);
self.hide();
}
};
@@ -278,16 +282,24 @@
if (self.targetUnit && resources >= self.upgradeCost) {
resources -= self.upgradeCost;
self.targetUnit.health += 50;
self.targetUnit.maxHealth += 50;
+ if (!self.targetUnit.individualUpgrades) self.targetUnit.individualUpgrades = {};
+ if (!self.targetUnit.individualUpgrades.health) self.targetUnit.individualUpgrades.health = 0;
+ self.targetUnit.individualUpgrades.health++;
+ storage.individualHealthUpgrades = (storage.individualHealthUpgrades || 0) + 1;
resourceText.setText('Resources: ' + resources);
self.hide();
}
};
rangeUpgradeBtn.down = function () {
if (self.targetUnit && resources >= self.upgradeCost) {
resources -= self.upgradeCost;
self.targetUnit.attackRange += 50;
+ if (!self.targetUnit.individualUpgrades) self.targetUnit.individualUpgrades = {};
+ if (!self.targetUnit.individualUpgrades.range) self.targetUnit.individualUpgrades.range = 0;
+ self.targetUnit.individualUpgrades.range++;
+ storage.individualRangeUpgrades = (storage.individualRangeUpgrades || 0) + 1;
resourceText.setText('Resources: ' + resources);
self.hide();
}
};