User prompt
Askerlerin birbirlerinin içinden geçmesini engelle.
User prompt
Birbirlerinin içinden geçmesinler. Çarpıştıkları an savaşsınlar.
User prompt
Please fix the bug: 'ReferenceError: attacked is not defined' in or related to this line: 'if (!attacked && Math.abs(s.x - enemyBase.x) < 120) {' Line Number: 564
User prompt
Bu durumu düzelt. Birbirlerini öldürene kadar dursunlar.
User prompt
Askerler öncelik olarak birbirlerini öldürmek istesin. Daha sonra hiç düşman askeri veya dost askeri kalmayınca base saldırısı olsun.
User prompt
Askerler önce birbirlerini yok etmek için birbirlerini itsinler. Daha sonra base saldırısı yapsınlar.
User prompt
Dost ve düşman askerleri, birbirlerini öldürmeden bırakmasınlar.
User prompt
Düşman askeri ile bizim askerler neden öldürmeden yoluna devam ediyor. Devam etmesin, birisinden birisi yok olana kadar savaşsınlar.
User prompt
Askerler birbirlerini ile savaşsınlar. Önündekini öldürmeden geçmesinler.
User prompt
"Puan"ı %25 sağa kaydır.
User prompt
"Puan"ı 1 satır sola kaydır. Seviyenin sol yanına Reset butonu oluştur ve tıklayınca herşeyi sıfırlamasını sağla.
User prompt
"Puan"ı 2 satır sola kaydır.
User prompt
Bizim askerler ile, düşman askerleri aynı güçte olsunlar. Ancak birbirlerine saldırıları yavaş ve az hasarlı olsun.
User prompt
Aynı durumu, düşman askerleri için de yap. Ayrıca her asker %5 oranında Baselerin canını azaltabilsin.
User prompt
Askerler hemen ölmesinler. %75 daha yavaş canları azalsın.
User prompt
Yer çekim oranını %50 azalt.
User prompt
Yer çekim oranını %25 arttır. Taş daha yavaş gitsin.
User prompt
Taş ağırlığını hissettirsin. Düz gitmesin.
User prompt
Taşın resmini oluştur. Ayrıca yayı çekerken da görseli olsun.
User prompt
Taşın konumunu, görselin olduğu yer ile eşdeğer yap. Taş fırlayınca, görsel ile birlikte fırlasın.
User prompt
taşın resmi ile birlikte oradan çıkmasını sağla. AnaBase üzerinden değil.
User prompt
Taşın konumunu sapanda ki yay içine yerleştir ve taşı görünür yap.
User prompt
Yay ipinin görselini oluştur. Çektiğimiz oran belli olsun. Ayrıca yayı biraz yukarı ve hafif sağa doğru yerleştir.
User prompt
Taş atarken, ileri doğru değil. Geriye yay çekerek atalım.
Code edit (1 edits merged)
Please save this source code
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ // AnaBase (player base) var AnaBase = Container.expand(function () { var self = Container.call(this); var base = self.attachAsset('anaBase', { anchorX: 0.5, anchorY: 0.5 }); self.hp = 100; self.maxHp = 100; self.hpBar = self.addChild(new HealthBar()); self.hpBar.y = 120; self.hpBar.set(1); return self; }); // EnemyBase (enemy base) var EnemyBase = Container.expand(function () { var self = Container.call(this); var base = self.attachAsset('enemyBase', { anchorX: 0.5, anchorY: 0.5 }); self.hp = 100; self.maxHp = 100; self.hpBar = self.addChild(new HealthBar()); self.hpBar.y = 120; self.hpBar.set(1); return self; }); // Enemy soldier var EnemySoldier = Container.expand(function () { var self = Container.call(this); var body = self.attachAsset('enemySoldier', { anchorX: 0.5, anchorY: 1 }); self.hp = 20; self.maxHp = 20; self.atk = 8; self.speed = 3; self.hpBar = self.addChild(new HealthBar()); self.hpBar.y = -80; self.hpBar.set(1); self.update = function () { self.x -= self.speed; }; return self; }); // HealthBar class for bases and soldiers var HealthBar = Container.expand(function () { var self = Container.call(this); var bg = self.attachAsset('hpBarBg', { anchorX: 0.5, anchorY: 0.5 }); var fg = self.attachAsset('hpBarFg', { anchorX: 0.5, anchorY: 0.5 }); self.set = function (percent) { if (percent < 0) percent = 0; if (percent > 1) percent = 1; fg.width = 120 * percent; }; return self; }); // Player soldier var PlayerSoldier = Container.expand(function () { var self = Container.call(this); var body = self.attachAsset('playerSoldier', { anchorX: 0.5, anchorY: 1 }); self.hp = 20; self.maxHp = 20; self.atk = 8; self.speed = 3; self.hpBar = self.addChild(new HealthBar()); self.hpBar.y = -80; self.hpBar.set(1); self.update = function () { self.x += self.speed; }; return self; }); // Slingshot (player control) var Slingshot = Container.expand(function () { var self = Container.call(this); var sling = self.attachAsset('slingshot', { anchorX: 0.5, anchorY: 1 }); self.stoneReady = true; self.stone = null; self.aimLine = null; self.aimStart = { x: 0, y: 0 }; self.aimEnd = { x: 0, y: 0 }; return self; }); // Stone (slingshot projectile) var Stone = Container.expand(function () { var self = Container.call(this); var stone = self.attachAsset('stone', { anchorX: 0.5, anchorY: 0.5 }); self.vx = 0; self.vy = 0; self.damage = 20; self.update = function () { // Gravity effect if (self.lastY === undefined) self.lastY = self.y; if (self.lastVy === undefined) self.lastVy = self.vy; var gravity = 2.2 * 0.5; // %50 azaltıldı self.vy += gravity; self.x += self.vx; self.y += self.vy; self.lastY = self.y; self.lastVy = self.vy; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0xf7f7f7 }); /**** * Game Code ****/ // Game constants // AnaBase (player base) // EnemyBase (enemy base) // Player soldier // Enemy soldier // Stone (slingshot projectile) // Slingshot // Health bar background // Health bar foreground var GAME_WIDTH = 2048; var GAME_HEIGHT = 2732; var BASE_OFFSET_X = 220; var BASE_OFFSET_Y = 200; var GROUND_Y = GAME_HEIGHT - 300; var SLING_X = BASE_OFFSET_X; var SLING_Y = GROUND_Y - 110; var ENEMY_BASE_X = GAME_WIDTH - BASE_OFFSET_X; var ENEMY_BASE_Y = GROUND_Y; var MAX_LEVEL = 20; // Game state var anaBase, enemyBase, slingshot; var playerSoldiers = []; var enemySoldiers = []; var stones = []; var level = storage.level || 1; var score = storage.score || 0; var upgradePoints = storage.upgradePoints || 0; var isDraggingSling = false; var dragStart = { x: 0, y: 0 }; var dragEnd = { x: 0, y: 0 }; var lastTouchId = null; var spawnTimers = { player: 0, enemy: 0 }; var enemySpawnInterval = 120; var playerSpawnInterval = 120; var enemySoldierStats = { hp: 20, atk: 8, speed: 3 }; var playerSoldierStats = { hp: 20, atk: 8, speed: 3 }; var enemyBaseStats = { hp: 100 }; var anaBaseStats = { hp: 100 }; var levelTxt, scoreTxt, upgradeTxt; // UI levelTxt = new Text2('Seviye: ' + level, { size: 80, fill: "#222" }); levelTxt.anchor.set(0.5, 0); // Add Reset button to the left of levelTxt var resetBtn = new Text2('Reset', { size: 70, fill: 0xC0392B }); resetBtn.anchor.set(0.5, 0); resetBtn.x = -260; // Place left of level text (enough space for "Puan" and "Seviye") resetBtn.y = 0; levelTxt.addChild(resetBtn); // Reset handler resetBtn.interactive = true; resetBtn.buttonMode = true; resetBtn.down = function (x, y, obj) { // Reset all game state level = 1; score = 0; upgradePoints = 0; enemyBaseStats.hp = 100; anaBaseStats.hp = 100; playerSoldierStats.hp = 20; playerSoldierStats.atk = 8; playerSoldierStats.speed = 3; enemySoldierStats.hp = 20; enemySoldierStats.atk = 8; enemySoldierStats.speed = 3; enemySpawnInterval = 120; playerSpawnInterval = 120; // Remove all soldiers and stones for (var i = 0; i < playerSoldiers.length; i++) playerSoldiers[i].destroy(); for (var i = 0; i < enemySoldiers.length; i++) enemySoldiers[i].destroy(); for (var i = 0; i < stones.length; i++) stones[i].destroy(); playerSoldiers = []; enemySoldiers = []; stones = []; // Reset bases anaBase.hp = anaBaseStats.hp; anaBase.maxHp = anaBaseStats.hp; enemyBase.hp = enemyBaseStats.hp; enemyBase.maxHp = enemyBaseStats.hp; // Save progress storage.level = level; storage.score = score; storage.upgradePoints = upgradePoints; // Update UI immediately levelTxt.setText('Seviye: ' + level); scoreTxt.setText('Puan: ' + score); anaBase.hpBar.set(anaBase.hp / anaBase.maxHp); enemyBase.hpBar.set(enemyBase.hp / enemyBase.maxHp); showUpgradeMsg("Oyun Sıfırlandı!"); }; LK.gui.top.addChild(levelTxt); scoreTxt = new Text2('Puan: ' + score, { size: 80, fill: "#222" }); scoreTxt.anchor.set(0.5, 0); scoreTxt.x = GAME_WIDTH * 0.25; // %25 sağa kaydır LK.gui.top.addChild(scoreTxt); upgradeTxt = new Text2('', { size: 60, fill: 0x27AE60 }); upgradeTxt.anchor.set(0.5, 0); LK.gui.bottom.addChild(upgradeTxt); // Add bases anaBase = new AnaBase(); anaBase.x = BASE_OFFSET_X; anaBase.y = GROUND_Y; game.addChild(anaBase); enemyBase = new EnemyBase(); enemyBase.x = ENEMY_BASE_X; enemyBase.y = ENEMY_BASE_Y; game.addChild(enemyBase); // Add slingshot slingshot = new Slingshot(); slingshot.x = SLING_X; slingshot.y = SLING_Y; game.addChild(slingshot); // Helper: spawn player soldier function spawnPlayerSoldier() { var s = new PlayerSoldier(); s.hp = playerSoldierStats.hp; s.maxHp = playerSoldierStats.hp; s.atk = playerSoldierStats.atk; s.speed = playerSoldierStats.speed; s.x = anaBase.x + 100; s.y = GROUND_Y + 10; playerSoldiers.push(s); game.addChild(s); } // Helper: spawn enemy soldier function spawnEnemySoldier() { var s = new EnemySoldier(); s.hp = enemySoldierStats.hp; s.maxHp = enemySoldierStats.hp; s.atk = enemySoldierStats.atk; s.speed = enemySoldierStats.speed; s.x = enemyBase.x - 100; s.y = GROUND_Y + 10; enemySoldiers.push(s); game.addChild(s); } // Helper: fire stone function fireStone(fromX, fromY, toX, toY) { var s = new Stone(); s.x = fromX; s.y = fromY; // Atış yönünü tersine çevir: sapanı geriye çek, taş ileri fırlasın var dx = fromX - toX; var dy = fromY - toY; var dist = Math.sqrt(dx * dx + dy * dy); var speed = 32; // Daha yavaş gitmesi için azaltıldı s.vx = dx / dist * speed; s.vy = dy / dist * speed; stones.push(s); game.addChild(s); } // Helper: show upgrade message function showUpgradeMsg(msg) { upgradeTxt.setText(msg); tween(upgradeTxt, { alpha: 1 }, { duration: 0 }); tween(upgradeTxt, { alpha: 0 }, { duration: 1200, easing: tween.easeOut }); } // Touch/drag logic for slingshot game.down = function (x, y, obj) { // Only allow drag if touch is near slingshot if (Math.abs(x - slingshot.x) < 120 && Math.abs(y - slingshot.y) < 160) { isDraggingSling = true; dragStart.x = x; dragStart.y = y; dragEnd.x = x; dragEnd.y = y; } }; game.move = function (x, y, obj) { if (isDraggingSling) { dragEnd.x = x; dragEnd.y = y; } }; game.up = function (x, y, obj) { if (isDraggingSling) { // Fire stone if drag is long enough var dx = dragEnd.x - slingshot.x; var dy = dragEnd.y - slingshot.y; var dist = Math.sqrt(dx * dx + dy * dy); if (dist > 80 && stones.length < 2) { fireStone(slingshot.x, slingshot.y - 60, dragEnd.x, dragEnd.y); // fireStone fonksiyonu artık ters vektörle çalışıyor } } isDraggingSling = false; }; // Tap to spawn player soldier (bottom left, not on slingshot) game.on('down', function (x, y, obj) { if (x < 300 && y > GROUND_Y + 60) { if (playerSoldiers.length < 6) { spawnPlayerSoldier(); } } }); // Upgrade logic (tap bottom right) game.on('down', function (x, y, obj) { if (x > GAME_WIDTH - 300 && y > GROUND_Y + 60) { if (upgradePoints > 0) { // Cycle upgrades: base hp, soldier hp, soldier atk, soldier speed var upg = (score + level) % 4; if (upg === 0) { anaBaseStats.hp += 20; anaBase.maxHp = anaBaseStats.hp; anaBase.hp = anaBaseStats.hp; showUpgradeMsg("AnaBase HP +20"); } else if (upg === 1) { playerSoldierStats.hp += 6; showUpgradeMsg("Asker HP +6"); } else if (upg === 2) { playerSoldierStats.atk += 2; showUpgradeMsg("Asker Atk +2"); } else { playerSoldierStats.speed += 0.5; showUpgradeMsg("Asker Hız +0.5"); } upgradePoints--; } } }); // Main update loop game.update = function () { // Update UI levelTxt.setText('Seviye: ' + level); scoreTxt.setText('Puan: ' + score); // Update health bars anaBase.hpBar.set(anaBase.hp / anaBase.maxHp); enemyBase.hpBar.set(enemyBase.hp / enemyBase.maxHp); // Draw slingshot pulled band and stone visual if (isDraggingSling) { // Remove previous drag visuals if any if (slingshot.dragStone) { slingshot.dragStone.destroy(); slingshot.dragStone = null; } if (slingshot.bandLeft) { slingshot.bandLeft.destroy(); slingshot.bandLeft = null; } if (slingshot.bandRight) { slingshot.bandRight.destroy(); slingshot.bandRight = null; } // Calculate band anchor points (left/right of slingshot top) var slingTopX = slingshot.x; var slingTopY = slingshot.y - 110; var bandOffset = 22; var leftX = slingTopX - bandOffset; var rightX = slingTopX + bandOffset; var bandY = slingTopY + 10; // Place a thin rectangle as band (left) slingshot.bandLeft = LK.getAsset('hpBarFg', { width: Math.max(8, Math.sqrt((dragEnd.x - leftX) * (dragEnd.x - leftX) + (dragEnd.y - bandY) * (dragEnd.y - bandY))), height: 8, anchorX: 0, anchorY: 0.5, x: leftX, y: bandY, rotation: Math.atan2(dragEnd.y - bandY, dragEnd.x - leftX) }); game.addChild(slingshot.bandLeft); // Place a thin rectangle as band (right) slingshot.bandRight = LK.getAsset('hpBarFg', { width: Math.max(8, Math.sqrt((dragEnd.x - rightX) * (dragEnd.x - rightX) + (dragEnd.y - bandY) * (dragEnd.y - bandY))), height: 8, anchorX: 0, anchorY: 0.5, x: rightX, y: bandY, rotation: Math.atan2(dragEnd.y - bandY, dragEnd.x - rightX) }); game.addChild(slingshot.bandRight); // Place the stone at dragEnd slingshot.dragStone = LK.getAsset('stone', { anchorX: 0.5, anchorY: 0.5, x: dragEnd.x, y: dragEnd.y }); game.addChild(slingshot.dragStone); } else { // Remove drag visuals if not dragging if (slingshot.dragStone) { slingshot.dragStone.destroy(); slingshot.dragStone = null; } if (slingshot.bandLeft) { slingshot.bandLeft.destroy(); slingshot.bandLeft = null; } if (slingshot.bandRight) { slingshot.bandRight.destroy(); slingshot.bandRight = null; } } // Spawn player soldiers automatically spawnTimers.player++; if (spawnTimers.player >= playerSpawnInterval) { if (playerSoldiers.length < 6) { spawnPlayerSoldier(); } spawnTimers.player = 0; } // Spawn enemy soldiers automatically spawnTimers.enemy++; if (spawnTimers.enemy >= enemySpawnInterval) { if (enemySoldiers.length < 6) { spawnEnemySoldier(); } spawnTimers.enemy = 0; } // Update player soldiers for (var i = playerSoldiers.length - 1; i >= 0; i--) { var s = playerSoldiers[i]; // Asker dondurma: eğer bir düşmanla çarpışıyorsa hareket etmesin var frozen = false; for (var j = enemySoldiers.length - 1; j >= 0; j--) { var e = enemySoldiers[j]; if (Math.abs(s.x - e.x) < 80 && Math.abs(s.y - e.y) < 60) { // Fight! s.hp -= e.atk * 0.03; e.hp -= s.atk * 0.03; s.hpBar.set(s.hp / s.maxHp); e.hpBar.set(e.hp / e.maxHp); frozen = true; if (e.hp <= 0) { score += 10; enemySoldiers.splice(j, 1); e.destroy(); } if (s.hp <= 0) { playerSoldiers.splice(i, 1); s.destroy(); break; } // Eğer ikisi de hayattaysa, dondurulmuş kalmaya devam etsin if (s.hp > 0 && e.hp > 0) { frozen = true; } } } // Hareketi engelle: Eğer çarpışıyorsa update çağrılmasın, çarpışmıyorsa hareket etsin if (!frozen) { // Çarpışma kontrolü: Önümüzde bir düşman var mı? var blocked = false; // Önce kendi askerlerimizi kontrol et, öndekiyle çakışıyorsak ilerleme for (var j = 0; j < playerSoldiers.length; j++) { var s2 = playerSoldiers[j]; if (s2 === s) continue; if (Math.abs(s.y - s2.y) < 60 && s2.x > s.x && s2.x - s.x < 80 && s2.x - s.x > 0 // 80px mesafeden yakınsa ) { blocked = true; break; } } // Sonra düşman askerlerini kontrol et if (!blocked) { for (var j = 0; j < enemySoldiers.length; j++) { var e = enemySoldiers[j]; if (e === s) continue; // Sadece ileriye doğru olan ve çakışan askerleri engelle if (Math.abs(s.y - e.y) < 60 && e.x > s.x && // Sadece önündeki düşman e.x - s.x < 80 && e.x - s.x > 0 // 80px mesafeden yakınsa ) { blocked = true; break; } } } if (!blocked) { s.update(); // Clamp to not go past enemy base if (s.x > enemyBase.x - 120) s.x = enemyBase.x - 120; } } // If at enemy base, attack base if (s.lastAtEnemyBase === undefined) s.lastAtEnemyBase = false; var atEnemyBase = Math.abs(s.x - enemyBase.x) < 120; if (!s.lastAtEnemyBase && atEnemyBase) { // Just arrived at enemy base s.attackedBase = false; } if (!s.attackedBase && atEnemyBase) { enemyBase.hp -= s.atk * 0.15; if (enemyBase.hp < 0) enemyBase.hp = 0; s.attackedBase = true; } s.lastAtEnemyBase = atEnemyBase; } // Update enemy soldiers for (var i = enemySoldiers.length - 1; i >= 0; i--) { var e = enemySoldiers[i]; // Asker dondurma: eğer bir oyuncu askeriyle çarpışıyorsa hareket etmesin var frozen = false; for (var j = playerSoldiers.length - 1; j >= 0; j--) { var s = playerSoldiers[j]; if (Math.abs(e.x - s.x) < 80 && Math.abs(e.y - s.y) < 60) { // Fight! e.hp -= s.atk * 0.03; s.hp -= e.atk * 0.03; e.hpBar.set(e.hp / e.maxHp); s.hpBar.set(s.hp / s.maxHp); frozen = true; if (s.hp <= 0) { playerSoldiers.splice(j, 1); s.destroy(); } if (e.hp <= 0) { score += 10; enemySoldiers.splice(i, 1); e.destroy(); break; } // Eğer ikisi de hayattaysa, dondurulmuş kalmaya devam etsin if (e.hp > 0 && s.hp > 0) { frozen = true; } } } // Hareketi engelle: Eğer çarpışıyorsa update çağrılmasın, çarpışmıyorsa hareket etsin if (!frozen) { // Çarpışma kontrolü: Önümüzde bir oyuncu askeri var mı? var blocked = false; // Önce kendi düşman askerlerini kontrol et, öndekiyle çakışıyorsak ilerleme for (var j = 0; j < enemySoldiers.length; j++) { var e2 = enemySoldiers[j]; if (e2 === e) continue; if (Math.abs(e.y - e2.y) < 60 && e2.x < e.x && e.x - e2.x < 80 && e.x - e2.x > 0 // 80px mesafeden yakınsa ) { blocked = true; break; } } // Sonra oyuncu askerlerini kontrol et if (!blocked) { for (var j = 0; j < playerSoldiers.length; j++) { var s = playerSoldiers[j]; if (Math.abs(e.y - s.y) < 60 && s.x > e.x && s.x - e.x < 80 && s.x - e.x > 0 // 80px mesafeden yakınsa ) { blocked = true; break; } } } if (!blocked) { e.update(); // Clamp to not go past anaBase if (e.x < anaBase.x + 120) e.x = anaBase.x + 120; } } // If at anaBase, attack base if (e.lastAtAnaBase === undefined) e.lastAtAnaBase = false; var atAnaBase = Math.abs(e.x - anaBase.x) < 120; if (!e.lastAtAnaBase && atAnaBase) { // Just arrived at ana base e.attackedBase = false; } if (!e.attackedBase && atAnaBase) { anaBase.hp -= e.atk * 0.05; // Her asker %5 oranında base canı azaltır if (anaBase.hp < 0) anaBase.hp = 0; e.attackedBase = true; } e.lastAtAnaBase = atAnaBase; } // Update stones (slingshot projectiles) for (var i = stones.length - 1; i >= 0; i--) { var st = stones[i]; st.update(); // Remove if out of bounds if (st.x < 0 || st.x > GAME_WIDTH || st.y < 0 || st.y > GAME_HEIGHT) { stones.splice(i, 1); st.destroy(); continue; } // Hit enemy soldiers var hit = false; for (var j = enemySoldiers.length - 1; j >= 0; j--) { var e = enemySoldiers[j]; if (Math.abs(st.x - e.x) < 60 && Math.abs(st.y - e.y) < 80) { e.hp -= st.damage; e.hpBar.set(e.hp / e.maxHp); if (e.hp <= 0) { score += 10; enemySoldiers.splice(j, 1); e.destroy(); } hit = true; break; } } // Hit enemy base if (!hit && Math.abs(st.x - enemyBase.x) < 120 && Math.abs(st.y - enemyBase.y) < 120) { enemyBase.hp -= st.damage; if (enemyBase.hp < 0) enemyBase.hp = 0; hit = true; } if (hit) { stones.splice(i, 1); st.destroy(); } } // Check lose condition if (anaBase.hp <= 0) { LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); return; } // Check win/level up if (enemyBase.hp <= 0) { level++; if (level > MAX_LEVEL) { LK.showYouWin(); return; } // Increase difficulty enemyBaseStats.hp += 30; enemySoldierStats.hp += 8; enemySoldierStats.atk += 2; enemySoldierStats.speed += 0.3; enemySpawnInterval = Math.max(60, enemySpawnInterval - 4); playerSpawnInterval = Math.max(60, playerSpawnInterval - 2); upgradePoints++; showUpgradeMsg("Seviye " + level + "! Yükseltme Puanı +1"); // Reset enemyBase.hp = enemyBaseStats.hp; enemyBase.maxHp = enemyBaseStats.hp; anaBase.hp = anaBaseStats.hp; anaBase.maxHp = anaBaseStats.hp; for (var i = 0; i < playerSoldiers.length; i++) playerSoldiers[i].destroy(); for (var i = 0; i < enemySoldiers.length; i++) enemySoldiers[i].destroy(); for (var i = 0; i < stones.length; i++) stones[i].destroy(); playerSoldiers = []; enemySoldiers = []; stones = []; } // Save progress storage.level = level; storage.score = score; storage.upgradePoints = upgradePoints; };
===================================================================
--- original.js
+++ change.js
@@ -530,21 +530,34 @@
// Hareketi engelle: Eğer çarpışıyorsa update çağrılmasın, çarpışmıyorsa hareket etsin
if (!frozen) {
// Çarpışma kontrolü: Önümüzde bir düşman var mı?
var blocked = false;
- for (var j = 0; j < enemySoldiers.length; j++) {
- var e = enemySoldiers[j];
- if (e === s) continue;
- // Sadece ileriye doğru olan ve çakışan askerleri engelle
- if (Math.abs(s.y - e.y) < 60 && e.x > s.x &&
- // Sadece önündeki düşman
- e.x - s.x < 80 && e.x - s.x > 0 // 80px mesafeden yakınsa
+ // Önce kendi askerlerimizi kontrol et, öndekiyle çakışıyorsak ilerleme
+ for (var j = 0; j < playerSoldiers.length; j++) {
+ var s2 = playerSoldiers[j];
+ if (s2 === s) continue;
+ if (Math.abs(s.y - s2.y) < 60 && s2.x > s.x && s2.x - s.x < 80 && s2.x - s.x > 0 // 80px mesafeden yakınsa
) {
blocked = true;
break;
}
}
+ // Sonra düşman askerlerini kontrol et
if (!blocked) {
+ for (var j = 0; j < enemySoldiers.length; j++) {
+ var e = enemySoldiers[j];
+ if (e === s) continue;
+ // Sadece ileriye doğru olan ve çakışan askerleri engelle
+ if (Math.abs(s.y - e.y) < 60 && e.x > s.x &&
+ // Sadece önündeki düşman
+ e.x - s.x < 80 && e.x - s.x > 0 // 80px mesafeden yakınsa
+ ) {
+ blocked = true;
+ break;
+ }
+ }
+ }
+ if (!blocked) {
s.update();
// Clamp to not go past enemy base
if (s.x > enemyBase.x - 120) s.x = enemyBase.x - 120;
}
@@ -596,21 +609,30 @@
// Hareketi engelle: Eğer çarpışıyorsa update çağrılmasın, çarpışmıyorsa hareket etsin
if (!frozen) {
// Çarpışma kontrolü: Önümüzde bir oyuncu askeri var mı?
var blocked = false;
+ // Önce kendi düşman askerlerini kontrol et, öndekiyle çakışıyorsak ilerleme
for (var j = 0; j < enemySoldiers.length; j++) {
var e2 = enemySoldiers[j];
if (e2 === e) continue;
- // Sadece ileriye doğru olan ve çakışan askerleri engelle
- if (Math.abs(e.y - e2.y) < 60 && e2.x < e.x &&
- // Sadece önündeki düşman
- e.x - e2.x < 80 && e.x - e2.x > 0 // 80px mesafeden yakınsa
+ if (Math.abs(e.y - e2.y) < 60 && e2.x < e.x && e.x - e2.x < 80 && e.x - e2.x > 0 // 80px mesafeden yakınsa
) {
blocked = true;
break;
}
}
+ // Sonra oyuncu askerlerini kontrol et
if (!blocked) {
+ for (var j = 0; j < playerSoldiers.length; j++) {
+ var s = playerSoldiers[j];
+ if (Math.abs(e.y - s.y) < 60 && s.x > e.x && s.x - e.x < 80 && s.x - e.x > 0 // 80px mesafeden yakınsa
+ ) {
+ blocked = true;
+ break;
+ }
+ }
+ }
+ if (!blocked) {
e.update();
// Clamp to not go past anaBase
if (e.x < anaBase.x + 120) e.x = anaBase.x + 120;
}
Yukarda gece gökyüzü, aşağıda çölün sadeliği, gerçekçi, uzaktan görünüm, yazısız, background, yüksek boyutta. In-Game asset. High contrast. No shadows
Askeri üs - gerçekçi, yazısız, yandan görünüm. In-Game asset. 2d. High contrast. No shadows
Ateş, gerçekçi, yazısız. In-Game asset. 2d. High contrast. No shadows
Mermi, gerçekçi, yazısız. In-Game asset. High contrast. No shadows
Taş çağında asker, yazısız, gerçekçi, yandan görünüm. In-Game asset. High contrast. No shadows
Komando, yazısız, gerçekçi, yandan görünüm. In-Game asset. 2d. High contrast. No shadows
Komando, yazısız, gerçekçi, yandan görünüm, bütün vücudu görünsün. In-Game asset. High contrast. No shadows
Zırhlı savaş arabası, gerçekçi, yazısız, yandan görümüm. In-Game asset. High contrast. No shadows
Sapan, yandan görünüm, gerçekçi, yazısız. In-Game asset. High contrast. No shadows
Savaş uçağı, gerçekçi, yazısız, yandan görünüm. In-Game asset. High contrast. No shadows
Füze, gerçekçi, yandan görünüm, yazısız. In-Game asset. High contrast. No shadows
Savaş tankı, gerçekçi, yandan görünüm, yazısız. In-Game asset. High contrast. No shadows
Bomba, gerçekçi, yandan görünüm, yazısız. In-Game asset. High contrast. No shadows
Music, icon, yazısız, gerçekçi. In-Game asset. High contrast. No shadows