User prompt
oyuna başlarken altınımız 500 olsun ve oyundaki canımız 3 olsun ve öyle başlasın
User prompt
heavy ve rapid canavarlara vurmuyo düzelt
User prompt
oyuna başlarken altınımız 1000 olsun
User prompt
oyun seviyeli olsun ilk atağı savunduğumuzda yeni bir seviye başlasın ama zor olsun ve heavy çok güçlü yani enemeyleri daha hızlı öldürsün rapit orta güçlü olsun havy göre ve 3 canımız olsun
User prompt
oyunda her saldırıyı savunduğumuzda levelimiz artsın ve oyun dahada zorlaşsın ama bim towerlarımız daha hızlı vursun oyun seviyesiyle aynı güçte olsun
User prompt
3 canımız olsun enemeyler buildinge vurursa canımız gitsin
User prompt
altını yüksek olan towerlar daha güçlü olsun
User prompt
altın sayımız oyunda gözüksün gözükmüyo
User prompt
oyunda her öldürdüğümüz enemy başına altın kazanalım 10 tane ve o altılarla daha iyi savunma yapmak için harcayalım
Code edit (1 edits merged)
Please save this source code
User prompt
Tower Defense: Last Stand
Initial prompt
bana kendin bir oyun yap ama bu oyun bir binayı savunmayla alakalı olsun
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Building = Container.expand(function () { var self = Container.call(this); var buildingGraphics = self.attachAsset('building', { anchorX: 0.5, anchorY: 0.5 }); self.health = 200; self.maxHealth = 200; self.takeDamage = function (damage) { self.health -= damage; if (self.health <= 0) { self.health = 0; return true; } LK.effects.flashObject(self, 0xFF0000, 500); 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 = 8; self.targetX = 0; self.targetY = 0; self.damage = 25; self.setTarget = function (x, y) { self.targetX = x; self.targetY = y; var dx = x - self.x; var dy = y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); self.velocityX = dx / distance * self.speed; self.velocityY = dy / distance * self.speed; }; self.update = function () { self.x += self.velocityX; self.y += self.velocityY; }; return self; }); var Enemy = Container.expand(function () { var self = Container.call(this); var enemyGraphics = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); self.health = 100; self.maxHealth = 100; self.speed = 1.5; self.coinValue = 10; self.targetX = 1024; self.targetY = 1366; self.takeDamage = function (damage) { self.health -= damage; if (self.health <= 0) { self.health = 0; return true; } return false; }; 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 > 5) { self.x += dx / distance * self.speed; self.y += dy / distance * self.speed; } }; return self; }); var Tower = Container.expand(function () { var self = Container.call(this); self.range = 200; self.damage = 80; self.fireRate = 50; self.lastFired = 0; self.cost = 50; self.towerType = 'basic'; var towerGraphics = self.attachAsset('basicTower', { anchorX: 0.5, anchorY: 0.5 }); self.canFire = function () { var adjustedFireRate = Math.max(10, self.fireRate - (level - 1) * 5); return LK.ticks - self.lastFired >= adjustedFireRate; }; self.findTarget = function () { var closestEnemy = null; var closestDistance = self.range; for (var i = 0; i < enemies.length; i++) { var enemy = enemies[i]; var dx = enemy.x - self.x; var dy = enemy.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < closestDistance) { closestDistance = distance; closestEnemy = enemy; } } return closestEnemy; }; self.fire = function (target) { if (!self.canFire()) return; var bullet = new Bullet(); bullet.x = self.x; bullet.y = self.y; bullet.damage = self.damage; bullet.setTarget(target.x, target.y); bullets.push(bullet); game.addChild(bullet); self.lastFired = LK.ticks; LK.getSound('shoot').play(); }; self.update = function () { var target = self.findTarget(); if (target) { self.fire(target); } }; return self; }); var RapidTower = Tower.expand(function () { var self = Tower.call(this); self.removeChild(self.children[0]); var rapidGraphics = self.attachAsset('rapidTower', { anchorX: 0.5, anchorY: 0.5 }); self.range = 150; self.damage = 40; self.fireRate = 15; self.cost = 75; self.towerType = 'rapid'; self.canFire = function () { var adjustedFireRate = Math.max(5, self.fireRate - (level - 1) * 2); return LK.ticks - self.lastFired >= adjustedFireRate; }; self.fire = function (target) { if (!self.canFire()) return; var bullet = new Bullet(); bullet.x = self.x; bullet.y = self.y; bullet.damage = self.damage; bullet.setTarget(target.x, target.y); bullets.push(bullet); game.addChild(bullet); self.lastFired = LK.ticks; LK.getSound('shoot').play(); }; self.findTarget = function () { var closestEnemy = null; var closestDistance = self.range; for (var i = 0; i < enemies.length; i++) { var enemy = enemies[i]; var dx = enemy.x - self.x; var dy = enemy.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < closestDistance) { closestDistance = distance; closestEnemy = enemy; } } return closestEnemy; }; self.update = function () { var target = self.findTarget(); if (target) { self.fire(target); } }; return self; }); var HeavyTower = Tower.expand(function () { var self = Tower.call(this); self.removeChild(self.children[0]); var heavyGraphics = self.attachAsset('heavyTower', { anchorX: 0.5, anchorY: 0.5 }); self.range = 350; self.damage = 200; self.fireRate = 120; self.cost = 100; self.towerType = 'heavy'; self.canFire = function () { var adjustedFireRate = Math.max(20, self.fireRate - (level - 1) * 10); return LK.ticks - self.lastFired >= adjustedFireRate; }; self.fire = function (target) { if (!self.canFire()) return; var bullet = new Bullet(); bullet.x = self.x; bullet.y = self.y; bullet.damage = self.damage; bullet.setTarget(target.x, target.y); bullets.push(bullet); game.addChild(bullet); self.lastFired = LK.ticks; LK.getSound('shoot').play(); }; self.findTarget = function () { var closestEnemy = null; var closestDistance = self.range; for (var i = 0; i < enemies.length; i++) { var enemy = enemies[i]; var dx = enemy.x - self.x; var dy = enemy.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < closestDistance) { closestDistance = distance; closestEnemy = enemy; } } return closestEnemy; }; self.update = function () { var target = self.findTarget(); if (target) { self.fire(target); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x2F4F2F }); /**** * Game Code ****/ var building; var towers = []; var enemies = []; var bullets = []; var coins = 500; var wave = 1; var enemiesInWave = 5; var enemiesSpawned = 0; var waveActive = false; var spawnTimer = 0; var selectedTowerType = 'basic'; var showingRange = false; var rangeIndicator = null; var lives = 3; var level = 1; // Initialize building at center building = game.addChild(new Building()); building.x = 1024; building.y = 1366; // UI Elements var coinsText = new Text2('Gold: ' + coins, { size: 60, fill: 0xFFD700 }); coinsText.anchor.set(1, 0); coinsText.x = -20; coinsText.y = 120; LK.gui.topRight.addChild(coinsText); var waveText = new Text2('Wave: ' + wave, { size: 60, fill: 0xFFFFFF }); waveText.anchor.set(0.5, 0); LK.gui.top.addChild(waveText); var healthText = new Text2('Health: ' + building.health, { size: 60, fill: 0xFF0000 }); healthText.anchor.set(0, 0); LK.gui.bottomLeft.addChild(healthText); var livesText = new Text2('Lives: ' + lives, { size: 60, fill: 0xFF6347 }); livesText.anchor.set(0, 0); livesText.y = 80; LK.gui.bottomLeft.addChild(livesText); var levelText = new Text2('Level: ' + level, { size: 60, fill: 0x00FFFF }); levelText.anchor.set(0, 0); levelText.y = 160; LK.gui.bottomLeft.addChild(levelText); // Tower selection buttons var basicButton = new Text2('Basic (50)', { size: 40, fill: 0x00FF00 }); basicButton.anchor.set(0.5, 1); LK.gui.bottom.addChild(basicButton); var heavyButton = new Text2('Heavy (100)', { size: 40, fill: 0x0000FF }); heavyButton.anchor.set(0.5, 1); heavyButton.y = -80; LK.gui.bottom.addChild(heavyButton); var rapidButton = new Text2('Rapid (75)', { size: 40, fill: 0xFFFF00 }); rapidButton.anchor.set(0.5, 1); rapidButton.y = -160; LK.gui.bottom.addChild(rapidButton); // Button interactions basicButton.down = function () { selectedTowerType = 'basic'; updateButtonColors(); }; heavyButton.down = function () { selectedTowerType = 'heavy'; updateButtonColors(); }; rapidButton.down = function () { selectedTowerType = 'rapid'; updateButtonColors(); }; function updateButtonColors() { basicButton.tint = selectedTowerType === 'basic' ? 0xFFFFFF : 0x888888; heavyButton.tint = selectedTowerType === 'heavy' ? 0xFFFFFF : 0x888888; rapidButton.tint = selectedTowerType === 'rapid' ? 0xFFFFFF : 0x888888; } updateButtonColors(); function spawnEnemy() { var enemy = new Enemy(); // Spawn from random edge var side = Math.floor(Math.random() * 4); switch (side) { case 0: // Top enemy.x = Math.random() * 2048; enemy.y = -30; break; case 1: // Right enemy.x = 2078; enemy.y = Math.random() * 2732; break; case 2: // Bottom enemy.x = Math.random() * 2048; enemy.y = 2762; break; case 3: // Left enemy.x = -30; enemy.y = Math.random() * 2732; break; } enemy.targetX = building.x; enemy.targetY = building.y; enemy.health = 50 + wave * 40 + level * 50; enemy.maxHealth = enemy.health; enemy.speed = 1.5 + level * 0.5; enemy.coinValue = 10; enemies.push(enemy); game.addChild(enemy); } function startWave() { if (!waveActive) { waveActive = true; enemiesSpawned = 0; enemiesInWave = 5 + wave * 3 + level * 2; spawnTimer = 0; } } function canPlaceTower(x, y) { // Check if position is too close to building var dx = x - building.x; var dy = y - building.y; if (Math.sqrt(dx * dx + dy * dy) < 150) { return false; } // Check if position overlaps with existing towers for (var i = 0; i < towers.length; i++) { var tower = towers[i]; var tdx = x - tower.x; var tdy = y - tower.y; if (Math.sqrt(tdx * tdx + tdy * tdy) < 100) { return false; } } return true; } function getTowerCost(type) { switch (type) { case 'basic': return 50; case 'heavy': return 100; case 'rapid': return 75; default: return 50; } } function placeTower(x, y, type) { var cost = getTowerCost(type); if (coins < cost) return false; if (!canPlaceTower(x, y)) return false; var tower; switch (type) { case 'heavy': tower = new HeavyTower(); break; case 'rapid': tower = new RapidTower(); break; default: tower = new Tower(); break; } tower.x = x; tower.y = y; towers.push(tower); game.addChild(tower); coins -= cost; coinsText.setText('Gold: ' + coins); return true; } // Game input handling game.down = function (x, y, obj) { placeTower(x, y, selectedTowerType); }; // Start first wave startWave(); game.update = function () { // Wave spawning if (waveActive && enemiesSpawned < enemiesInWave) { spawnTimer++; if (spawnTimer >= 90) { // Spawn every 1.5 seconds spawnEnemy(); enemiesSpawned++; spawnTimer = 0; } } // Check if wave is complete if (waveActive && enemiesSpawned >= enemiesInWave && enemies.length === 0) { waveActive = false; wave++; level++; waveText.setText('Wave: ' + wave); levelText.setText('Level: ' + level); // Start next wave after delay LK.setTimeout(function () { startWave(); }, 3000); } // Update bullets for (var i = bullets.length - 1; i >= 0; i--) { var bullet = bullets[i]; // Check if bullet is off screen if (bullet.x < -50 || bullet.x > 2098 || bullet.y < -50 || bullet.y > 2782) { bullet.destroy(); bullets.splice(i, 1); continue; } // Check bullet-enemy collisions var hit = false; for (var j = enemies.length - 1; j >= 0; j--) { var enemy = enemies[j]; if (bullet.intersects(enemy)) { var killed = enemy.takeDamage(bullet.damage); if (killed) { coins += enemy.coinValue; coinsText.setText('Gold: ' + coins); enemy.destroy(); enemies.splice(j, 1); LK.getSound('enemyHit').play(); } bullet.destroy(); bullets.splice(i, 1); hit = true; break; } } } // Update enemies for (var k = enemies.length - 1; k >= 0; k--) { var enemy = enemies[k]; // Check if enemy reached building if (enemy.intersects(building)) { lives--; livesText.setText('Lives: ' + lives); enemy.destroy(); enemies.splice(k, 1); LK.getSound('buildingHit').play(); LK.effects.flashObject(building, 0xFF0000, 500); if (lives <= 0) { LK.showGameOver(); return; } } } // Check victory condition (survived 10 waves) if (wave > 10 && !waveActive && enemies.length === 0) { LK.showYouWin(); } };
===================================================================
--- original.js
+++ change.js
@@ -248,9 +248,9 @@
var building;
var towers = [];
var enemies = [];
var bullets = [];
-var coins = 1000;
+var coins = 500;
var wave = 1;
var enemiesInWave = 5;
var enemiesSpawned = 0;
var waveActive = false;