User prompt
Ships cannot be checked after merging, fix this issue
User prompt
Fix problems in the game
User prompt
Devriye gemisinin hızını yüzde 30 azalat. Oyunda 4. Seviye korsan gemisi belirince devriye gemisi yardım için yeni bir devriye gemisi çağırsın ve her yeni 4. Seviye korsan gemisi için yeni bir devriye gemisi desteğe gelsin
User prompt
Fix bugs in the game
User prompt
Oyundaki hataları gider
User prompt
3. Seviye ve üst seviye gemiler görünmez ve işlevsiz oluyor bunu düzelt
User prompt
Oyunda 2 ve daha fazla 3. Seviye korsan gemisi olunca gemi hareket ettirelemiyor bunu gider
User prompt
Oyun devriye gemisini korsan gemisi sanıyor bu hatayı gider
User prompt
Zaman zaman gemiler hareket ettirilemiyor bu sorunu düzelt. Ayrıca devriye gemisini başlangıçta daha yavaş oyunda süre geçtikçe daha hızlı olmasını sağla
User prompt
Devriye gemisi haritada gezinsin ve radarına giren gemilere bomba atsın her korsan gemisinin seviyesi ile orantılı olarak canı daha yüksek olsun
User prompt
Gemi ekleme tuşu olmasın tersane adasına park edildiğinde otomatik olarak haritanın belli noktalarına 5 saniyede bir gemi eklensin
User prompt
Gemi ekleme tuşu yok neden
User prompt
Yeni gemi ekle butonu gözükmüyor neden
User prompt
Tersane adası için farklı bir asset kullan
User prompt
Son eklemeler oyuna eklenmemiş gözden geçir ve ekle
User prompt
Oyuncunun yeni gemi üretmesi için tersane adası ekle
Code edit (1 edits merged)
Please save this source code
User prompt
Korsan Adası: Altın ve Savaş
Initial prompt
Bir okyanus üzerinde bir korsan gemisi bir kaç adayı sömürüp altın kazanıyor. Altın kazandıkça yeni korsan gemileri üretiyor korsan gemileri oyuncunun sürekli mekaniği ile birleşip bir üst seviye korsan gemisi oluyor. Korsan gemilerine olduğu yerden bomba atıp batırmaya çalışan bir ordu gemisi var her bomba denk geldiğinde korsan gemileri in seviyesine göre canı azalsın
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ // Bomba var Bomb = Container.expand(function (sx, sy, tx, ty) { var self = Container.call(this); self.asset = self.attachAsset('bomb', { anchorX: 0.5, anchorY: 0.5 }); self.x = sx; self.y = sy; self.tx = tx; self.ty = ty; self.speed = 18; self.toRemove = false; self.update = function () { var dx = self.tx - self.x; var dy = self.ty - self.y; var d = Math.sqrt(dx * dx + dy * dy); if (d < 30) { // Çarpışma kontrolü for (var i = pirateShips.length - 1; i >= 0; i--) { var ship = pirateShips[i]; if (self.intersects(ship)) { var dead = ship.takeDamage(ship.level); // Seviye kadar hasar if (dead) { pirateShips.splice(i, 1); } self.toRemove = true; break; } } if (!self.toRemove) { self.toRemove = true; } } else { self.x += self.speed * dx / d; self.y += self.speed * dy / d; } // Ekran dışı if (self.x < -100 || self.x > 2148 || self.y < -100 || self.y > 2832) { self.toRemove = true; } }; return self; }); // Ada var Island = Container.expand(function () { var self = Container.call(this); self.asset = self.attachAsset('island', { anchorX: 0.5, anchorY: 0.5 }); return self; }); // Ordu Gemisi var NavyShip = Container.expand(function () { var self = Container.call(this); self.asset = self.attachAsset('navy', { anchorX: 0.5, anchorY: 0.5 }); self.bombCooldown = 0; self.target = null; self.speed = 4; self.bombs = []; self.update = function () { // En yakın korsan gemisini bul if (pirateShips.length > 0) { var minDist = 99999; var closest = null; for (var i = 0; i < pirateShips.length; i++) { var dx = pirateShips[i].x - self.x; var dy = pirateShips[i].y - self.y; var dist = dx * dx + dy * dy; if (dist < minDist) { minDist = dist; closest = pirateShips[i]; } } self.target = closest; } else { self.target = null; } // Hedefe doğru hareket et if (self.target) { var dx = self.target.x - self.x; var dy = self.target.y - self.y; var d = Math.sqrt(dx * dx + dy * dy); if (d > 10) { self.x += self.speed * dx / d; self.y += self.speed * dy / d; } // Bomba at self.bombCooldown--; if (self.bombCooldown <= 0) { self.bombCooldown = 90 + Math.floor(Math.random() * 60); self.shootBomb(); } } // Bombaları güncelle for (var i = self.bombs.length - 1; i >= 0; i--) { var bomb = self.bombs[i]; bomb.update(); if (bomb.toRemove) { bomb.destroy(); self.bombs.splice(i, 1); } } }; self.shootBomb = function () { if (!self.target) return; var bomb = new Bomb(self.x, self.y, self.target.x, self.target.y); game.addChild(bomb); self.bombs.push(bomb); LK.getSound('bomb').play(); }; return self; }); // Korsan Gemisi var PirateShip = Container.expand(function () { var self = Container.call(this); self.level = 1; // 1-5 self.hp = 3; // Her seviye için can self.maxHp = 3; self.isDragging = false; self.isMerging = false; self.mergeTarget = null; self.collecting = false; self.collectTimeout = null; // Seviye ve cana göre asset seçimi function updateGraphics() { if (self.asset) { self.removeChild(self.asset); } var assetId = 'pirate' + self.level; self.asset = self.attachAsset(assetId, { anchorX: 0.5, anchorY: 0.5 }); } updateGraphics(); // Can göstergesi self.hpText = new Text2(self.hp + '', { size: 60, fill: "#fff" }); self.hpText.anchor.set(0.5, 1.2); self.addChild(self.hpText); self.updateHp = function () { self.hpText.setText(self.hp + ''); }; self.setLevel = function (lvl) { self.level = lvl; self.maxHp = 2 + lvl; self.hp = self.maxHp; updateGraphics(); self.updateHp(); }; self.takeDamage = function (dmg) { self.hp -= dmg; if (self.hp < 0) self.hp = 0; self.updateHp(); LK.effects.flashObject(self, 0xff0000, 400); LK.getSound('hit').play(); if (self.hp <= 0) { self.destroy(); return true; } return false; }; self.heal = function () { self.hp = self.maxHp; self.updateHp(); }; self.collectGold = function (island) { if (self.collecting) return; self.collecting = true; LK.getSound('gold').play(); // Altın animasyonu var gold = LK.getAsset('gold', { anchorX: 0.5, anchorY: 0.5, x: island.x, y: island.y }); game.addChild(gold); tween(gold, { x: self.x, y: self.y }, { duration: 500, easing: tween.cubicOut, onFinish: function onFinish() { gold.destroy(); } }); // Altın ekle goldCount += 1; updateGoldText(); // Kısa süre sonra tekrar toplayabilsin self.collectTimeout = LK.setTimeout(function () { self.collecting = false; }, 1200); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x1a237e }); /**** * Game Code ****/ // Sesler // Altın simgesi // Bomba // Ordu gemisi // Ada (altın kaynağı) // Korsan gemisi seviyelerine göre farklı renk ve boyutlarda kutular // Oyun değişkenleri var pirateShips = []; var islands = []; var navyShip = null; var goldCount = 0; var goldText = null; var spawnBtn = null; var draggingShip = null; var dragOffsetX = 0; var dragOffsetY = 0; var mergeCandidate = null; var mergeAnim = false; // Altın göstergesi goldText = new Text2('Altın: 0', { size: 90, fill: 0xFFD700 }); goldText.anchor.set(0.5, 0); LK.gui.top.addChild(goldText); function updateGoldText() { goldText.setText('Altın: ' + goldCount); } // Korsan gemisi üretme butonu spawnBtn = new Text2('+ Gemi (' + 3 + ' altın)', { size: 80, fill: "#fff" }); spawnBtn.anchor.set(0.5, 0); spawnBtn.x = 2048 / 2; spawnBtn.y = 120; LK.gui.top.addChild(spawnBtn); function updateSpawnBtn() { spawnBtn.setText('+ Gemi (' + 3 + ' altın)'); } updateSpawnBtn(); // Ada yerleşimi function spawnIslands() { var positions = [[400, 700], [1648, 700], [400, 2000], [1648, 2000], [1024, 1400]]; for (var i = 0; i < positions.length; i++) { var island = new Island(); island.x = positions[i][0]; island.y = positions[i][1]; game.addChild(island); islands.push(island); } } // Başlangıç korsan gemisi function spawnPirateShip(level, x, y) { var ship = new PirateShip(); ship.setLevel(level); ship.x = x; ship.y = y; pirateShips.push(ship); game.addChild(ship); LK.getSound('spawn').play(); return ship; } // Ordu gemisi başlat function spawnNavyShip() { navyShip = new NavyShip(); navyShip.x = 2048 / 2; navyShip.y = 300; game.addChild(navyShip); } // Gemi birleştirme function tryMergeShips(ship1, ship2) { if (ship1.level !== ship2.level) return false; if (ship1.isMerging || ship2.isMerging) return false; if (ship1 === ship2) return false; if (ship1.level >= 5) return false; ship1.isMerging = true; ship2.isMerging = true; mergeAnim = true; // Birleştirme animasyonu var mx = (ship1.x + ship2.x) / 2; var my = (ship1.y + ship2.y) / 2; tween(ship1, { x: mx, y: my, scaleX: 1.2, scaleY: 1.2 }, { duration: 300, easing: tween.cubicInOut }); tween(ship2, { x: mx, y: my, scaleX: 1.2, scaleY: 1.2 }, { duration: 300, easing: tween.cubicInOut, onFinish: function onFinish() { // Yeni üst seviye gemi var newShip = spawnPirateShip(ship1.level + 1, mx, my); // Eski gemileri sil ship1.destroy(); ship2.destroy(); var idx1 = pirateShips.indexOf(ship1); var idx2 = pirateShips.indexOf(ship2); if (idx1 > -1) pirateShips.splice(idx1, 1); if (idx2 > -1) pirateShips.splice(idx2, 1); LK.getSound('merge').play(); mergeAnim = false; } }); } // Gemi üretme butonu tıklama spawnBtn.down = function (x, y, obj) { if (goldCount >= 3) { goldCount -= 3; updateGoldText(); updateSpawnBtn(); // Rastgele boş bir yere yeni gemi var px = 400 + Math.random() * 1248; var py = 1000 + Math.random() * 800; spawnPirateShip(1, px, py); } }; // Gemi sürükleme ve birleştirme game.down = function (x, y, obj) { if (mergeAnim) return; // Gemilerden birine tıklandı mı? for (var i = pirateShips.length - 1; i >= 0; i--) { var ship = pirateShips[i]; var dx = x - ship.x; var dy = y - ship.y; var r = Math.max(ship.asset.width, ship.asset.height) / 2; if (dx * dx + dy * dy < r * r) { draggingShip = ship; dragOffsetX = ship.x - x; dragOffsetY = ship.y - y; ship.isDragging = true; break; } } }; game.move = function (x, y, obj) { if (mergeAnim) return; if (draggingShip && draggingShip.isDragging) { draggingShip.x = x + dragOffsetX; draggingShip.y = y + dragOffsetY; // Sınır dışına çıkmasın if (draggingShip.x < 120) draggingShip.x = 120; if (draggingShip.x > 2048 - 120) draggingShip.x = 2048 - 120; if (draggingShip.y < 200) draggingShip.y = 200; if (draggingShip.y > 2732 - 120) draggingShip.y = 2732 - 120; // Birleştirme adayı bul mergeCandidate = null; for (var i = 0; i < pirateShips.length; i++) { var other = pirateShips[i]; if (other === draggingShip) continue; if (other.level !== draggingShip.level) continue; var dx = draggingShip.x - other.x; var dy = draggingShip.y - other.y; var r = Math.max(draggingShip.asset.width, other.asset.width) / 2 + 30; if (dx * dx + dy * dy < r * r) { mergeCandidate = other; break; } } } }; game.up = function (x, y, obj) { if (mergeAnim) return; if (draggingShip && draggingShip.isDragging) { draggingShip.isDragging = false; // Birleştirme varsa if (mergeCandidate) { tryMergeShips(draggingShip, mergeCandidate); } draggingShip = null; mergeCandidate = null; } }; // Oyun güncelleme game.update = function () { // Ordu gemisi hareket ve bomba if (navyShip) { navyShip.update(); } // Korsan gemileri: ada ile temas ve altın toplama for (var i = 0; i < pirateShips.length; i++) { var ship = pirateShips[i]; for (var j = 0; j < islands.length; j++) { var island = islands[j]; if (ship.intersects(island)) { ship.collectGold(island); } } } // Oyun bitti mi? (Hiç korsan gemisi kalmadıysa) if (pirateShips.length === 0) { LK.effects.flashScreen(0x000000, 800); LK.showGameOver(); } }; // Oyun başlat spawnIslands(); spawnPirateShip(1, 2048 / 2, 2200); spawnNavyShip(); updateGoldText(); updateSpawnBtn();
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,435 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+var storage = LK.import("@upit/storage.v1");
+
+/****
+* Classes
+****/
+// Bomba
+var Bomb = Container.expand(function (sx, sy, tx, ty) {
+ var self = Container.call(this);
+ self.asset = self.attachAsset('bomb', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.x = sx;
+ self.y = sy;
+ self.tx = tx;
+ self.ty = ty;
+ self.speed = 18;
+ self.toRemove = false;
+ self.update = function () {
+ var dx = self.tx - self.x;
+ var dy = self.ty - self.y;
+ var d = Math.sqrt(dx * dx + dy * dy);
+ if (d < 30) {
+ // Çarpışma kontrolü
+ for (var i = pirateShips.length - 1; i >= 0; i--) {
+ var ship = pirateShips[i];
+ if (self.intersects(ship)) {
+ var dead = ship.takeDamage(ship.level); // Seviye kadar hasar
+ if (dead) {
+ pirateShips.splice(i, 1);
+ }
+ self.toRemove = true;
+ break;
+ }
+ }
+ if (!self.toRemove) {
+ self.toRemove = true;
+ }
+ } else {
+ self.x += self.speed * dx / d;
+ self.y += self.speed * dy / d;
+ }
+ // Ekran dışı
+ if (self.x < -100 || self.x > 2148 || self.y < -100 || self.y > 2832) {
+ self.toRemove = true;
+ }
+ };
+ return self;
+});
+// Ada
+var Island = Container.expand(function () {
+ var self = Container.call(this);
+ self.asset = self.attachAsset('island', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ return self;
+});
+// Ordu Gemisi
+var NavyShip = Container.expand(function () {
+ var self = Container.call(this);
+ self.asset = self.attachAsset('navy', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.bombCooldown = 0;
+ self.target = null;
+ self.speed = 4;
+ self.bombs = [];
+ self.update = function () {
+ // En yakın korsan gemisini bul
+ if (pirateShips.length > 0) {
+ var minDist = 99999;
+ var closest = null;
+ for (var i = 0; i < pirateShips.length; i++) {
+ var dx = pirateShips[i].x - self.x;
+ var dy = pirateShips[i].y - self.y;
+ var dist = dx * dx + dy * dy;
+ if (dist < minDist) {
+ minDist = dist;
+ closest = pirateShips[i];
+ }
+ }
+ self.target = closest;
+ } else {
+ self.target = null;
+ }
+ // Hedefe doğru hareket et
+ if (self.target) {
+ var dx = self.target.x - self.x;
+ var dy = self.target.y - self.y;
+ var d = Math.sqrt(dx * dx + dy * dy);
+ if (d > 10) {
+ self.x += self.speed * dx / d;
+ self.y += self.speed * dy / d;
+ }
+ // Bomba at
+ self.bombCooldown--;
+ if (self.bombCooldown <= 0) {
+ self.bombCooldown = 90 + Math.floor(Math.random() * 60);
+ self.shootBomb();
+ }
+ }
+ // Bombaları güncelle
+ for (var i = self.bombs.length - 1; i >= 0; i--) {
+ var bomb = self.bombs[i];
+ bomb.update();
+ if (bomb.toRemove) {
+ bomb.destroy();
+ self.bombs.splice(i, 1);
+ }
+ }
+ };
+ self.shootBomb = function () {
+ if (!self.target) return;
+ var bomb = new Bomb(self.x, self.y, self.target.x, self.target.y);
+ game.addChild(bomb);
+ self.bombs.push(bomb);
+ LK.getSound('bomb').play();
+ };
+ return self;
+});
+// Korsan Gemisi
+var PirateShip = Container.expand(function () {
+ var self = Container.call(this);
+ self.level = 1; // 1-5
+ self.hp = 3; // Her seviye için can
+ self.maxHp = 3;
+ self.isDragging = false;
+ self.isMerging = false;
+ self.mergeTarget = null;
+ self.collecting = false;
+ self.collectTimeout = null;
+ // Seviye ve cana göre asset seçimi
+ function updateGraphics() {
+ if (self.asset) {
+ self.removeChild(self.asset);
+ }
+ var assetId = 'pirate' + self.level;
+ self.asset = self.attachAsset(assetId, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ }
+ updateGraphics();
+ // Can göstergesi
+ self.hpText = new Text2(self.hp + '', {
+ size: 60,
+ fill: "#fff"
+ });
+ self.hpText.anchor.set(0.5, 1.2);
+ self.addChild(self.hpText);
+ self.updateHp = function () {
+ self.hpText.setText(self.hp + '');
+ };
+ self.setLevel = function (lvl) {
+ self.level = lvl;
+ self.maxHp = 2 + lvl;
+ self.hp = self.maxHp;
+ updateGraphics();
+ self.updateHp();
+ };
+ self.takeDamage = function (dmg) {
+ self.hp -= dmg;
+ if (self.hp < 0) self.hp = 0;
+ self.updateHp();
+ LK.effects.flashObject(self, 0xff0000, 400);
+ LK.getSound('hit').play();
+ if (self.hp <= 0) {
+ self.destroy();
+ return true;
+ }
+ return false;
+ };
+ self.heal = function () {
+ self.hp = self.maxHp;
+ self.updateHp();
+ };
+ self.collectGold = function (island) {
+ if (self.collecting) return;
+ self.collecting = true;
+ LK.getSound('gold').play();
+ // Altın animasyonu
+ var gold = LK.getAsset('gold', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: island.x,
+ y: island.y
+ });
+ game.addChild(gold);
+ tween(gold, {
+ x: self.x,
+ y: self.y
+ }, {
+ duration: 500,
+ easing: tween.cubicOut,
+ onFinish: function onFinish() {
+ gold.destroy();
+ }
+ });
+ // Altın ekle
+ goldCount += 1;
+ updateGoldText();
+ // Kısa süre sonra tekrar toplayabilsin
+ self.collectTimeout = LK.setTimeout(function () {
+ self.collecting = false;
+ }, 1200);
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x1a237e
+});
+
+/****
+* Game Code
+****/
+// Sesler
+// Altın simgesi
+// Bomba
+// Ordu gemisi
+// Ada (altın kaynağı)
+// Korsan gemisi seviyelerine göre farklı renk ve boyutlarda kutular
+// Oyun değişkenleri
+var pirateShips = [];
+var islands = [];
+var navyShip = null;
+var goldCount = 0;
+var goldText = null;
+var spawnBtn = null;
+var draggingShip = null;
+var dragOffsetX = 0;
+var dragOffsetY = 0;
+var mergeCandidate = null;
+var mergeAnim = false;
+// Altın göstergesi
+goldText = new Text2('Altın: 0', {
+ size: 90,
+ fill: 0xFFD700
+});
+goldText.anchor.set(0.5, 0);
+LK.gui.top.addChild(goldText);
+function updateGoldText() {
+ goldText.setText('Altın: ' + goldCount);
+}
+// Korsan gemisi üretme butonu
+spawnBtn = new Text2('+ Gemi (' + 3 + ' altın)', {
+ size: 80,
+ fill: "#fff"
+});
+spawnBtn.anchor.set(0.5, 0);
+spawnBtn.x = 2048 / 2;
+spawnBtn.y = 120;
+LK.gui.top.addChild(spawnBtn);
+function updateSpawnBtn() {
+ spawnBtn.setText('+ Gemi (' + 3 + ' altın)');
+}
+updateSpawnBtn();
+// Ada yerleşimi
+function spawnIslands() {
+ var positions = [[400, 700], [1648, 700], [400, 2000], [1648, 2000], [1024, 1400]];
+ for (var i = 0; i < positions.length; i++) {
+ var island = new Island();
+ island.x = positions[i][0];
+ island.y = positions[i][1];
+ game.addChild(island);
+ islands.push(island);
+ }
+}
+// Başlangıç korsan gemisi
+function spawnPirateShip(level, x, y) {
+ var ship = new PirateShip();
+ ship.setLevel(level);
+ ship.x = x;
+ ship.y = y;
+ pirateShips.push(ship);
+ game.addChild(ship);
+ LK.getSound('spawn').play();
+ return ship;
+}
+// Ordu gemisi başlat
+function spawnNavyShip() {
+ navyShip = new NavyShip();
+ navyShip.x = 2048 / 2;
+ navyShip.y = 300;
+ game.addChild(navyShip);
+}
+// Gemi birleştirme
+function tryMergeShips(ship1, ship2) {
+ if (ship1.level !== ship2.level) return false;
+ if (ship1.isMerging || ship2.isMerging) return false;
+ if (ship1 === ship2) return false;
+ if (ship1.level >= 5) return false;
+ ship1.isMerging = true;
+ ship2.isMerging = true;
+ mergeAnim = true;
+ // Birleştirme animasyonu
+ var mx = (ship1.x + ship2.x) / 2;
+ var my = (ship1.y + ship2.y) / 2;
+ tween(ship1, {
+ x: mx,
+ y: my,
+ scaleX: 1.2,
+ scaleY: 1.2
+ }, {
+ duration: 300,
+ easing: tween.cubicInOut
+ });
+ tween(ship2, {
+ x: mx,
+ y: my,
+ scaleX: 1.2,
+ scaleY: 1.2
+ }, {
+ duration: 300,
+ easing: tween.cubicInOut,
+ onFinish: function onFinish() {
+ // Yeni üst seviye gemi
+ var newShip = spawnPirateShip(ship1.level + 1, mx, my);
+ // Eski gemileri sil
+ ship1.destroy();
+ ship2.destroy();
+ var idx1 = pirateShips.indexOf(ship1);
+ var idx2 = pirateShips.indexOf(ship2);
+ if (idx1 > -1) pirateShips.splice(idx1, 1);
+ if (idx2 > -1) pirateShips.splice(idx2, 1);
+ LK.getSound('merge').play();
+ mergeAnim = false;
+ }
+ });
+}
+// Gemi üretme butonu tıklama
+spawnBtn.down = function (x, y, obj) {
+ if (goldCount >= 3) {
+ goldCount -= 3;
+ updateGoldText();
+ updateSpawnBtn();
+ // Rastgele boş bir yere yeni gemi
+ var px = 400 + Math.random() * 1248;
+ var py = 1000 + Math.random() * 800;
+ spawnPirateShip(1, px, py);
+ }
+};
+// Gemi sürükleme ve birleştirme
+game.down = function (x, y, obj) {
+ if (mergeAnim) return;
+ // Gemilerden birine tıklandı mı?
+ for (var i = pirateShips.length - 1; i >= 0; i--) {
+ var ship = pirateShips[i];
+ var dx = x - ship.x;
+ var dy = y - ship.y;
+ var r = Math.max(ship.asset.width, ship.asset.height) / 2;
+ if (dx * dx + dy * dy < r * r) {
+ draggingShip = ship;
+ dragOffsetX = ship.x - x;
+ dragOffsetY = ship.y - y;
+ ship.isDragging = true;
+ break;
+ }
+ }
+};
+game.move = function (x, y, obj) {
+ if (mergeAnim) return;
+ if (draggingShip && draggingShip.isDragging) {
+ draggingShip.x = x + dragOffsetX;
+ draggingShip.y = y + dragOffsetY;
+ // Sınır dışına çıkmasın
+ if (draggingShip.x < 120) draggingShip.x = 120;
+ if (draggingShip.x > 2048 - 120) draggingShip.x = 2048 - 120;
+ if (draggingShip.y < 200) draggingShip.y = 200;
+ if (draggingShip.y > 2732 - 120) draggingShip.y = 2732 - 120;
+ // Birleştirme adayı bul
+ mergeCandidate = null;
+ for (var i = 0; i < pirateShips.length; i++) {
+ var other = pirateShips[i];
+ if (other === draggingShip) continue;
+ if (other.level !== draggingShip.level) continue;
+ var dx = draggingShip.x - other.x;
+ var dy = draggingShip.y - other.y;
+ var r = Math.max(draggingShip.asset.width, other.asset.width) / 2 + 30;
+ if (dx * dx + dy * dy < r * r) {
+ mergeCandidate = other;
+ break;
+ }
+ }
+ }
+};
+game.up = function (x, y, obj) {
+ if (mergeAnim) return;
+ if (draggingShip && draggingShip.isDragging) {
+ draggingShip.isDragging = false;
+ // Birleştirme varsa
+ if (mergeCandidate) {
+ tryMergeShips(draggingShip, mergeCandidate);
+ }
+ draggingShip = null;
+ mergeCandidate = null;
+ }
+};
+// Oyun güncelleme
+game.update = function () {
+ // Ordu gemisi hareket ve bomba
+ if (navyShip) {
+ navyShip.update();
+ }
+ // Korsan gemileri: ada ile temas ve altın toplama
+ for (var i = 0; i < pirateShips.length; i++) {
+ var ship = pirateShips[i];
+ for (var j = 0; j < islands.length; j++) {
+ var island = islands[j];
+ if (ship.intersects(island)) {
+ ship.collectGold(island);
+ }
+ }
+ }
+ // Oyun bitti mi? (Hiç korsan gemisi kalmadıysa)
+ if (pirateShips.length === 0) {
+ LK.effects.flashScreen(0x000000, 800);
+ LK.showGameOver();
+ }
+};
+// Oyun başlat
+spawnIslands();
+spawnPirateShip(1, 2048 / 2, 2200);
+spawnNavyShip();
+updateGoldText();
+updateSpawnBtn();
\ No newline at end of file