User prompt
Bütün kaynak stoğunu sıfırla.
User prompt
Oyun sıfırlanınca mevcut toplanmış kaynak stoğu da sıfırlanmış olsun.
User prompt
Oyun sıfırlanınca mevcut kaynak stoğu da sıfırlanmış olsun.
User prompt
Sağ üst kısıma ''Oyunu Sıfırla'' butonu ekle. Tıklayınca bütün ilerlemeler sıfırlansın.
User prompt
Düşman gemileri 1 dakikada 1 tane gelsin. Her öldürmede 1 dakika sonra gelsin ama düşman sayısı 1 tane artsın.
User prompt
Kaynakların toplam stok sayısı Toplam Kaynak olarak güncellensin.
User prompt
Kaynak yazısına ''Toplam Kaynak'' olarak işle. Kaynak isimli kaynağı sistemden sil. Kaynak yazısı sadece ''Toplam Kaynak'' olarak işlensin.
User prompt
Satır aralarında ki boşluğu kaldır
User prompt
Soldaki paneli tekrar hizala
User prompt
Please fix the bug: 'ReferenceError: shipCountTxt is not defined' in or related to this line: 'shipCountTxt.setText('Gemi: 1');' Line Number: 633
User prompt
Please fix the bug: 'collectorTxt is not defined' in or related to this line: 'txt.y = -colonyHpTxt.height - resourceTxt.height - collectorTxt.height - i * (txt.height + 4) - 24;' Line Number: 436
User prompt
Soldaki panelde Gemi, Toplayıcı yazılarını çıkar.
User prompt
Yazıyı yeniden hizala
User prompt
Sağ alt eklediğimiz yazıya''Koloni Sağlığı'' yazısını ekle
User prompt
Gemi, Toplayıcı, Koloni canı yazılarını sağ alt kenara ekle.
User prompt
Yazı renklerini kaynak rengine göre ayarla.
User prompt
Please fix the bug: 'resourceNamesTxt is not defined' in or related to this line: 'shipCountTxt.y = -colonyHpTxt.height - resourceTxt.height - collectorTxt.height - resourceNamesTxt.height - 32;' Line Number: 397
User prompt
Hangi kaynaktan kaç tane var ise onları 1 satır halinde sırala alt alta. Her kaynağın stoğu farklı olsun.
User prompt
Koloni canı, Bütün kaynakların ismi, gemi sayısı hepsi sol alttaki yazıların içinde görünsün
User prompt
Oyundaki bütün yazı ve butonları Gui'ye göre sıralı ve hizalı şekilde ve hepsi ekranda görünecek şekilde, sol alt kenara yerleştir. Yazı fontunu 36 yap.
User prompt
Hareket eden herşeyin hızını %400 oranında azalt
User prompt
Hareket eden herşeyin hızını %200 oranında azalt
User prompt
Kaynaklar sabit durmasın hareket halinde haritaya girip çıksınlar. Hızları çok yavaş olsun. Toplayıcılar bunları takip ederek hammadde toplasınlar.
User prompt
Altın, Kobalt, Nikel, Helyum-3, Platin, Demir, Manganez Bu kaynakları ekle ve her birine farklı resim dosyası oluştur
User prompt
Oyundaki bütün yazı ve butonları Gui'ye göre sıralı ve hizalı şekilde sol alt kenara yerleştir. Yazı fontunu 36 yap.
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
// Mermi
var Bullet = Container.expand(function () {
var self = Container.call(this);
var b = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 40;
self.dirX = 0;
self.dirY = -1;
self.from = 'player'; // veya 'enemy'
self.targetEnemy = null; // Eğer hedef varsa
self.attackPower = 1; // Her merminin saldırı gücü 1 olsun
self.update = function () {
// Eğer bu oyuncu mermisi ve hedefi varsa, hedefe yönel
if (self.from === 'player' && self.targetEnemy && typeof self.targetEnemy.x === "number" && typeof self.targetEnemy.y === "number") {
var dx = self.targetEnemy.x - self.x;
var dy = self.targetEnemy.y - self.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist > 0) {
self.dirX = dx / dist;
self.dirY = dy / dist;
}
}
self.x += self.dirX * self.speed;
self.y += self.dirY * self.speed;
};
return self;
});
// Otomatik toplayıcı (Collector)
var Collector = Container.expand(function () {
var self = Container.call(this);
var col = self.attachAsset('collector', {
anchorX: 0.5,
anchorY: 0.5
});
self.target = null;
self.speed = 8;
self.carrying = 0;
self.maxCarry = 10;
self.state = 'idle'; // idle, moving, returning
self.update = function () {
if (self.state === 'moving' && self.target) {
var dx = self.target.x - self.x;
var dy = self.target.y - self.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist < 10) {
// Kaynağa ulaştı
if (!self.target.collected && self.carrying < self.maxCarry) {
var take = Math.min(self.maxCarry - self.carrying, self.target.amount);
self.carrying += take;
self.target.amount -= take;
if (self.target.amount <= 0) {
self.target.collected = true;
self.target.visible = false;
}
}
self.state = 'returning';
} else {
self.x += self.speed * dx / dist;
self.y += self.speed * dy / dist;
}
} else if (self.state === 'returning') {
var dx = colony.x - self.x;
var dy = colony.y - self.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist < 10) {
// Koloniye ulaştı
resources += self.carrying;
self.carrying = 0;
self.state = 'idle';
self.target = null;
} else {
self.x += self.speed * dx / dist;
self.y += self.speed * dy / dist;
}
}
};
return self;
});
// Koloni ana üssü
var Colony = Container.expand(function () {
var self = Container.call(this);
var c = self.attachAsset('colony', {
anchorX: 0.5,
anchorY: 0.5
});
// Koloni canı
self.maxHp = 50;
self.hp = 50;
return self;
});
// Düşman gemisi
var Enemy = Container.expand(function () {
var self = Container.call(this);
var e = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
// Hız %100 yavaşlatıldı
self.speed = (7 + Math.random() * 4) * 0.5;
self.target = null;
self.hp = 2;
self.update = function () {
if (self.target) {
var dx = self.target.x - self.x;
var dy = self.target.y - self.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist > self.speed) {
self.x += self.speed * dx / dist;
self.y += self.speed * dy / dist;
}
}
};
return self;
});
// Kaynak noktası
var ResourceNode = Container.expand(function () {
var self = Container.call(this);
// Kaynak türleri ve asset id'leri
var resourceTypes = [{
name: "Altın",
asset: "resource_gold"
}, {
name: "Kobalt",
asset: "resource_cobalt"
}, {
name: "Nikel",
asset: "resource_nickel"
}, {
name: "Helyum-3",
asset: "resource_helium3"
}, {
name: "Platin",
asset: "resource_platinum"
}, {
name: "Demir",
asset: "resource_iron"
}, {
name: "Manganez",
asset: "resource_manganese"
}];
// Rastgele bir kaynak türü seç
var typeIndex = Math.floor(Math.random() * resourceTypes.length);
self.resourceType = resourceTypes[typeIndex].name;
self.resourceAsset = resourceTypes[typeIndex].asset;
// Asset'i ata
var res = self.attachAsset(self.resourceAsset, {
anchorX: 0.5,
anchorY: 0.5
});
self.amount = 10 + Math.floor(Math.random() * 10); // 10-19 arası kaynak
self.collected = false;
// --- HAREKET EKLE ---
// Rastgele bir giriş kenarı seç (sol, sağ, üst, alt)
var edge = Math.floor(Math.random() * 4);
var startX, startY, endX, endY;
var margin = 120;
if (edge === 0) {
// sol kenar
startX = -margin;
startY = 400 + Math.random() * (2732 - 800);
endX = 2048 + margin;
endY = startY + (Math.random() - 0.5) * 400;
} else if (edge === 1) {
// sağ kenar
startX = 2048 + margin;
startY = 400 + Math.random() * (2732 - 800);
endX = -margin;
endY = startY + (Math.random() - 0.5) * 400;
} else if (edge === 2) {
// üst kenar
startX = Math.random() * 2048;
startY = -margin;
endX = startX + (Math.random() - 0.5) * 400;
endY = 2732 + margin;
} else {
// alt kenar
startX = Math.random() * 2048;
startY = 2732 + margin;
endX = startX + (Math.random() - 0.5) * 400;
endY = -margin;
}
self.x = startX;
self.y = startY;
self._moveStartX = startX;
self._moveStartY = startY;
self._moveEndX = endX;
self._moveEndY = endY;
self._moveProgress = 0;
self._moveSpeed = 0.002 + Math.random() * 0.001; // Çok yavaş hareket (0.002 ~ 0.003 arası)
self.visible = true;
self.update = function () {
if (self.collected) return;
// Hareket ilerlemesini güncelle
self._moveProgress += self._moveSpeed;
if (self._moveProgress > 1) {
// Haritadan çıktı, kaybolsun
self.collected = true;
self.visible = false;
return;
}
// Lineer hareket
self.x = self._moveStartX + (self._moveEndX - self._moveStartX) * self._moveProgress;
self.y = self._moveStartY + (self._moveEndY - self._moveStartY) * self._moveProgress;
};
return self;
});
// Oyuncu gemisi
var Ship = Container.expand(function () {
var self = Container.call(this);
var s = self.attachAsset('ship', {
anchorX: 0.5,
anchorY: 0.5
});
// Hız %100 yavaşlatıldı
self.speed = 11;
self.targetX = self.x;
self.targetY = self.y;
self.lastShot = 0;
self.shootDelay = 30; // 0.5s
self.update = function () {
// Hareket
var dx = self.targetX - self.x;
var dy = self.targetY - self.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist > self.speed) {
self.x += self.speed * dx / dist;
self.y += self.speed * dy / dist;
} else {
self.x = self.targetX;
self.y = self.targetY;
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x0a0a1a
});
/****
* Game Code
****/
// Koloni, kaynak, gemi ve düşman için temel şekiller
// Global değişkenler
var colony;
var ship;
var collectors = [];
var resourceNodes = [];
var enemies = [];
var bullets = [];
var resources = 0;
var autoCollectors = 1;
var spawnEnemyTimer = 0;
var dragNode = null;
var lastTouch = {
x: 0,
y: 0
};
// Koloni kur
colony = new Colony();
colony.x = 2048 / 2;
colony.y = 2732 - 400;
game.addChild(colony);
// Koloni can barı ve can göstergesi
var colonyHpBarBg = LK.getAsset('collector', {
width: 220,
height: 28,
color: 0x222222,
anchorX: 0.5,
anchorY: 0.5
});
colonyHpBarBg.y = colony.y - 160;
colonyHpBarBg.x = colony.x;
game.addChild(colonyHpBarBg);
var colonyHpBar = LK.getAsset('collector', {
width: 216,
height: 20,
color: 0x4adf4a,
anchorX: 0.5,
anchorY: 0.5
});
colonyHpBar.y = colony.y - 160;
colonyHpBar.x = colony.x;
game.addChild(colonyHpBar);
// Sol alt köşeye hizalı GUI grubu oluştur
var guiLeftBottomGroup = new Container();
LK.gui.bottomLeft.addChild(guiLeftBottomGroup);
// Koloni can yazısı
var colonyHpTxt = new Text2('50 / 50', {
size: 36,
fill: "#fff"
});
colonyHpTxt.anchor.set(0, 1); // Sol alt köşe
colonyHpTxt.x = 0;
colonyHpTxt.y = 0;
guiLeftBottomGroup.addChild(colonyHpTxt);
// Kaynak göstergesi
var resourceTxt = new Text2('Kaynak: 0', {
size: 36,
fill: "#fff"
});
resourceTxt.anchor.set(0, 1);
resourceTxt.x = 0;
resourceTxt.y = -colonyHpTxt.height - 8;
guiLeftBottomGroup.addChild(resourceTxt);
// Otomasyon göstergesi
var collectorTxt = new Text2('Toplayıcı: 1', {
size: 36,
fill: 0xB8FFB8
});
collectorTxt.anchor.set(0, 1);
collectorTxt.x = 0;
collectorTxt.y = -colonyHpTxt.height - resourceTxt.height - 16;
guiLeftBottomGroup.addChild(collectorTxt);
// Gemi kur
ship = new Ship();
ship.x = 2048 / 2;
ship.y = 2732 - 700;
game.addChild(ship);
// Otomatik toplayıcıları oluştur
function createCollectors(n) {
for (var i = collectors.length; i < n; i++) {
var c = new Collector();
c.x = colony.x + 100 * (i - n / 2);
c.y = colony.y + 100;
collectors.push(c);
game.addChild(c);
}
}
createCollectors(autoCollectors);
// Kaynak noktalarını oluştur
function spawnResources() {
for (var i = 0; i < 5; i++) {
var r = new ResourceNode();
var angle = Math.PI * 2 * i / 5 + Math.random() * 0.2;
var dist = 700 + Math.random() * 200;
r.x = colony.x + Math.cos(angle) * dist;
r.y = colony.y - 600 + Math.sin(angle) * dist;
resourceNodes.push(r);
game.addChild(r);
}
}
spawnResources();
// Düşman üret
function spawnEnemy() {
var e = new Enemy();
var side = Math.random();
if (side < 0.5) {
e.x = Math.random() * 2048;
e.y = -100;
} else {
e.x = Math.random() < 0.5 ? -100 : 2048 + 100;
e.y = 400 + Math.random() * 1200;
}
e.target = colony;
enemies.push(e);
game.addChild(e);
}
// Gemiye dokunma ve sürükleme
game.down = function (x, y, obj) {
// Gemiye dokunulduysa sürükle
var local = game.toLocal({
x: x,
y: y
});
var dx = local.x - ship.x;
var dy = local.y - ship.y;
if (dx * dx + dy * dy < 120 * 120) {
dragNode = ship;
lastTouch.x = local.x;
lastTouch.y = local.y;
} else {
// Hedefe git
ship.targetX = local.x;
ship.targetY = local.y;
}
};
game.move = function (x, y, obj) {
if (dragNode === ship) {
var local = game.toLocal({
x: x,
y: y
});
ship.targetX = local.x;
ship.targetY = local.y;
lastTouch.x = local.x;
lastTouch.y = local.y;
}
};
game.up = function (x, y, obj) {
dragNode = null;
};
// Kaynak toplama otomasyonu
function assignCollectors() {
for (var i = 0; i < collectors.length; i++) {
var c = collectors[i];
if (c.state === 'idle') {
// En yakın toplanmamış kaynağı bul
var minDist = 99999;
var target = null;
for (var j = 0; j < resourceNodes.length; j++) {
var r = resourceNodes[j];
if (!r.collected && r.amount > 0) {
var dx = r.x - c.x;
var dy = r.y - c.y;
var dist = dx * dx + dy * dy;
if (dist < minDist) {
minDist = dist;
target = r;
}
}
}
if (target) {
c.target = target;
c.state = 'moving';
}
}
}
}
// Gemi ateş etme
function shipShoot() {
if (LK.ticks - ship.lastShot > ship.shootDelay) {
var b = new Bullet();
b.x = ship.x;
b.y = ship.y - 60;
// En yakın düşmanı bul
var nearestEnemy = null;
var minDist = 999999;
for (var i = 0; i < enemies.length; i++) {
var dx = enemies[i].x - ship.x;
var dy = enemies[i].y - ship.y;
var dist = dx * dx + dy * dy;
if (dist < minDist) {
minDist = dist;
nearestEnemy = enemies[i];
}
}
if (nearestEnemy) {
// Merminin hedefini kaydet
b.targetEnemy = nearestEnemy;
var tx = nearestEnemy.x - ship.x;
var ty = nearestEnemy.y - ship.y;
var tdist = Math.sqrt(tx * tx + ty * ty);
if (tdist > 0) {
b.dirX = tx / tdist;
b.dirY = ty / tdist;
} else {
b.dirX = 0;
b.dirY = -1;
}
} else {
b.dirX = 0;
b.dirY = -1;
}
b.from = 'player';
bullets.push(b);
game.addChild(b);
ship.lastShot = LK.ticks;
}
}
// Düşman ateş etme
function enemyShoot(enemy) {
var b = new Bullet();
b.x = enemy.x;
b.y = enemy.y + 60;
b.dirX = (colony.x - enemy.x) / Math.max(1, Math.sqrt((colony.x - enemy.x) * (colony.x - enemy.x) + (colony.y - enemy.y) * (colony.y - enemy.y)));
b.dirY = (colony.y - enemy.y) / Math.max(1, Math.sqrt((colony.x - enemy.x) * (colony.x - enemy.x) + (colony.y - enemy.y) * (colony.y - enemy.y)));
b.from = 'enemy';
bullets.push(b);
game.addChild(b);
}
// Oyun güncelleme döngüsü
game.update = function () {
// Kaynak göstergesini güncelle
resourceTxt.setText('Kaynak: ' + resources);
collectorTxt.setText('Toplayıcı: ' + autoCollectors);
// Koloni can barı ve can yazısı güncelle
if (colony.hp < 0) colony.hp = 0;
if (colony.hp > colony.maxHp) colony.hp = colony.maxHp;
colonyHpBar.width = 216 * (colony.hp / colony.maxHp);
colonyHpBar.x = colony.x;
colonyHpBar.y = colony.y - 160;
colonyHpBarBg.x = colony.x;
colonyHpBarBg.y = colony.y - 160;
colonyHpTxt.setText(Math.round(colony.hp) + ' / ' + colony.maxHp);
colonyHpTxt.x = colony.x;
colonyHpTxt.y = colony.y - 160;
// Kaynaklar bitti ise yenilerini oluştur
var allCollected = true;
for (var i = 0; i < resourceNodes.length; i++) {
if (!resourceNodes[i].collected && resourceNodes[i].amount > 0) {
allCollected = false;
break;
}
}
if (allCollected) {
for (var i = 0; i < resourceNodes.length; i++) {
resourceNodes[i].destroy();
}
resourceNodes = [];
spawnResources();
}
// Kaynakları güncelle (hareket ettir)
for (var i = 0; i < resourceNodes.length; i++) {
if (typeof resourceNodes[i].update === "function") resourceNodes[i].update();
}
// Toplayıcıları görevlendir
assignCollectors();
// Collector güncelle
for (var i = 0; i < collectors.length; i++) {
collectors[i].update();
}
// Gemi güncelle
ship.update();
// Gemi düşman haritaya girince onu takip etsin, koloniye çok uzaklaşmasın
if (!ship.randomMoveTimer) ship.randomMoveTimer = 0;
ship.randomMoveTimer++;
if (ship.randomMoveTimer > 60) {
// Her 1 saniyede bir yeni hedef belirle
var nearestEnemy = null;
var minDist = 999999;
for (var i = 0; i < enemies.length; i++) {
var dx = enemies[i].x - ship.x;
var dy = enemies[i].y - ship.y;
var dist = dx * dx + dy * dy;
if (dist < minDist) {
minDist = dist;
nearestEnemy = enemies[i];
}
}
if (nearestEnemy) {
// Koloniye çok uzaklaşmasın: ship ile colony arası mesafe 700'den fazla olmasın
var dxCol = nearestEnemy.x - colony.x;
var dyCol = nearestEnemy.y - colony.y;
var distCol = Math.sqrt(dxCol * dxCol + dyCol * dyCol);
// Ship ile colony arası mesafe
var dxShipCol = ship.x - colony.x;
var dyShipCol = ship.y - colony.y;
var distShipCol = Math.sqrt(dxShipCol * dxShipCol + dyShipCol * dyShipCol);
// Ship, düşmana yaklaşacak ama colony'den 700'den fazla uzaklaşmayacak
if (distShipCol > 700) {
// Koloniye 700'den fazla uzaksa, koloniye yaklaş
ship.targetX = colony.x + (nearestEnemy.x - colony.x) * 700 / distCol;
ship.targetY = colony.y + (nearestEnemy.y - colony.y) * 700 / distCol;
} else {
// Düşmana yaklaş
ship.targetX = nearestEnemy.x;
ship.targetY = nearestEnemy.y;
}
ship.isAttacking = true;
} else {
// Rastgele bir hedef seç, ama koloniye 700'den fazla uzaklaşmasın
var angle = Math.random() * Math.PI * 2;
var dist = 300 + Math.random() * 350;
ship.targetX = colony.x + Math.cos(angle) * dist;
ship.targetY = colony.y + Math.sin(angle) * dist;
ship.isAttacking = false;
}
ship.randomMoveTimer = 0;
}
// --- Saldırı: Yakında düşman varsa ateş et ---
// Sadece 350px mesafede ateş etsin, yoksa ateş etmesin
var attackEnemy = null;
for (var i = 0; i < enemies.length; i++) {
var dx = enemies[i].x - ship.x;
var dy = enemies[i].y - ship.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist < 350) {
// Sadece 350px mesafede ateş etsin
attackEnemy = enemies[i];
break;
}
}
if (attackEnemy) {
// Düşmana doğru ateş et
if (LK.ticks - ship.lastShot > ship.shootDelay) {
var b = new Bullet();
b.x = ship.x;
b.y = ship.y - 60;
var tx = attackEnemy.x - ship.x;
var ty = attackEnemy.y - ship.y;
var tdist = Math.sqrt(tx * tx + ty * ty);
if (tdist > 0) {
b.dirX = tx / tdist;
b.dirY = ty / tdist;
} else {
b.dirX = 0;
b.dirY = -1;
}
b.from = 'player';
bullets.push(b);
game.addChild(b);
ship.lastShot = LK.ticks;
}
}
// Düşman yoksa ateş etme
// Düşman üretimi
spawnEnemyTimer++;
if (spawnEnemyTimer > 180) {
// 3 saniyede bir
spawnEnemy();
spawnEnemyTimer = 0;
}
// Düşman güncelle
for (var i = enemies.length - 1; i >= 0; i--) {
var e = enemies[i];
e.update();
// Düşman koloniye ulaştı mı?
if (e.intersects(colony)) {
// Sadece koloniye ulaştığında can azalt, bitişi hp <= 0'da kontrol et
if (typeof colony.hp !== "number") colony.hp = colony.maxHp || 50;
colony.hp -= 1;
LK.effects.flashObject(colony, 0xff0000, 400);
if (colony.hp <= 0) {
LK.effects.flashScreen(0xff0000, 800);
LK.showGameOver();
return;
}
// Düşmanı yok et
e.destroy();
enemies.splice(i, 1);
continue;
}
// Düşman sadece koloniye yaklaşınca ateş etsin
var dxCol = colony.x - e.x;
var dyCol = colony.y - e.y;
var distCol = Math.sqrt(dxCol * dxCol + dyCol * dyCol);
if (distCol < 400) {
// Sadece 400px mesafede ateş etsin
// Her düşmanın kendi ateş gecikmesi olsun
if (!e.lastShot) e.lastShot = 0;
if (!e.shootDelay) e.shootDelay = 60 + Math.floor(Math.random() * 40); // 1-1.6 sn arası
if (LK.ticks - e.lastShot > e.shootDelay) {
enemyShoot(e);
e.lastShot = LK.ticks;
}
}
}
// Mermileri güncelle
for (var i = bullets.length - 1; i >= 0; i--) {
var b = bullets[i];
b.update();
// Ekran dışıysa sil
if (b.x < -100 || b.x > 2148 || b.y < -100 || b.y > 2832) {
b.destroy();
bullets.splice(i, 1);
continue;
}
// Çarpışmalar
if (b.from === 'player') {
// Düşmanlara çarpma
for (var j = enemies.length - 1; j >= 0; j--) {
var e = enemies[j];
if (b.intersects(e)) {
// Her mermi sadece 1 can götürsün
if (typeof e.hp !== "number") e.hp = 10;
e.hp -= typeof b.attackPower === "number" ? b.attackPower : 1; // Her mermi attackPower kadar can götürür
if (e.hp <= 0) {
e.destroy();
enemies.splice(j, 1);
// Kaynak ödülü
resources += 5;
}
b.destroy();
bullets.splice(i, 1);
break;
}
}
} else if (b.from === 'enemy') {
// Koloniye çarpma
if (b.intersects(colony)) {
// Her mermi sadece 1 can götürsün
if (typeof colony.hp !== "number") colony.hp = colony.maxHp || 50;
colony.hp -= typeof b.attackPower === "number" ? b.attackPower : 1; // Her mermi attackPower kadar can götürür
LK.effects.flashObject(colony, 0xff0000, 400);
b.destroy();
bullets.splice(i, 1);
// Oyun bitişi sadece canı sıfır olunca tetiklensin
if (colony.hp <= 0) {
LK.effects.flashScreen(0xff0000, 800);
LK.showGameOver();
return;
}
continue;
}
// Gemiye çarpma
if (b.intersects(ship)) {
LK.effects.flashObject(ship, 0xff0000, 500);
b.destroy();
bullets.splice(i, 1);
// Her mermi sadece 1 can götürsün
if (!ship.hp) ship.hp = 6;
ship.hp -= typeof b.attackPower === "number" ? b.attackPower : 1; // Her mermi attackPower kadar can götürür
if (ship.hp <= 0) {
LK.effects.flashScreen(0xff0000, 800);
LK.showGameOver();
return;
}
}
}
}
// Otomasyon yükseltme: 50 kaynak ile yeni toplayıcı
if (resources >= 50 && autoCollectors < 3) {
resources -= 50;
autoCollectors++;
createCollectors(autoCollectors);
}
// Kazanma koşulu: 200 kaynak
if (resources >= 200) {
LK.showYouWin();
return;
}
}; ===================================================================
--- original.js
+++ change.js
@@ -159,8 +159,61 @@
anchorY: 0.5
});
self.amount = 10 + Math.floor(Math.random() * 10); // 10-19 arası kaynak
self.collected = false;
+ // --- HAREKET EKLE ---
+ // Rastgele bir giriş kenarı seç (sol, sağ, üst, alt)
+ var edge = Math.floor(Math.random() * 4);
+ var startX, startY, endX, endY;
+ var margin = 120;
+ if (edge === 0) {
+ // sol kenar
+ startX = -margin;
+ startY = 400 + Math.random() * (2732 - 800);
+ endX = 2048 + margin;
+ endY = startY + (Math.random() - 0.5) * 400;
+ } else if (edge === 1) {
+ // sağ kenar
+ startX = 2048 + margin;
+ startY = 400 + Math.random() * (2732 - 800);
+ endX = -margin;
+ endY = startY + (Math.random() - 0.5) * 400;
+ } else if (edge === 2) {
+ // üst kenar
+ startX = Math.random() * 2048;
+ startY = -margin;
+ endX = startX + (Math.random() - 0.5) * 400;
+ endY = 2732 + margin;
+ } else {
+ // alt kenar
+ startX = Math.random() * 2048;
+ startY = 2732 + margin;
+ endX = startX + (Math.random() - 0.5) * 400;
+ endY = -margin;
+ }
+ self.x = startX;
+ self.y = startY;
+ self._moveStartX = startX;
+ self._moveStartY = startY;
+ self._moveEndX = endX;
+ self._moveEndY = endY;
+ self._moveProgress = 0;
+ self._moveSpeed = 0.002 + Math.random() * 0.001; // Çok yavaş hareket (0.002 ~ 0.003 arası)
+ self.visible = true;
+ self.update = function () {
+ if (self.collected) return;
+ // Hareket ilerlemesini güncelle
+ self._moveProgress += self._moveSpeed;
+ if (self._moveProgress > 1) {
+ // Haritadan çıktı, kaybolsun
+ self.collected = true;
+ self.visible = false;
+ return;
+ }
+ // Lineer hareket
+ self.x = self._moveStartX + (self._moveEndX - self._moveStartX) * self._moveProgress;
+ self.y = self._moveStartY + (self._moveEndY - self._moveStartY) * self._moveProgress;
+ };
return self;
});
// Oyuncu gemisi
var Ship = Container.expand(function () {
@@ -460,8 +513,12 @@
}
resourceNodes = [];
spawnResources();
}
+ // Kaynakları güncelle (hareket ettir)
+ for (var i = 0; i < resourceNodes.length; i++) {
+ if (typeof resourceNodes[i].update === "function") resourceNodes[i].update();
+ }
// Toplayıcıları görevlendir
assignCollectors();
// Collector güncelle
for (var i = 0; i < collectors.length; i++) {
Fullscreen modern App Store landscape banner, 16:9, high definition, for a game titled "Galactic Colony Command" and with the description "Kendi uzay kolonini kur, kaynakları topla, otomasyon sistemleri geliştir ve diğer kolonilerle stratejik savaşlara girerek galaksinin hakimi ol!". No text on banner!
Fullscreen modern App Store landscape banner, 16:9, high definition, for a game titled "Uzay İstasyonu" and with the description "Kendi uzay kolonini kur, kaynakları topla, otomasyon sistemleri geliştir ve diğer kolonilerle stratejik savaşlara girerek galaksinin hakimi ol!". No text on banner!, Uzay istasyonu
Fullscreen modern App Store landscape banner, 16:9, high definition, for a game titled "Gezegen" and with the description "Kendi uzay kolonini kur, kaynakları topla, otomasyon sistemleri geliştir ve diğer kolonilerle stratejik savaşlara girerek galaksinin hakimi ol!". No text on banner!, Uzay istasyonu, Gezegen
Astreroit cobalt. In-Game asset. 2d. High contrast. No shadows
asteroid gold. In-Game asset. 2d. High contrast. No shadows
asteroid helium. In-Game asset. 2d. High contrast. No shadows
Asteroid Iron - Yazısız. In-Game asset. 2d. High contrast. No shadows
asteroid manganese - yazısız. In-Game asset. 2d. High contrast. No shadows
Asteroid Nikel - Yazısız. In-Game asset. 2d. High contrast. No shadows
Cobalt cevheri. In-Game asset. 2d. High contrast. No shadows
Platinum Cevheri - Yazısız. In-Game asset. 2d. High contrast. No shadows
Ateş - Patlama. In-Game asset. 2d. High contrast. No shadows
Ateş. In-Game asset. 2d. High contrast. No shadows
Maden toplayıcı uzay mekiği, Gerçekçi. In-Game asset. High contrast. No shadows
Uzay savaş gemisi - Gerçekçi - Yazısız. In-Game asset. High contrast. No shadows
Altın Cevheri - Yazısız. In-Game asset. 2d. High contrast. No shadows
Helium cevheri - yazısız. In-Game asset. 2d. High contrast. No shadows
Iron cevheri - yazısız. In-Game asset. 2d. High contrast. No shadows
Manganese cevheri - yazısız. In-Game asset. 2d. High contrast. No shadows
HP BAR - yazısız. In-Game asset. 2d. High contrast. No shadows
Fullscreen modern App Store landscape banner, 16:9, high definition, for a game titled "Galactic Colony Command" and with the description "Kendi uzay kolonini kur, kaynakları topla, otomasyon sistemleri geliştir ve diğer kolonilerle stratejik savaşlara girerek galaksinin hakimi ol!". No text on banner!
uzay savaş gemisi. In-Game asset. 2d. High contrast. No shadows
uzay savaş gemisi - gerçekçi - yazısız. In-Game asset. High contrast. No shadows
uzay savaş gemisi - gerçekçi - yazısız. In-Game asset. High contrast. No shadows
Uzay Savunma Kulesi - Yazısız - Gerçekçi. In-Game asset. High contrast. No shadows
Uzay Savunma Kulesi - Yazısız - Gerçekçi. In-Game asset. High contrast. No shadows
Uzay Savunma Kulesi - Yazısız - Gerçekçi. In-Game asset. High contrast. No shadows
Uzay Savunma Kulesi - Yazısız - Gerçekçi. In-Game asset. High contrast. No shadows
Uzay savaş istasyonu - Gerçekçi. In-Game asset. High contrast. No shadows
Uzay savaş istasyonu - Gerçekçi. In-Game asset. High contrast. No shadows
Uzay savaş istasyonu - Gerçekçi. In-Game asset. High contrast. No shadows
Hoparlör. In-Game asset. 2d. High contrast. No shadows