User prompt
make the ai considering his decisions increase the chance it will build the thing it has the least it can build wall, close to the HQ, and make it at straight line to the other side no more than 3 walls
User prompt
תחליף את הצבע של השמות של המבנים למטה, שיהיה בצבע לבן
User prompt
make the ai considering his decisions increase the chance it will build the thing it has the least it can build wall, close to the HQ, and make it at straight line to the other side no more than 3 walls
User prompt
תוסיף אובייקט של חומה. עולה 10, הוא בגודל משבצת אחת, והוא בעצם חוסם. יש לו 10 חיים. תוסיף אובייקט של בליסטרה. עומד במקום, לא זז, ואם מישהו נכנס לטווח הוא יורה בו. יכול לירות גם מהטווח, מוריד חיים אחד כל שתי שניות. המחשב לא בונה חומה בכלל. הוא יכול לבנות בלסיטרה, ואז זה בטווח קורב למבנה הראשי ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
שינוי המבנה המרכזי שלי, משנה גם את של היריב. זאת אומרת שהם מחוברים לאותו אובייקט. זה אמור להיות שניים שונים
User prompt
תמחק את המבנה הראשי של המחשב, תעשה אותו מחדש בקוד
User prompt
המחשב תמיד מתחיל בלבנות מכרה זהב. אחרי זה הוא בוחר בצורה רנדומלית, ובונה לפי מה שהוא החליט ברגע שהוא יכול לא רואים את תמונה על המבנה הראשי היריב, כאילו הוא לא בassests
User prompt
מטרת המשחק להרוס את המבנה הראשי של היריב, יש לו 15 חיים. חיילים נוצרים והולכים בקו ישר לצד השני. תגדיל להם קצת את טווח הראייה
User prompt
החלק התחתון של המסך יהיה מחוץ לתחום של המשחק, האזור שבו בוחרים אם מכרה זהב או מגורי חיילים לא ניתן לבנות בו
User prompt
כשחייל רואה חייל יריב, תבחר טווח ראיה סביר, או מבנה יריב, הוא הולך אליו. כל שנייה שחייל נמצא ליד מבנה, למבנה יורד חיים אחד. לכל מבנה יש 10 חיים. לחיילים יש 5 חיים. המחשב משיג זהב באותו קצב כמו המשתמש
Code edit (1 edits merged)
Please save this source code
User prompt
Territory Wars: Gold Rush Conquest
Initial prompt
משחק נגד המחשב, של התפתחות בעולם וכבישה של האזור. העולם מחולק להמון חלקים שווי גודל. אתה מתחיל כשיש לך מבנה ראשי, המחשב גם מתחיל ככה. יש לך מספיק משאבים לבנות מכרה ראשוני, והוא מייצר לך זהב. כשיש לך מספיק זהב, אתה יכול לקנות עוד מכרות, או לקנות מגורי חיילים. מהמגורי חיילים, כל 10 שניות יוצא חייל שמתחיל לפטרל. הוא הולך לכיוון החצי של המחשב. אם הוא פוגש בדרך חייל, הם נלחמים. המחשב עובד בצורה דומה אבל אוטומטית. מייצר קצת יותר לאט זהב, ובונה במיקומים רנדומליים את המבנים שלו. בהמשך נוסיף מגורי קוסמים, מכרה יהלומים, כישופים שאפשר להעיף
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Building = Container.expand(function (type, isAI) { var self = Container.call(this); self.type = type; self.isAI = isAI || false; self.health = 10; self.maxHealth = 10; self.lastSpawnTime = 0; var assetName = self.isAI ? 'ai' + type.charAt(0).toUpperCase() + type.slice(1) : type; var buildingGraphics = self.attachAsset(assetName, { anchorX: 0.5, anchorY: 0.5 }); self.update = function () { if (self.type === 'barracks') { var currentTime = Date.now(); if (currentTime - self.lastSpawnTime >= 10000) { self.spawnSoldier(); self.lastSpawnTime = currentTime; } } }; self.spawnSoldier = function () { var soldier = new Soldier(self.isAI); soldier.x = self.x + (Math.random() - 0.5) * 100; soldier.y = self.y + (Math.random() - 0.5) * 100; if (self.isAI) { aiSoldiers.push(soldier); } else { playerSoldiers.push(soldier); } game.addChild(soldier); }; return self; }); var Soldier = Container.expand(function (isAI) { var self = Container.call(this); self.isAI = isAI || false; self.health = 5; self.maxHealth = 5; self.speed = 1; self.targetX = 0; self.targetY = 0; self.inCombat = false; self.visionRange = 200; self.target = null; self.lastDamageTime = 0; var assetName = self.isAI ? 'enemySoldier' : 'soldier'; var soldierGraphics = self.attachAsset(assetName, { anchorX: 0.5, anchorY: 0.5 }); // Set initial patrol target if (self.isAI) { self.targetX = Math.random() * 1024; self.targetY = Math.random() * 1366; } else { self.targetX = 1024 + Math.random() * 1024; self.targetY = Math.random() * 1366; } self.update = function () { if (self.health <= 0) { return; } self.findTarget(); if (self.target) { self.moveToTarget(); self.attackTarget(); } else { self.patrol(); } }; self.findTarget = function () { var closestDistance = self.visionRange; self.target = null; // Check for enemy soldiers var enemies = self.isAI ? playerSoldiers : aiSoldiers; for (var i = 0; i < enemies.length; i++) { var enemy = enemies[i]; if (enemy.health <= 0) continue; 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; self.target = enemy; } } // Check for enemy buildings if no soldiers in range if (!self.target) { var enemyBuildings = self.isAI ? playerBuildings : aiBuildings; for (var i = 0; i < enemyBuildings.length; i++) { var building = enemyBuildings[i]; if (building.health <= 0) continue; var dx = building.x - self.x; var dy = building.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < closestDistance) { closestDistance = distance; self.target = building; } } } }; self.moveToTarget = function () { if (!self.target) 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 > 50) { // Stop when close enough to attack self.x += dx / distance * self.speed; self.y += dy / distance * self.speed; } }; self.patrol = 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; } }; self.attackTarget = function () { if (!self.target) 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 <= 50) { var currentTime = Date.now(); if (currentTime - self.lastDamageTime >= 1000) { // Attack every 1 second if (self.target.type) { // Target is a building self.target.health -= 1; if (self.target.health <= 0) { self.target = null; } } else { // Target is a soldier self.target.health -= 1; if (self.target.health <= 0) { self.target = null; LK.getSound('combat').play(); } // Counter attack if (self.target && self.target.health > 0) { self.health -= 1; if (self.health <= 0) { LK.getSound('combat').play(); } } } self.lastDamageTime = currentTime; } } }; self.checkForEnemies = function () { // This method is now handled by findTarget }; self.combat = function (enemy) { // This method is now handled by attackTarget }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x228B22 }); /**** * Game Code ****/ var playerGold = 100; var aiGold = 100; var playerBuildings = []; var aiBuildings = []; var playerSoldiers = []; var aiSoldiers = []; var selectedBuildingType = 'goldMine'; var goldMinePrice = 50; var barracksPrice = 80; var lastGoldUpdate = Date.now(); var lastAIAction = Date.now(); var territoryLine = 1024; // UI Elements var goldText = new Text2('Gold: 100', { size: 60, fill: 0xFFD700 }); goldText.anchor.set(0, 0); goldText.x = 120; goldText.y = 50; LK.gui.topLeft.addChild(goldText); var instructionText = new Text2('Tap to build Gold Mine (50g)', { size: 40, fill: 0xFFFFFF }); instructionText.anchor.set(0.5, 0); instructionText.x = 1024; instructionText.y = 100; game.addChild(instructionText); // Build mode buttons var goldMineButton = new Text2('Mine', { size: 50, fill: 0xFFD700 }); goldMineButton.anchor.set(0.5, 0.5); goldMineButton.x = 200; goldMineButton.y = 2600; game.addChild(goldMineButton); var barracksButton = new Text2('Barracks', { size: 50, fill: 0x8B4513 }); barracksButton.anchor.set(0.5, 0.5); barracksButton.x = 400; barracksButton.y = 2600; game.addChild(barracksButton); // Territory divider line var territoryDivider = LK.getAsset('mainBuilding', { width: 10, height: 2732, anchorX: 0.5, anchorY: 0 }); territoryDivider.x = territoryLine; territoryDivider.y = 0; territoryDivider.alpha = 0.3; game.addChild(territoryDivider); // Initialize main buildings var playerMainBuilding = new Building('mainBuilding', false); playerMainBuilding.x = 300; playerMainBuilding.y = 1366; playerBuildings.push(playerMainBuilding); game.addChild(playerMainBuilding); var aiMainBuilding = new Building('aiMainBuilding', true); aiMainBuilding.x = 1700; aiMainBuilding.y = 1366; aiBuildings.push(aiMainBuilding); game.addChild(aiMainBuilding); // Button interactions goldMineButton.down = function (x, y, obj) { selectedBuildingType = 'goldMine'; instructionText.setText('Tap to build Gold Mine (50g)'); goldMineButton.alpha = 1.0; barracksButton.alpha = 0.6; }; barracksButton.down = function (x, y, obj) { selectedBuildingType = 'barracks'; instructionText.setText('Tap to build Barracks (80g)'); barracksButton.alpha = 1.0; goldMineButton.alpha = 0.6; }; // Initial button states goldMineButton.alpha = 1.0; barracksButton.alpha = 0.6; // Game interactions game.down = function (x, y, obj) { // Only allow building on player side if (x > territoryLine) return; var price = selectedBuildingType === 'goldMine' ? goldMinePrice : barracksPrice; if (playerGold >= price) { // Check if location is not too close to existing buildings var canBuild = true; for (var i = 0; i < playerBuildings.length; i++) { var building = playerBuildings[i]; var dx = building.x - x; var dy = building.y - y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < 120) { canBuild = false; break; } } if (canBuild) { var newBuilding = new Building(selectedBuildingType, false); newBuilding.x = x; newBuilding.y = y; newBuilding.lastSpawnTime = Date.now(); playerBuildings.push(newBuilding); game.addChild(newBuilding); playerGold -= price; LK.getSound('build').play(); } } }; function updateGold() { var currentTime = Date.now(); var deltaTime = currentTime - lastGoldUpdate; if (deltaTime >= 2000) { // Generate gold every 2 seconds // Count gold mines var playerMines = 0; var aiMines = 0; for (var i = 0; i < playerBuildings.length; i++) { if (playerBuildings[i].type === 'goldMine') { playerMines++; } } for (var i = 0; i < aiBuildings.length; i++) { if (aiBuildings[i].type === 'goldMine') { aiMines++; } } playerGold += playerMines * 10; aiGold += aiMines * 10; // AI generates same rate as player goldText.setText('Gold: ' + playerGold); lastGoldUpdate = currentTime; } } function updateAI() { var currentTime = Date.now(); if (currentTime - lastAIAction >= 5000) { // AI acts every 5 seconds var buildingType = Math.random() < 0.6 ? 'goldMine' : 'barracks'; var price = buildingType === 'goldMine' ? goldMinePrice : barracksPrice; if (aiGold >= price) { var attempts = 0; var built = false; while (attempts < 10 && !built) { var x = territoryLine + 100 + Math.random() * (2048 - territoryLine - 200); var y = 200 + Math.random() * (2732 - 400); var canBuild = true; for (var i = 0; i < aiBuildings.length; i++) { var building = aiBuildings[i]; var dx = building.x - x; var dy = building.y - y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < 120) { canBuild = false; break; } } if (canBuild) { var newBuilding = new Building(buildingType, true); newBuilding.x = x; newBuilding.y = y; newBuilding.lastSpawnTime = Date.now(); aiBuildings.push(newBuilding); game.addChild(newBuilding); aiGold -= price; built = true; } attempts++; } } lastAIAction = currentTime; } } function checkGameEnd() { // Clean up dead soldiers for (var i = playerSoldiers.length - 1; i >= 0; i--) { if (playerSoldiers[i].health <= 0) { playerSoldiers[i].destroy(); playerSoldiers.splice(i, 1); } } for (var i = aiSoldiers.length - 1; i >= 0; i--) { if (aiSoldiers[i].health <= 0) { aiSoldiers[i].destroy(); aiSoldiers.splice(i, 1); } } // Clean up destroyed buildings for (var i = playerBuildings.length - 1; i >= 0; i--) { if (playerBuildings[i].health <= 0) { playerBuildings[i].destroy(); playerBuildings.splice(i, 1); } } for (var i = aiBuildings.length - 1; i >= 0; i--) { if (aiBuildings[i].health <= 0) { aiBuildings[i].destroy(); aiBuildings.splice(i, 1); } } // Check win conditions var playerBarracks = 0; var aiBarracks = 0; for (var i = 0; i < playerBuildings.length; i++) { if (playerBuildings[i].type === 'barracks') { playerBarracks++; } } for (var i = 0; i < aiBuildings.length; i++) { if (aiBuildings[i].type === 'barracks') { aiBarracks++; } } // Win condition: Have 5 barracks and 10 soldiers if (playerBarracks >= 5 && playerSoldiers.length >= 10) { LK.showYouWin(); } // Lose condition: AI has significant advantage if (aiBarracks >= 7 && aiSoldiers.length >= 15 && playerSoldiers.length < 3) { LK.showGameOver(); } } game.update = function () { updateGold(); updateAI(); checkGameEnd(); }; // Start background music LK.playMusic('background');
===================================================================
--- original.js
+++ change.js
@@ -9,8 +9,10 @@
var Building = Container.expand(function (type, isAI) {
var self = Container.call(this);
self.type = type;
self.isAI = isAI || false;
+ self.health = 10;
+ self.maxHealth = 10;
self.lastSpawnTime = 0;
var assetName = self.isAI ? 'ai' + type.charAt(0).toUpperCase() + type.slice(1) : type;
var buildingGraphics = self.attachAsset(assetName, {
anchorX: 0.5,
@@ -40,13 +42,17 @@
});
var Soldier = Container.expand(function (isAI) {
var self = Container.call(this);
self.isAI = isAI || false;
- self.health = 100;
+ self.health = 5;
+ self.maxHealth = 5;
self.speed = 1;
self.targetX = 0;
self.targetY = 0;
self.inCombat = false;
+ self.visionRange = 200;
+ self.target = null;
+ self.lastDamageTime = 0;
var assetName = self.isAI ? 'enemySoldier' : 'soldier';
var soldierGraphics = self.attachAsset(assetName, {
anchorX: 0.5,
anchorY: 0.5
@@ -62,55 +68,108 @@
self.update = function () {
if (self.health <= 0) {
return;
}
- if (!self.inCombat) {
+ self.findTarget();
+ if (self.target) {
self.moveToTarget();
+ self.attackTarget();
+ } else {
+ self.patrol();
}
- self.checkForEnemies();
};
- self.moveToTarget = 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;
- }
- };
- self.checkForEnemies = function () {
+ self.findTarget = function () {
+ var closestDistance = self.visionRange;
+ self.target = null;
+ // Check for enemy soldiers
var enemies = self.isAI ? playerSoldiers : aiSoldiers;
for (var i = 0; i < enemies.length; i++) {
var enemy = enemies[i];
if (enemy.health <= 0) continue;
var dx = enemy.x - self.x;
var dy = enemy.y - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
- if (distance < 80) {
- self.combat(enemy);
- break;
+ if (distance < closestDistance) {
+ closestDistance = distance;
+ self.target = enemy;
}
}
+ // Check for enemy buildings if no soldiers in range
+ if (!self.target) {
+ var enemyBuildings = self.isAI ? playerBuildings : aiBuildings;
+ for (var i = 0; i < enemyBuildings.length; i++) {
+ var building = enemyBuildings[i];
+ if (building.health <= 0) continue;
+ var dx = building.x - self.x;
+ var dy = building.y - self.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance < closestDistance) {
+ closestDistance = distance;
+ self.target = building;
+ }
+ }
+ }
};
- self.combat = function (enemy) {
- self.inCombat = true;
- enemy.inCombat = true;
- // Simple combat resolution
- var damage = 10 + Math.random() * 20;
- enemy.health -= damage;
- if (enemy.health <= 0) {
- self.inCombat = false;
- LK.getSound('combat').play();
+ self.moveToTarget = function () {
+ if (!self.target) 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 > 50) {
+ // Stop when close enough to attack
+ self.x += dx / distance * self.speed;
+ self.y += dy / distance * self.speed;
}
- // Counter attack
- if (enemy.health > 0) {
- var counterDamage = 10 + Math.random() * 20;
- self.health -= counterDamage;
- if (self.health <= 0) {
- enemy.inCombat = false;
+ };
+ self.patrol = 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;
+ }
+ };
+ self.attackTarget = function () {
+ if (!self.target) 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 <= 50) {
+ var currentTime = Date.now();
+ if (currentTime - self.lastDamageTime >= 1000) {
+ // Attack every 1 second
+ if (self.target.type) {
+ // Target is a building
+ self.target.health -= 1;
+ if (self.target.health <= 0) {
+ self.target = null;
+ }
+ } else {
+ // Target is a soldier
+ self.target.health -= 1;
+ if (self.target.health <= 0) {
+ self.target = null;
+ LK.getSound('combat').play();
+ }
+ // Counter attack
+ if (self.target && self.target.health > 0) {
+ self.health -= 1;
+ if (self.health <= 0) {
+ LK.getSound('combat').play();
+ }
+ }
+ }
+ self.lastDamageTime = currentTime;
}
}
};
+ self.checkForEnemies = function () {
+ // This method is now handled by findTarget
+ };
+ self.combat = function (enemy) {
+ // This method is now handled by attackTarget
+ };
return self;
});
/****
@@ -255,9 +314,9 @@
aiMines++;
}
}
playerGold += playerMines * 10;
- aiGold += aiMines * 8; // AI generates slightly less
+ aiGold += aiMines * 10; // AI generates same rate as player
goldText.setText('Gold: ' + playerGold);
lastGoldUpdate = currentTime;
}
}
@@ -313,8 +372,21 @@
aiSoldiers[i].destroy();
aiSoldiers.splice(i, 1);
}
}
+ // Clean up destroyed buildings
+ for (var i = playerBuildings.length - 1; i >= 0; i--) {
+ if (playerBuildings[i].health <= 0) {
+ playerBuildings[i].destroy();
+ playerBuildings.splice(i, 1);
+ }
+ }
+ for (var i = aiBuildings.length - 1; i >= 0; i--) {
+ if (aiBuildings[i].health <= 0) {
+ aiBuildings[i].destroy();
+ aiBuildings.splice(i, 1);
+ }
+ }
// Check win conditions
var playerBarracks = 0;
var aiBarracks = 0;
for (var i = 0; i < playerBuildings.length; i++) {
Tempale of fantasy games. In-Game asset. 2d. High contrast. No shadows
Anciet world barracks, no words. In-Game asset. 2d. High contrast. No shadows
Gold mine of clash of clans. In-Game asset. 2d. High contrast. No shadows
חייל עם חרב ומגן. In-Game asset. 2d. High contrast. No shadows
מכונה שיורה חצים. In-Game asset. 2d. High contrast. No shadows