User prompt
Oyuncunun kendisi askerlerin gideceği yeri seçsin, oyuncunun dokunduğu yere gitsin askerler.
Code edit (1 edits merged)
Please save this source code
User prompt
Roma imparatorluğu askerlerinin gücünü azalt.
User prompt
Her saniye oyunculara beş altın verilsin ve ve askerleri almak için de altın verelim, daha pahalı olan askerler daha güçlü, hızlı olsun. Her imparatorluğun üç farklı asker çeşidi olsun.
User prompt
İmparatorluk seçme menüsünü düzelt ve menüde hangi imparatorlukları seçebileceğimizi göster
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'toGlobal')' in or related to this line: 'var gamePos = game.toLocal(obj.parent.toGlobal(obj.position));' Line Number: 530
User prompt
Başlat butonu çalıştır
User prompt
Başlat menüsünü düzelt
User prompt
Oyunu başlat menüsü ekle
Code edit (1 edits merged)
Please save this source code
User prompt
Empire's Last Stand
Initial prompt
Dört devletin birbirine saldırdığı ve oyuncunun da bu devletlerden birini yönettiği bu devletlerinde Osmanlı, Roma imparatorluğu, Safeviler, İngilizlerin kendi özelliklerini kullanarak düz bir vadide son hayatta kalan olmaya çalıştıkları bir oyun yap
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Empire = Container.expand(function (empireType) {
var self = Container.call(this);
self.empireType = empireType;
self.health = 100;
self.maxHealth = 100;
self.resources = 50;
self.units = [];
self.isDestroyed = false;
// Create base
var baseAsset = empireType + 'Base';
self.base = self.attachAsset(baseAsset, {
anchorX: 0.5,
anchorY: 0.5
});
// Create health bar background
self.healthBarBg = self.addChild(LK.getAsset('resource', {
anchorX: 0,
anchorY: 0,
scaleX: 4,
scaleY: 0.5
}));
self.healthBarBg.tint = 0x444444;
// Create health bar
self.healthBar = self.addChild(LK.getAsset('resource', {
anchorX: 0,
anchorY: 0,
scaleX: 4,
scaleY: 0.5
}));
self.healthBar.tint = 0x00FF00;
self.updateHealthBar = function () {
var healthPercent = self.health / self.maxHealth;
self.healthBar.scaleX = 4 * healthPercent;
if (healthPercent > 0.6) {
self.healthBar.tint = 0x00FF00;
} else if (healthPercent > 0.3) {
self.healthBar.tint = 0xFFFF00;
} else {
self.healthBar.tint = 0xFF0000;
}
};
self.positionHealthBar = function () {
self.healthBarBg.x = -60;
self.healthBarBg.y = -80;
self.healthBar.x = -60;
self.healthBar.y = -80;
};
self.takeDamage = function (damage) {
if (self.isDestroyed) return;
self.health -= damage;
self.updateHealthBar();
if (self.health <= 0) {
self.health = 0;
self.destroy();
}
};
self.destroy = function () {
if (self.isDestroyed) return;
self.isDestroyed = true;
LK.getSound('empireDestroyed').play();
// Remove from empires array
for (var i = empires.length - 1; i >= 0; i--) {
if (empires[i] === self) {
empires.splice(i, 1);
break;
}
}
// Destroy all units
for (var j = self.units.length - 1; j >= 0; j--) {
if (self.units[j] && self.units[j].parent) {
self.units[j].parent.removeChild(self.units[j]);
}
}
self.units = [];
// Visual destruction effect
tween(self, {
alpha: 0,
scaleX: 0.1,
scaleY: 0.1
}, {
duration: 1000,
onFinish: function onFinish() {
if (self.parent) {
self.parent.removeChild(self);
}
}
});
};
self.spawnUnit = function () {
if (self.isDestroyed || self.resources < 20) return;
self.resources -= 20;
var unit = new Unit(self.empireType, self);
// Position unit near base
var angle = Math.random() * Math.PI * 2;
var distance = 80 + Math.random() * 40;
unit.x = self.x + Math.cos(angle) * distance;
unit.y = self.y + Math.sin(angle) * distance;
self.units.push(unit);
game.addChild(unit);
};
self.update = function () {
if (self.isDestroyed) return;
self.positionHealthBar();
// Auto spawn units
if (LK.ticks % 120 === 0 && self.resources >= 20) {
self.spawnUnit();
}
// Gain resources over time
if (LK.ticks % 60 === 0) {
self.resources += 5;
if (self.resources > 200) self.resources = 200;
}
};
return self;
});
var Projectile = Container.expand(function (startX, startY, targetX, targetY, damage, empireType) {
var self = Container.call(this);
self.damage = damage;
self.empireType = empireType;
self.speed = 5;
var projectileGraphics = self.attachAsset('projectile', {
anchorX: 0.5,
anchorY: 0.5
});
self.x = startX;
self.y = startY;
// Calculate direction
var dx = targetX - startX;
var dy = targetY - startY;
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;
// Check for hits
for (var i = 0; i < empires.length; i++) {
var empire = empires[i];
if (empire.empireType !== self.empireType && !empire.isDestroyed) {
if (self.intersects(empire)) {
empire.takeDamage(self.damage);
self.destroy();
return;
}
// Check units
for (var j = 0; j < empire.units.length; j++) {
var unit = empire.units[j];
if (unit && unit.parent && self.intersects(unit)) {
unit.takeDamage(self.damage);
self.destroy();
return;
}
}
}
}
// Remove if out of bounds
if (self.x < 0 || self.x > 2048 || self.y < 0 || self.y > 2732) {
self.destroy();
}
};
self.destroy = function () {
if (self.parent) {
self.parent.removeChild(self);
}
};
return self;
});
var Resource = Container.expand(function () {
var self = Container.call(this);
self.resourceGraphics = self.attachAsset('resource', {
anchorX: 0.5,
anchorY: 0.5
});
self.collected = false;
self.collect = function (empire) {
if (self.collected) return;
self.collected = true;
empire.resources += 10;
LK.getSound('resource').play();
tween(self, {
alpha: 0,
scaleX: 2,
scaleY: 2
}, {
duration: 300,
onFinish: function onFinish() {
self.destroy();
}
});
};
self.destroy = function () {
// Remove from resources array
for (var i = resources.length - 1; i >= 0; i--) {
if (resources[i] === self) {
resources.splice(i, 1);
break;
}
}
if (self.parent) {
self.parent.removeChild(self);
}
};
return self;
});
var Unit = Container.expand(function (empireType, ownerEmpire) {
var self = Container.call(this);
self.empireType = empireType;
self.ownerEmpire = ownerEmpire;
self.health = 30;
self.maxHealth = 30;
self.damage = 10;
self.speed = 1;
self.attackRange = 100;
self.target = null;
self.lastAttackTime = 0;
self.attackCooldown = 60; // 1 second at 60fps
var unitAsset = empireType + 'Unit';
self.unitGraphics = self.attachAsset(unitAsset, {
anchorX: 0.5,
anchorY: 0.5
});
// Empire-specific abilities
if (empireType === 'ottoman') {
self.speed = 1.5; // Cavalry speed
self.damage = 12;
} else if (empireType === 'roman') {
self.health = 40; // Formation strength
self.maxHealth = 40;
self.damage = 8;
} else if (empireType === 'safavid') {
self.attackRange = 120; // Gunpowder range
self.damage = 15;
} else if (empireType === 'english') {
self.attackRange = 140; // Naval superiority
self.damage = 11;
}
self.findTarget = function () {
var closestDistance = Infinity;
var closestTarget = null;
// Find closest enemy empire or unit
for (var i = 0; i < empires.length; i++) {
var empire = empires[i];
if (empire.empireType !== self.empireType && !empire.isDestroyed) {
var distance = Math.sqrt(Math.pow(empire.x - self.x, 2) + Math.pow(empire.y - self.y, 2));
if (distance < closestDistance) {
closestDistance = distance;
closestTarget = empire;
}
// Also check empire's units
for (var j = 0; j < empire.units.length; j++) {
var unit = empire.units[j];
if (unit && unit.parent) {
var unitDistance = Math.sqrt(Math.pow(unit.x - self.x, 2) + Math.pow(unit.y - self.y, 2));
if (unitDistance < closestDistance) {
closestDistance = unitDistance;
closestTarget = unit;
}
}
}
}
}
return closestTarget;
};
self.attack = function (target) {
if (LK.ticks - self.lastAttackTime < self.attackCooldown) return;
self.lastAttackTime = LK.ticks;
// Create projectile
var projectile = new Projectile(self.x, self.y, target.x, target.y, self.damage, self.empireType);
game.addChild(projectile);
LK.getSound('combat').play();
};
self.takeDamage = function (damage) {
self.health -= damage;
// Flash red when taking damage
tween(self.unitGraphics, {
tint: 0xFF0000
}, {
duration: 100,
onFinish: function onFinish() {
tween(self.unitGraphics, {
tint: 0xFFFFFF
}, {
duration: 100
});
}
});
if (self.health <= 0) {
self.destroy();
}
};
self.destroy = function () {
// Remove from owner's units array
if (self.ownerEmpire && self.ownerEmpire.units) {
for (var i = self.ownerEmpire.units.length - 1; i >= 0; i--) {
if (self.ownerEmpire.units[i] === self) {
self.ownerEmpire.units.splice(i, 1);
break;
}
}
}
if (self.parent) {
self.parent.removeChild(self);
}
};
self.update = function () {
if (!self.target || self.target.isDestroyed || !self.target.parent) {
self.target = self.findTarget();
}
if (self.target) {
var dx = self.target.x - self.x;
var dy = self.target.y - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance <= self.attackRange) {
// Attack
self.attack(self.target);
} else {
// Move towards target
var moveX = dx / distance * self.speed;
var moveY = dy / distance * self.speed;
self.x += moveX;
self.y += moveY;
// Keep units within bounds
self.x = Math.max(50, Math.min(1998, self.x));
self.y = Math.max(50, Math.min(2682, self.y));
}
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x228B22
});
/****
* Game Code
****/
var empires = [];
var resources = [];
var gameStarted = false;
var selectedEmpire = null;
var selectionPhase = true;
// Create empire selection UI
var selectionText = new Text2('Choose Your Empire', {
size: 120,
fill: 0xFFFFFF
});
selectionText.anchor.set(0.5, 0.5);
LK.gui.center.addChild(selectionText);
// Create empire selection buttons
var empireButtons = [];
var empireNames = ['Ottoman', 'Roman', 'Safavid', 'English'];
var empireTypes = ['ottoman', 'roman', 'safavid', 'english'];
for (var i = 0; i < 4; i++) {
var button = new Container();
var buttonBg = button.addChild(LK.getAsset(empireTypes[i] + 'Base', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.5,
scaleY: 1.5
}));
var buttonText = new Text2(empireNames[i], {
size: 60,
fill: 0xFFFFFF
});
buttonText.anchor.set(0.5, 0.5);
buttonText.y = 100;
button.addChild(buttonText);
button.x = (i - 1.5) * 400 + 1024;
button.y = 1500;
button.empireType = empireTypes[i];
empireButtons.push(button);
LK.gui.center.addChild(button);
}
function startGame(playerEmpireType) {
selectionPhase = false;
// Remove selection UI
LK.gui.center.removeChild(selectionText);
for (var i = 0; i < empireButtons.length; i++) {
LK.gui.center.removeChild(empireButtons[i]);
}
// Create empires
var empirePositions = [{
x: 400,
y: 400
},
// Top-left
{
x: 1648,
y: 400
},
// Top-right
{
x: 400,
y: 2332
},
// Bottom-left
{
x: 1648,
y: 2332
} // Bottom-right
];
for (var j = 0; j < 4; j++) {
var empire = new Empire(empireTypes[j]);
empire.x = empirePositions[j].x;
empire.y = empirePositions[j].y;
empire.updateHealthBar();
empires.push(empire);
game.addChild(empire);
if (empireTypes[j] === playerEmpireType) {
selectedEmpire = empire;
}
}
// Spawn initial resources
for (var k = 0; k < 20; k++) {
var resource = new Resource();
resource.x = 200 + Math.random() * 1648;
resource.y = 200 + Math.random() * 2332;
resources.push(resource);
game.addChild(resource);
}
gameStarted = true;
// Create UI
createGameUI();
}
function createGameUI() {
var empireText = new Text2('Empire: ' + (selectedEmpire ? selectedEmpire.empireType : 'None'), {
size: 60,
fill: 0xFFFFFF
});
empireText.anchor.set(0, 0);
empireText.x = 150;
empireText.y = 50;
LK.gui.topLeft.addChild(empireText);
}
// Handle empire selection
game.down = function (x, y, obj) {
if (selectionPhase) {
for (var i = 0; i < empireButtons.length; i++) {
var button = empireButtons[i];
var buttonPos = LK.gui.center.toLocal(button.toGlobal({
x: 0,
y: 0
}));
var distance = Math.sqrt(Math.pow(x - buttonPos.x, 2) + Math.pow(y - buttonPos.y, 2));
if (distance < 100) {
startGame(button.empireType);
break;
}
}
}
};
// Spawn resources periodically
var lastResourceSpawn = 0;
game.update = function () {
if (!gameStarted) return;
// Spawn resources
if (LK.ticks - lastResourceSpawn > 300) {
// Every 5 seconds
if (resources.length < 30) {
var resource = new Resource();
resource.x = 200 + Math.random() * 1648;
resource.y = 200 + Math.random() * 2332;
resources.push(resource);
game.addChild(resource);
}
lastResourceSpawn = LK.ticks;
}
// Check resource collection
for (var i = resources.length - 1; i >= 0; i--) {
var resource = resources[i];
if (resource.collected) continue;
for (var j = 0; j < empires.length; j++) {
var empire = empires[j];
if (empire.isDestroyed) continue;
var distance = Math.sqrt(Math.pow(empire.x - resource.x, 2) + Math.pow(empire.y - resource.y, 2));
if (distance < 80) {
resource.collect(empire);
break;
}
}
}
// Check win condition
if (empires.length === 1) {
var winner = empires[0];
if (winner === selectedEmpire) {
LK.showYouWin();
} else {
LK.showGameOver();
}
} else if (empires.length === 0) {
LK.showGameOver();
}
}; ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,505 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Empire = Container.expand(function (empireType) {
+ var self = Container.call(this);
+ self.empireType = empireType;
+ self.health = 100;
+ self.maxHealth = 100;
+ self.resources = 50;
+ self.units = [];
+ self.isDestroyed = false;
+ // Create base
+ var baseAsset = empireType + 'Base';
+ self.base = self.attachAsset(baseAsset, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ // Create health bar background
+ self.healthBarBg = self.addChild(LK.getAsset('resource', {
+ anchorX: 0,
+ anchorY: 0,
+ scaleX: 4,
+ scaleY: 0.5
+ }));
+ self.healthBarBg.tint = 0x444444;
+ // Create health bar
+ self.healthBar = self.addChild(LK.getAsset('resource', {
+ anchorX: 0,
+ anchorY: 0,
+ scaleX: 4,
+ scaleY: 0.5
+ }));
+ self.healthBar.tint = 0x00FF00;
+ self.updateHealthBar = function () {
+ var healthPercent = self.health / self.maxHealth;
+ self.healthBar.scaleX = 4 * healthPercent;
+ if (healthPercent > 0.6) {
+ self.healthBar.tint = 0x00FF00;
+ } else if (healthPercent > 0.3) {
+ self.healthBar.tint = 0xFFFF00;
+ } else {
+ self.healthBar.tint = 0xFF0000;
+ }
+ };
+ self.positionHealthBar = function () {
+ self.healthBarBg.x = -60;
+ self.healthBarBg.y = -80;
+ self.healthBar.x = -60;
+ self.healthBar.y = -80;
+ };
+ self.takeDamage = function (damage) {
+ if (self.isDestroyed) return;
+ self.health -= damage;
+ self.updateHealthBar();
+ if (self.health <= 0) {
+ self.health = 0;
+ self.destroy();
+ }
+ };
+ self.destroy = function () {
+ if (self.isDestroyed) return;
+ self.isDestroyed = true;
+ LK.getSound('empireDestroyed').play();
+ // Remove from empires array
+ for (var i = empires.length - 1; i >= 0; i--) {
+ if (empires[i] === self) {
+ empires.splice(i, 1);
+ break;
+ }
+ }
+ // Destroy all units
+ for (var j = self.units.length - 1; j >= 0; j--) {
+ if (self.units[j] && self.units[j].parent) {
+ self.units[j].parent.removeChild(self.units[j]);
+ }
+ }
+ self.units = [];
+ // Visual destruction effect
+ tween(self, {
+ alpha: 0,
+ scaleX: 0.1,
+ scaleY: 0.1
+ }, {
+ duration: 1000,
+ onFinish: function onFinish() {
+ if (self.parent) {
+ self.parent.removeChild(self);
+ }
+ }
+ });
+ };
+ self.spawnUnit = function () {
+ if (self.isDestroyed || self.resources < 20) return;
+ self.resources -= 20;
+ var unit = new Unit(self.empireType, self);
+ // Position unit near base
+ var angle = Math.random() * Math.PI * 2;
+ var distance = 80 + Math.random() * 40;
+ unit.x = self.x + Math.cos(angle) * distance;
+ unit.y = self.y + Math.sin(angle) * distance;
+ self.units.push(unit);
+ game.addChild(unit);
+ };
+ self.update = function () {
+ if (self.isDestroyed) return;
+ self.positionHealthBar();
+ // Auto spawn units
+ if (LK.ticks % 120 === 0 && self.resources >= 20) {
+ self.spawnUnit();
+ }
+ // Gain resources over time
+ if (LK.ticks % 60 === 0) {
+ self.resources += 5;
+ if (self.resources > 200) self.resources = 200;
+ }
+ };
+ return self;
+});
+var Projectile = Container.expand(function (startX, startY, targetX, targetY, damage, empireType) {
+ var self = Container.call(this);
+ self.damage = damage;
+ self.empireType = empireType;
+ self.speed = 5;
+ var projectileGraphics = self.attachAsset('projectile', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.x = startX;
+ self.y = startY;
+ // Calculate direction
+ var dx = targetX - startX;
+ var dy = targetY - startY;
+ 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;
+ // Check for hits
+ for (var i = 0; i < empires.length; i++) {
+ var empire = empires[i];
+ if (empire.empireType !== self.empireType && !empire.isDestroyed) {
+ if (self.intersects(empire)) {
+ empire.takeDamage(self.damage);
+ self.destroy();
+ return;
+ }
+ // Check units
+ for (var j = 0; j < empire.units.length; j++) {
+ var unit = empire.units[j];
+ if (unit && unit.parent && self.intersects(unit)) {
+ unit.takeDamage(self.damage);
+ self.destroy();
+ return;
+ }
+ }
+ }
+ }
+ // Remove if out of bounds
+ if (self.x < 0 || self.x > 2048 || self.y < 0 || self.y > 2732) {
+ self.destroy();
+ }
+ };
+ self.destroy = function () {
+ if (self.parent) {
+ self.parent.removeChild(self);
+ }
+ };
+ return self;
+});
+var Resource = Container.expand(function () {
+ var self = Container.call(this);
+ self.resourceGraphics = self.attachAsset('resource', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.collected = false;
+ self.collect = function (empire) {
+ if (self.collected) return;
+ self.collected = true;
+ empire.resources += 10;
+ LK.getSound('resource').play();
+ tween(self, {
+ alpha: 0,
+ scaleX: 2,
+ scaleY: 2
+ }, {
+ duration: 300,
+ onFinish: function onFinish() {
+ self.destroy();
+ }
+ });
+ };
+ self.destroy = function () {
+ // Remove from resources array
+ for (var i = resources.length - 1; i >= 0; i--) {
+ if (resources[i] === self) {
+ resources.splice(i, 1);
+ break;
+ }
+ }
+ if (self.parent) {
+ self.parent.removeChild(self);
+ }
+ };
+ return self;
+});
+var Unit = Container.expand(function (empireType, ownerEmpire) {
+ var self = Container.call(this);
+ self.empireType = empireType;
+ self.ownerEmpire = ownerEmpire;
+ self.health = 30;
+ self.maxHealth = 30;
+ self.damage = 10;
+ self.speed = 1;
+ self.attackRange = 100;
+ self.target = null;
+ self.lastAttackTime = 0;
+ self.attackCooldown = 60; // 1 second at 60fps
+ var unitAsset = empireType + 'Unit';
+ self.unitGraphics = self.attachAsset(unitAsset, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ // Empire-specific abilities
+ if (empireType === 'ottoman') {
+ self.speed = 1.5; // Cavalry speed
+ self.damage = 12;
+ } else if (empireType === 'roman') {
+ self.health = 40; // Formation strength
+ self.maxHealth = 40;
+ self.damage = 8;
+ } else if (empireType === 'safavid') {
+ self.attackRange = 120; // Gunpowder range
+ self.damage = 15;
+ } else if (empireType === 'english') {
+ self.attackRange = 140; // Naval superiority
+ self.damage = 11;
+ }
+ self.findTarget = function () {
+ var closestDistance = Infinity;
+ var closestTarget = null;
+ // Find closest enemy empire or unit
+ for (var i = 0; i < empires.length; i++) {
+ var empire = empires[i];
+ if (empire.empireType !== self.empireType && !empire.isDestroyed) {
+ var distance = Math.sqrt(Math.pow(empire.x - self.x, 2) + Math.pow(empire.y - self.y, 2));
+ if (distance < closestDistance) {
+ closestDistance = distance;
+ closestTarget = empire;
+ }
+ // Also check empire's units
+ for (var j = 0; j < empire.units.length; j++) {
+ var unit = empire.units[j];
+ if (unit && unit.parent) {
+ var unitDistance = Math.sqrt(Math.pow(unit.x - self.x, 2) + Math.pow(unit.y - self.y, 2));
+ if (unitDistance < closestDistance) {
+ closestDistance = unitDistance;
+ closestTarget = unit;
+ }
+ }
+ }
+ }
+ }
+ return closestTarget;
+ };
+ self.attack = function (target) {
+ if (LK.ticks - self.lastAttackTime < self.attackCooldown) return;
+ self.lastAttackTime = LK.ticks;
+ // Create projectile
+ var projectile = new Projectile(self.x, self.y, target.x, target.y, self.damage, self.empireType);
+ game.addChild(projectile);
+ LK.getSound('combat').play();
+ };
+ self.takeDamage = function (damage) {
+ self.health -= damage;
+ // Flash red when taking damage
+ tween(self.unitGraphics, {
+ tint: 0xFF0000
+ }, {
+ duration: 100,
+ onFinish: function onFinish() {
+ tween(self.unitGraphics, {
+ tint: 0xFFFFFF
+ }, {
+ duration: 100
+ });
+ }
+ });
+ if (self.health <= 0) {
+ self.destroy();
+ }
+ };
+ self.destroy = function () {
+ // Remove from owner's units array
+ if (self.ownerEmpire && self.ownerEmpire.units) {
+ for (var i = self.ownerEmpire.units.length - 1; i >= 0; i--) {
+ if (self.ownerEmpire.units[i] === self) {
+ self.ownerEmpire.units.splice(i, 1);
+ break;
+ }
+ }
+ }
+ if (self.parent) {
+ self.parent.removeChild(self);
+ }
+ };
+ self.update = function () {
+ if (!self.target || self.target.isDestroyed || !self.target.parent) {
+ self.target = self.findTarget();
+ }
+ if (self.target) {
+ var dx = self.target.x - self.x;
+ var dy = self.target.y - self.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance <= self.attackRange) {
+ // Attack
+ self.attack(self.target);
+ } else {
+ // Move towards target
+ var moveX = dx / distance * self.speed;
+ var moveY = dy / distance * self.speed;
+ self.x += moveX;
+ self.y += moveY;
+ // Keep units within bounds
+ self.x = Math.max(50, Math.min(1998, self.x));
+ self.y = Math.max(50, Math.min(2682, self.y));
+ }
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x228B22
+});
+
+/****
+* Game Code
+****/
+var empires = [];
+var resources = [];
+var gameStarted = false;
+var selectedEmpire = null;
+var selectionPhase = true;
+// Create empire selection UI
+var selectionText = new Text2('Choose Your Empire', {
+ size: 120,
+ fill: 0xFFFFFF
+});
+selectionText.anchor.set(0.5, 0.5);
+LK.gui.center.addChild(selectionText);
+// Create empire selection buttons
+var empireButtons = [];
+var empireNames = ['Ottoman', 'Roman', 'Safavid', 'English'];
+var empireTypes = ['ottoman', 'roman', 'safavid', 'english'];
+for (var i = 0; i < 4; i++) {
+ var button = new Container();
+ var buttonBg = button.addChild(LK.getAsset(empireTypes[i] + 'Base', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ scaleX: 1.5,
+ scaleY: 1.5
+ }));
+ var buttonText = new Text2(empireNames[i], {
+ size: 60,
+ fill: 0xFFFFFF
+ });
+ buttonText.anchor.set(0.5, 0.5);
+ buttonText.y = 100;
+ button.addChild(buttonText);
+ button.x = (i - 1.5) * 400 + 1024;
+ button.y = 1500;
+ button.empireType = empireTypes[i];
+ empireButtons.push(button);
+ LK.gui.center.addChild(button);
+}
+function startGame(playerEmpireType) {
+ selectionPhase = false;
+ // Remove selection UI
+ LK.gui.center.removeChild(selectionText);
+ for (var i = 0; i < empireButtons.length; i++) {
+ LK.gui.center.removeChild(empireButtons[i]);
+ }
+ // Create empires
+ var empirePositions = [{
+ x: 400,
+ y: 400
+ },
+ // Top-left
+ {
+ x: 1648,
+ y: 400
+ },
+ // Top-right
+ {
+ x: 400,
+ y: 2332
+ },
+ // Bottom-left
+ {
+ x: 1648,
+ y: 2332
+ } // Bottom-right
+ ];
+ for (var j = 0; j < 4; j++) {
+ var empire = new Empire(empireTypes[j]);
+ empire.x = empirePositions[j].x;
+ empire.y = empirePositions[j].y;
+ empire.updateHealthBar();
+ empires.push(empire);
+ game.addChild(empire);
+ if (empireTypes[j] === playerEmpireType) {
+ selectedEmpire = empire;
+ }
+ }
+ // Spawn initial resources
+ for (var k = 0; k < 20; k++) {
+ var resource = new Resource();
+ resource.x = 200 + Math.random() * 1648;
+ resource.y = 200 + Math.random() * 2332;
+ resources.push(resource);
+ game.addChild(resource);
+ }
+ gameStarted = true;
+ // Create UI
+ createGameUI();
+}
+function createGameUI() {
+ var empireText = new Text2('Empire: ' + (selectedEmpire ? selectedEmpire.empireType : 'None'), {
+ size: 60,
+ fill: 0xFFFFFF
+ });
+ empireText.anchor.set(0, 0);
+ empireText.x = 150;
+ empireText.y = 50;
+ LK.gui.topLeft.addChild(empireText);
+}
+// Handle empire selection
+game.down = function (x, y, obj) {
+ if (selectionPhase) {
+ for (var i = 0; i < empireButtons.length; i++) {
+ var button = empireButtons[i];
+ var buttonPos = LK.gui.center.toLocal(button.toGlobal({
+ x: 0,
+ y: 0
+ }));
+ var distance = Math.sqrt(Math.pow(x - buttonPos.x, 2) + Math.pow(y - buttonPos.y, 2));
+ if (distance < 100) {
+ startGame(button.empireType);
+ break;
+ }
+ }
+ }
+};
+// Spawn resources periodically
+var lastResourceSpawn = 0;
+game.update = function () {
+ if (!gameStarted) return;
+ // Spawn resources
+ if (LK.ticks - lastResourceSpawn > 300) {
+ // Every 5 seconds
+ if (resources.length < 30) {
+ var resource = new Resource();
+ resource.x = 200 + Math.random() * 1648;
+ resource.y = 200 + Math.random() * 2332;
+ resources.push(resource);
+ game.addChild(resource);
+ }
+ lastResourceSpawn = LK.ticks;
+ }
+ // Check resource collection
+ for (var i = resources.length - 1; i >= 0; i--) {
+ var resource = resources[i];
+ if (resource.collected) continue;
+ for (var j = 0; j < empires.length; j++) {
+ var empire = empires[j];
+ if (empire.isDestroyed) continue;
+ var distance = Math.sqrt(Math.pow(empire.x - resource.x, 2) + Math.pow(empire.y - resource.y, 2));
+ if (distance < 80) {
+ resource.collect(empire);
+ break;
+ }
+ }
+ }
+ // Check win condition
+ if (empires.length === 1) {
+ var winner = empires[0];
+ if (winner === selectedEmpire) {
+ LK.showYouWin();
+ } else {
+ LK.showGameOver();
+ }
+ } else if (empires.length === 0) {
+ LK.showGameOver();
+ }
+};
\ No newline at end of file
Taştan ve dört tane kulesi olan kırmızı bayraklar asılı kale. In-Game asset. 2d. High contrast. No shadows
Osmanlı sarayı. In-Game asset. 2d. High contrast. No shadows
Mızraklı atlı ve yeşil deri zırh. In-Game asset. 2d. High contrast. No shadows
Mermi. In-Game asset. 2d. High contrast. No shadows
İngiliz okçusu. In-Game asset. 2d. High contrast. No shadows
Kılıçlı yeniçeri. In-Game asset. 2d. High contrast. No shadows
Safevi çadırı. In-Game asset. 2d. High contrast. No shadows
Roma imparatorluğu sarayı. In-Game asset. 2d. High contrast. No shadows
Vareg muhafızı. In-Game asset. 2d. High contrast. No shadows
Ağaç. In-Game asset. 2d. High contrast. No shadows