User prompt
Wave 5 de gelen boosu 2 adet yap
User prompt
Please fix the bug: 'ReferenceError: tween is not defined' in or related to this line: 'tween(countdownText, {' Line Number: 649 ↪💡 Consider importing and using the following plugins: @upit/tween.v1
Code edit (4 edits merged)
Please save this source code
User prompt
Oyuncunu plan yapması için 15 saniyelik bir sayaç yap ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Mavi olan yerlerden düşman gelmesin
User prompt
Nasıl oynanırdaki yazıları ingilizce yap
User prompt
Wave 5 de gelen boos 2 tane olsun
Code edit (1 edits merged)
Please save this source code
User prompt
kule değerlerini 2 tık kule tuşlarının üstüne çıkart
User prompt
kule tuşlarını ortala
User prompt
kule tuşlarını büyüt ve aralarını aç
User prompt
kule tuşlarını büyüt ve aralarını aç
User prompt
kule tuşlarını büyüt ve aralarını aç
User prompt
her bir kuleye değer biç oyun başı iki kule koya bilelim
User prompt
nasıl oynanır yazılarını büyüt
User prompt
assets lerdeki nasiloynanir i nasıl oynanır arka planıyla değiştir
User prompt
assets lerdeki nasiloynanir i nasıl oynanır arka planıyla değiştir
User prompt
nasıl oynanır yazısı için bir arka plan yap
User prompt
nasıl oynanır yeri ekle sağ köşeye
User prompt
nasıl oynanır kısmı ekle
User prompt
DÜŞMANLARIN HIZINI AZALAT
User prompt
ARKA PLAN İÇİN KUŞ BAKIŞI ORTA ÇAĞ SVAŞ ALANI
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Castle = Container.expand(function () { var self = Container.call(this); var graphics = self.attachAsset('castle', { anchorX: 0.5, anchorY: 0.5 }); self.maxHealth = 100; self.health = self.maxHealth; self.takeDamage = function (damage) { self.health -= damage; LK.effects.flashObject(self, 0xFF0000, 300); if (self.health <= 0) { LK.showGameOver(); } }; return self; }); var Enemy = Container.expand(function (type) { var self = Container.call(this); self.type = type; self.maxHealth = 30; self.health = self.maxHealth; self.speed = 1; self.damage = 10; self.reward = 5; self.slowTime = 0; self.baseSpeed = 1; var assetName = 'basicEnemy'; if (type === 'fast') { assetName = 'fastEnemy'; self.speed = 2; self.baseSpeed = 2; self.health = 20; self.maxHealth = 20; } else if (type === 'heavy') { assetName = 'heavyEnemy'; self.speed = 0.5; self.baseSpeed = 0.5; self.health = 80; self.maxHealth = 80; self.damage = 25; self.reward = 15; } else if (type === 'boss') { assetName = 'bossEnemy'; self.speed = 0.75; self.baseSpeed = 0.75; self.health = 300; self.maxHealth = 300; self.damage = 50; self.reward = 100; } var graphics = self.attachAsset(assetName, { anchorX: 0.5, anchorY: 0.5 }); self.destroyed = false; self.takeDamage = function (damage) { self.health -= damage; LK.effects.flashObject(self, 0xFFFFFF, 200); if (self.health <= 0) { resources += self.reward; LK.getSound('death').play(); self.destroyed = true; self.destroy(); } else { LK.getSound('hit').play(); } }; self.slow = function (duration) { self.slowTime = duration; self.speed = self.baseSpeed * 0.3; }; self.update = function () { if (self.slowTime > 0) { self.slowTime--; if (self.slowTime === 0) { self.speed = self.baseSpeed; } } // Move directly towards castle var dx = castle.x - self.x; var dy = castle.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < 50) { castle.takeDamage(self.damage); self.destroyed = true; self.destroy(); } else { self.x += dx / distance * self.speed; self.y += dy / distance * self.speed; } }; return self; }); var Lightning = Container.expand(function () { var self = Container.call(this); var graphics = self.attachAsset('lightning', { anchorX: 0.5, anchorY: 0.5 }); self.damage = 20; self.life = 30; self.update = function () { self.life--; if (self.life <= 0) { if (self.target && !self.target.destroyed) { self.target.takeDamage(self.damage); } self.destroy(); } }; return self; }); var Projectile = Container.expand(function (type, target) { var self = Container.call(this); self.type = type; self.target = target; self.speed = 8; self.damage = 15; var assetName = 'arrow'; if (type === 'cannon') { assetName = 'cannonball'; self.damage = 40; self.speed = 6; } var graphics = self.attachAsset(assetName, { anchorX: 0.5, anchorY: 0.5 }); self.update = function () { if (!self.target || self.target.destroyed) { self.destroy(); return; } var dx = self.target.x - self.x; var dy = self.target.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < 20) { self.target.takeDamage(self.damage); self.destroy(); return; } self.x += dx / distance * self.speed; self.y += dy / distance * self.speed; }; return self; }); var Soldier = Container.expand(function () { var self = Container.call(this); var graphics = self.attachAsset('soldier', { anchorX: 0.5, anchorY: 0.5 }); self.health = 50; self.speed = 3; self.damage = 8; self.range = 40; self.lastAttack = 0; self.attackRate = 60; self.findTarget = function () { 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 <= self.range) { return enemy; } } return null; }; self.attack = function (target) { if (LK.ticks - self.lastAttack >= self.attackRate) { self.lastAttack = LK.ticks; target.takeDamage(self.damage); } }; self.update = function () { var target = self.findTarget(); if (target) { self.attack(target); } else if (enemies.length > 0) { var nearest = enemies[0]; var minDistance = Infinity; 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 < minDistance) { minDistance = distance; nearest = enemy; } } if (nearest) { var dx = nearest.x - self.x; var dy = nearest.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); self.x += dx / distance * self.speed; self.y += dy / distance * self.speed; } } }; return self; }); var Tower = Container.expand(function (type) { var self = Container.call(this); var graphics = self.attachAsset(type + 'Tower', { anchorX: 0.5, anchorY: 0.5 }); self.type = type; self.range = 150; self.damage = 10; self.fireRate = 60; // ticks between shots self.lastShot = 0; self.cost = 20; if (type === 'archer') { self.damage = 15; self.fireRate = 30; } else if (type === 'cannon') { self.damage = 40; self.fireRate = 90; self.range = 120; } else if (type === 'wizard') { self.damage = 20; self.fireRate = 45; self.range = 180; } else if (type === 'military') { self.damage = 0; self.fireRate = 600; // 10 seconds self.range = 100; } self.canShoot = function () { return LK.ticks - self.lastShot >= self.fireRate; }; self.findTarget = function () { 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 <= self.range) { return enemy; } } return null; }; self.shoot = function (target) { if (!self.canShoot()) return; self.lastShot = LK.ticks; if (self.type === 'military') { // Spawn 2 soldiers every 10 seconds for (var i = 0; i < 2; i++) { var soldier = new Soldier(); soldier.x = self.x + (i * 40 - 20); // Spread soldiers slightly apart soldier.y = self.y; soldiers.push(soldier); game.addChild(soldier); } } else if (self.type === 'wizard') { target.slow(180); // 3 seconds var lightning = new Lightning(); lightning.x = target.x; lightning.y = target.y; lightning.target = target; projectiles.push(lightning); game.addChild(lightning); } else { var projectile = new Projectile(self.type, target); projectile.x = self.x; projectile.y = self.y; projectiles.push(projectile); game.addChild(projectile); } LK.getSound('shoot').play(); }; self.update = function () { var target = self.findTarget(); if (target) { self.shoot(target); } }; return self; }); var TowerButton = Container.expand(function (type, x, y) { var self = Container.call(this); var graphics = self.attachAsset('towerButton', { anchorX: 0.5, anchorY: 0.5 }); self.type = type; self.x = x; self.y = y; var label = new Text2(type.charAt(0).toUpperCase() + type.slice(1), { size: 30, fill: 0xFFFFFF }); label.anchor.set(0.5, 0.5); self.addChild(label); self.down = function (x, y, obj) { selectedTowerType = self.type; placingTower = true; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x228B22 }); /**** * Game Code ****/ // Game variables // Castle and towers // Projectiles // Enemies // Soldiers // UI // Sounds var castle; var towers = []; var enemies = []; var soldiers = []; var projectiles = []; var resources = 100; var currentWave = 1; var maxWaves = 5; var enemiesSpawned = 0; var enemiesPerWave = 8; var waveTimer = 0; var selectedTowerType = null; var placingTower = false; var gameStarted = false; var startButton; // Path for enemies var path = [{ x: 100, y: 100 }, { x: 400, y: 100 }, { x: 400, y: 400 }, { x: 800, y: 400 }, { x: 800, y: 800 }, { x: 1200, y: 800 }, { x: 1200, y: 1200 }, { x: 1600, y: 1200 }, { x: 1600, y: 1600 }, { x: 1024, y: 1600 }]; // Add medieval battlefield background var background = LK.getAsset('medievalBattlefield', { anchorX: 0, anchorY: 0, x: 0, y: 0 }); game.addChild(background); // Create castle castle = new Castle(); castle.x = 1024; castle.y = 1600; game.addChild(castle); // Create UI var resourcesText = new Text2('Resources: ' + resources, { size: 60, fill: 0xFFFFFF }); resourcesText.anchor.set(0, 0); LK.gui.topLeft.addChild(resourcesText); var waveText = new Text2('Wave: ' + currentWave, { size: 60, fill: 0xFFFFFF }); waveText.anchor.set(1, 0); LK.gui.topRight.addChild(waveText); // Create how to play button var howToPlayButton = new Container(); var howToPlayBg = new Text2('Nasıl Oynanır?', { size: 40, fill: 0xFFFFFF }); howToPlayBg.anchor.set(1, 0); howToPlayButton.addChild(howToPlayBg); howToPlayButton.x = -10; howToPlayButton.y = 80; LK.gui.topRight.addChild(howToPlayButton); // Create start button startButton = new Container(); var startButtonBg = LK.getAsset('start', { anchorX: 0.5, anchorY: 0.5, scaleX: 2, scaleY: 2 }); startButton.addChild(startButtonBg); startButton.x = 2048 / 2; startButton.y = 2732 / 2; game.addChild(startButton); // Create tower buttons (initially hidden) var towerButtons = []; var buttonTypes = ['archer', 'cannon', 'wizard', 'military']; for (var i = 0; i < buttonTypes.length; i++) { var button = new TowerButton(buttonTypes[i], 200 + i * 140, 2600); button.visible = false; towerButtons.push(button); game.addChild(button); } // Helper functions function spawnEnemy() { var enemyType = 'basic'; if (currentWave === maxWaves) { enemyType = 'boss'; } else if (Math.random() < 0.3) { enemyType = 'fast'; } else if (Math.random() < 0.2) { enemyType = 'heavy'; } var enemy = new Enemy(enemyType); // Spawn at random edge positions var side = Math.floor(Math.random() * 4); if (side === 0) { // Top edge enemy.x = Math.random() * 2048; enemy.y = 0; } else if (side === 1) { // Right edge enemy.x = 2048; enemy.y = Math.random() * 2732; } else if (side === 2) { // Bottom edge enemy.x = Math.random() * 2048; enemy.y = 2732; } else { // Left edge enemy.x = 0; enemy.y = Math.random() * 2732; } enemies.push(enemy); game.addChild(enemy); enemiesSpawned++; } function canPlaceTower(x, y) { // Check if position is too close to other towers for (var i = 0; i < towers.length; i++) { var tower = towers[i]; var dx = tower.x - x; var dy = tower.y - y; if (Math.sqrt(dx * dx + dy * dy) < 120) { return false; } } // Check if position is too close to castle var dx = castle.x - x; var dy = castle.y - y; if (Math.sqrt(dx * dx + dy * dy) < 150) { return false; } return true; } function placeTower(x, y) { if (!selectedTowerType || resources < 20) return; if (canPlaceTower(x, y)) { var tower = new Tower(selectedTowerType); tower.x = x; tower.y = y; towers.push(tower); game.addChild(tower); resources -= tower.cost; resourcesText.setText('Resources: ' + resources); placingTower = false; selectedTowerType = null; } } // Start button click handler startButton.down = function (x, y, obj) { if (!gameStarted) { gameStarted = true; startButton.visible = false; // Show tower buttons for (var i = 0; i < towerButtons.length; i++) { towerButtons[i].visible = true; } // Start background music LK.playMusic('ortacagmuzik'); } }; // How to play button click handler howToPlayButton.down = function (x, y, obj) { // Show instructions (you can customize this message) var instructionsText = new Text2('Düşmanları durdurmak için kule inşa edin!\n\nKule türleri:\n• Okçu: Hızlı ateş\n• Top: Yüksek hasar\n• Büyücü: Düşmanları yavaşlatır\n• Askeri: Asker üretir\n\nKaleyi koruyun!', { size: 50, fill: 0xFFFFFF, align: 'center' }); instructionsText.anchor.set(0.5, 0.5); instructionsText.x = 2048 / 2; instructionsText.y = 2732 / 2; game.addChild(instructionsText); // Remove instructions after 5 seconds LK.setTimeout(function () { if (instructionsText.parent) { instructionsText.destroy(); } }, 5000); }; // Game events game.down = function (x, y, obj) { if (placingTower && gameStarted) { placeTower(x, y); } }; // Main game loop game.update = function () { // Only run game logic if game has started if (!gameStarted) return; // Update UI resourcesText.setText('Resources: ' + resources); waveText.setText('Wave: ' + currentWave); // Spawn enemies if (enemiesSpawned < enemiesPerWave && waveTimer <= 0) { spawnEnemy(); waveTimer = 60; // 1 second between spawns } if (waveTimer > 0) { waveTimer--; } // Check wave completion if (enemiesSpawned >= enemiesPerWave && enemies.length === 0) { currentWave++; if (currentWave > maxWaves) { LK.showYouWin(); } else { enemiesSpawned = 0; enemiesPerWave += 2; waveTimer = 180; // 3 seconds between waves } } // Clean up destroyed objects for (var i = enemies.length - 1; i >= 0; i--) { if (enemies[i].destroyed) { enemies.splice(i, 1); } } for (var i = projectiles.length - 1; i >= 0; i--) { if (projectiles[i].destroyed) { projectiles.splice(i, 1); } } for (var i = soldiers.length - 1; i >= 0; i--) { if (soldiers[i].destroyed) { soldiers.splice(i, 1); } } };
===================================================================
--- original.js
+++ change.js
@@ -402,8 +402,19 @@
fill: 0xFFFFFF
});
waveText.anchor.set(1, 0);
LK.gui.topRight.addChild(waveText);
+// Create how to play button
+var howToPlayButton = new Container();
+var howToPlayBg = new Text2('Nasıl Oynanır?', {
+ size: 40,
+ fill: 0xFFFFFF
+});
+howToPlayBg.anchor.set(1, 0);
+howToPlayButton.addChild(howToPlayBg);
+howToPlayButton.x = -10;
+howToPlayButton.y = 80;
+LK.gui.topRight.addChild(howToPlayButton);
// Create start button
startButton = new Container();
var startButtonBg = LK.getAsset('start', {
anchorX: 0.5,
@@ -414,19 +425,8 @@
startButton.addChild(startButtonBg);
startButton.x = 2048 / 2;
startButton.y = 2732 / 2;
game.addChild(startButton);
-// Create how to play instructions
-var howToPlayText = new Text2('NASIL OYNANIR:\n\n• Kaleyi düşmanlardan koru\n• Kuleleri yerleştirmek için alttan butonları kullan\n• Okçu Kulesi: Hızlı ok atar\n• Top Kulesi: Güçlü top mermisi atar\n• Büyücü Kulesi: Düşmanları yavaşlatır\n• Askeri Kule: Asker çıkarır\n\n• Düşman Türleri:\n• Temel: Normal hız ve güç\n• Hızlı: Hızlı ama zayıf\n• Ağır: Yavaş ama güçlü\n• Boss: Çok güçlü ve dayanıklı\n\n• 5 dalga düşmanı yenersen kazanırsın!', {
- size: 40,
- fill: 0xFFFFFF,
- wordWrap: true,
- wordWrapWidth: 800
-});
-howToPlayText.anchor.set(0.5, 0.5);
-howToPlayText.x = 2048 / 2;
-howToPlayText.y = 1200;
-game.addChild(howToPlayText);
// Create tower buttons (initially hidden)
var towerButtons = [];
var buttonTypes = ['archer', 'cannon', 'wizard', 'military'];
for (var i = 0; i < buttonTypes.length; i++) {
@@ -505,17 +505,35 @@
startButton.down = function (x, y, obj) {
if (!gameStarted) {
gameStarted = true;
startButton.visible = false;
- howToPlayText.visible = false;
// Show tower buttons
for (var i = 0; i < towerButtons.length; i++) {
towerButtons[i].visible = true;
}
// Start background music
LK.playMusic('ortacagmuzik');
}
};
+// How to play button click handler
+howToPlayButton.down = function (x, y, obj) {
+ // Show instructions (you can customize this message)
+ var instructionsText = new Text2('Düşmanları durdurmak için kule inşa edin!\n\nKule türleri:\n• Okçu: Hızlı ateş\n• Top: Yüksek hasar\n• Büyücü: Düşmanları yavaşlatır\n• Askeri: Asker üretir\n\nKaleyi koruyun!', {
+ size: 50,
+ fill: 0xFFFFFF,
+ align: 'center'
+ });
+ instructionsText.anchor.set(0.5, 0.5);
+ instructionsText.x = 2048 / 2;
+ instructionsText.y = 2732 / 2;
+ game.addChild(instructionsText);
+ // Remove instructions after 5 seconds
+ LK.setTimeout(function () {
+ if (instructionsText.parent) {
+ instructionsText.destroy();
+ }
+ }, 5000);
+};
// Game events
game.down = function (x, y, obj) {
if (placingTower && gameStarted) {
placeTower(x, y);
pixel art okçu kulesi. In-Game asset. 2d. High contrast. No shadows
topçu kule pixel art. In-Game asset. 2d. High contrast. No shadows
gülle pixel art. In-Game asset. 2d. High contrast. No shadows
pixel art büyücü kulesi. In-Game asset. 2d. High contrast. No shadows
pixel art askari kule. In-Game asset. 2d. High contrast. No shadows
pixel art yıldırım. In-Game asset. 2d. High contrast. No shadows
arrow pixel art. In-Game asset. 2d. High contrast. No shadows
orta çağ pixel art asker. In-Game asset. 2d. High contrast. No shadows
orta çağ kale pixel art. In-Game asset. 2d. High contrast. No shadows
orta çağ düşman pixel art. In-Game asset. 2d. High contrast. No shadows
boss düşman altın zırh pixel art. In-Game asset. 2d. High contrast. No shadows
orta çağ hızlı düşman pixel art. In-Game asset. 2d. High contrast. No shadows
orta çağ ağır düşman pixel art. In-Game asset. 2d. High contrast. No shadows
orta çağ pixel art buton. In-Game asset. 2d. High contrast. No shadows
yazı olmadan
PİXEL ART ÇİMENLİK OVA. In-Game asset. 2d. High contrast. No shadows