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;
self.cost = 20;
} else if (type === 'cannon') {
self.damage = 40;
self.fireRate = 90;
self.range = 120;
self.cost = 40;
} else if (type === 'wizard') {
self.damage = 20;
self.fireRate = 45;
self.range = 180;
self.cost = 60;
} else if (type === 'military') {
self.damage = 0;
self.fireRate = 600; // 10 seconds
self.range = 100;
self.cost = 80;
}
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 towerCosts = {
archer: 20,
cannon: 40,
wizard: 60,
military: 80
};
var label = new Text2(type.charAt(0).toUpperCase() + type.slice(1), {
size: 25,
fill: 0xFFFFFF
});
label.anchor.set(0.5, 0.3);
self.addChild(label);
var costLabel = new Text2(towerCosts[type] + ' coins', {
size: 20,
fill: 0xFFFF00
});
costLabel.anchor.set(0.5, 0.7);
self.addChild(costLabel);
self.down = function (x, y, obj) {
selectedTowerType = self.type;
placingTower = true;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x228B22
});
/****
* Game Code
****/
// Sounds
// UI
// Soldiers
// Enemies
// Projectiles
// Castle and towers
// Game variables
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'];
var towerCosts = [20, 40, 60, 80];
for (var i = 0; i < buttonTypes.length; i++) {
var button = new TowerButton(buttonTypes[i], 200 + i * 200, 2600);
button.scaleX = 1.5;
button.scaleY = 1.5;
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) return;
var towerCosts = {
archer: 20,
cannon: 40,
wizard: 60,
military: 80
};
if (resources < towerCosts[selectedTowerType]) 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;
}
// Place initial towers
var archerTower = new Tower('archer');
archerTower.x = 800;
archerTower.y = 1200;
towers.push(archerTower);
game.addChild(archerTower);
var cannonTower = new Tower('cannon');
cannonTower.x = 1200;
cannonTower.y = 1000;
towers.push(cannonTower);
game.addChild(cannonTower);
// Start background music
LK.playMusic('ortacagmuzik');
}
};
// How to play button click handler
howToPlayButton.down = function (x, y, obj) {
// Create background panel for instructions
var instructionsPanel = new Container();
var panelBg = LK.getAsset('howToPlayBackground', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 6,
scaleY: 4
});
instructionsPanel.addChild(panelBg);
instructionsPanel.x = 2048 / 2;
instructionsPanel.y = 2732 / 2;
game.addChild(instructionsPanel);
// 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: 70,
fill: 0x000000,
align: 'center'
});
instructionsText.anchor.set(0.5, 0.5);
instructionsPanel.addChild(instructionsText);
// Remove instructions after 5 seconds
LK.setTimeout(function () {
if (instructionsPanel.parent) {
instructionsPanel.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
@@ -338,15 +338,15 @@
/****
* Game Code
****/
-// Game variables
-// Castle and towers
-// Projectiles
-// Enemies
-// Soldiers
-// UI
// Sounds
+// UI
+// Soldiers
+// Enemies
+// Projectiles
+// Castle and towers
+// Game variables
var castle;
var towers = [];
var enemies = [];
var soldiers = [];
@@ -446,9 +446,11 @@
var towerButtons = [];
var buttonTypes = ['archer', 'cannon', 'wizard', 'military'];
var towerCosts = [20, 40, 60, 80];
for (var i = 0; i < buttonTypes.length; i++) {
- var button = new TowerButton(buttonTypes[i], 200 + i * 140, 2600);
+ var button = new TowerButton(buttonTypes[i], 200 + i * 200, 2600);
+ button.scaleX = 1.5;
+ button.scaleY = 1.5;
button.visible = false;
towerButtons.push(button);
game.addChild(button);
}
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