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
/****
* 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.5);
costLabel.y = -50;
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
// Import tween plugin for animations
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;
var planningTime = 15; // 15 seconds for planning
var planningTimer = 0;
var planningActive = false;
var countdownText;
// 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 countdown text
countdownText = new Text2('', {
size: 120,
fill: 0xFF0000
});
countdownText.anchor.set(0.5, 0.5);
countdownText.x = 2048 / 2;
countdownText.y = 400;
countdownText.visible = false;
game.addChild(countdownText);
// Create how to play button
var howToPlayButton = new Container();
var howToPlayBg = new Text2('How to Play?', {
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];
var buttonSpacing = 450;
var totalWidth = (buttonTypes.length - 1) * buttonSpacing;
var startX = (2048 - totalWidth) / 2;
for (var i = 0; i < buttonTypes.length; i++) {
var button = new TowerButton(buttonTypes[i], startX + i * buttonSpacing, 2600);
button.scaleX = 2.5;
button.scaleY = 2.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';
}
// For Wave 5 (boss wave), spawn 2 bosses
var enemiesToSpawn = currentWave === maxWaves ? 2 : 1;
for (var j = 0; j < enemiesToSpawn; j++) {
var enemy = new Enemy(enemyType);
// Spawn only from non-blue areas (exclude top and right edges which are blue/water areas)
var side = Math.floor(Math.random() * 2); // Only 2 sides now (bottom and left)
if (side === 0) {
// Bottom edge (land area)
enemy.x = Math.random() * 2048;
enemy.y = 2732;
} else {
// Left edge (land area)
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');
// Start planning phase
planningActive = true;
planningTimer = planningTime * 60; // Convert to ticks (60 FPS)
countdownText.visible = true;
}
};
// 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('Build towers to stop enemies!\n\nTower types:\n• Archer: Fast fire\n• Cannon: High damage\n• Wizard: Slows enemies\n• Military: Spawns soldiers\n\nProtect the castle!', {
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;
}
// Handle planning phase countdown
if (planningActive) {
planningTimer--;
var secondsLeft = Math.ceil(planningTimer / 60);
if (secondsLeft > 0) {
countdownText.setText('Planning Time: ' + secondsLeft);
// Add pulsing animation to countdown text
if (planningTimer % 60 === 0) {
// Every second
tween(countdownText, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 300,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(countdownText, {
scaleX: 1,
scaleY: 1
}, {
duration: 300,
easing: tween.easeIn
});
}
});
}
} else {
// Planning phase over
planningActive = false;
countdownText.visible = false;
}
}
// Update UI
resourcesText.setText('Resources: ' + resources);
waveText.setText('Wave: ' + currentWave);
// Only spawn enemies if planning phase is over
if (!planningActive) {
// 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
@@ -1,10 +1,5 @@
/****
-* Plugins
-****/
-var tween = LK.import("@upit/tween.v1");
-
-/****
* Classes
****/
var Castle = Container.expand(function () {
var self = Container.call(this);
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