User prompt
Çözümü uygula
User prompt
Mermiler koloninin canını sadece 1 götürsün. Mermi saldırı gücü 1 can sayısı olsun.
User prompt
Her mermi 1 can götürsün.
User prompt
Düşman 1 mermide oyun bitiyor. Bunu engelle canı bitmeden oyun bitmesin
User prompt
Koloni 50 normal mermilik canı olsun ve can barı görünsün
User prompt
Düşman gemisi haritaya girince gemimiz onu takip etsin ve yaklaşsın saldırmaya başlasın. koloniyi korusun çok uzaklaşmasın. düşman ve dost gemi hızlarını %100 yavaşlat.
User prompt
Düşman gemisi istasyona yaklaşmadan mermi sıkmasın ve bizim gemimiz düşmana yaklaşmadan mermi sıkmasın. mermiler çok az can götürsün. Savaş uzun sürsün
User prompt
gemimiz düşman gemisi haritaya girince mermiyi onu kovalasın ve mermiyi ona doğru sıksın
User prompt
Gemimiz etrafında dolaşsın düşman gemisi yaklaşınca düşman ile savaşsın. Düşman gemisi yaklaşınca ateş etsin
User prompt
Bizim gemimiz rastgele dolaşsın etrafta düşman olunca saldırsın
Code edit (1 edits merged)
Please save this source code
User prompt
Galactic Colony Command
Initial prompt
Oyuncular, uzak bir gezegende kendi uzay kolonilerini kurar ve yönetir. Hammadde toplama, otomasyon sistemleri kurma ve koloninin büyümesini sağlama ana hedeflerdir. Kaynakları optimize ederek yeni teknolojiler geliştirir, savunma ve saldırı gemileri üretirler. Diğer kolonilerle stratejik savaşlar yaparak kaynak üstünlüğü ve galaktik hakimiyet için mücadele ederler. Oyun, kaynak yönetimi, otomasyon ve uzay savaşlarını birleştirerek derin ve stratejik bir deneyim sunar.
/****
* 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.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
});
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
});
self.speed = 7 + Math.random() * 4;
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);
var res = self.attachAsset('resource', {
anchorX: 0.5,
anchorY: 0.5
});
self.amount = 10 + Math.floor(Math.random() * 10); // 10-19 arası kaynak
self.collected = false;
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
});
self.speed = 22;
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);
// Kaynak göstergesi
var resourceTxt = new Text2('Kaynak: 0', {
size: 90,
fill: "#fff"
});
resourceTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(resourceTxt);
// Otomasyon göstergesi
var collectorTxt = new Text2('Toplayıcı: 1', {
size: 60,
fill: 0xB8FFB8
});
collectorTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(collectorTxt);
collectorTxt.y = 110;
// 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);
// 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();
}
// 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 rastgele dolaşsın ve düşman varsa saldırsın
// --- Otomatik hareket için hedef belirleme ---
if (!ship.randomMoveTimer) ship.randomMoveTimer = 0;
ship.randomMoveTimer++;
if (ship.randomMoveTimer > 60) {
// Her 1 saniyede bir yeni hedef belirle
// Eğer yakınında düşman yoksa rastgele bir hedef seç
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 && Math.sqrt(minDist) < 600) {
// Düşman yakınsa ona yönel
ship.targetX = nearestEnemy.x;
ship.targetY = nearestEnemy.y;
ship.isAttacking = true;
} else {
// Rastgele bir hedef seç
ship.targetX = 200 + Math.random() * (2048 - 400);
ship.targetY = 400 + Math.random() * (2732 - 800);
ship.isAttacking = false;
}
ship.randomMoveTimer = 0;
}
// --- Saldırı: Yakında düşman varsa ateş et ---
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 < 500) {
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;
}
} else {
// Düşman yoksa yukarı ateş et (mevcut shipShoot fonksiyonu)
shipShoot();
}
// 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)) {
LK.effects.flashScreen(0xff0000, 800);
LK.showGameOver();
return;
}
// Düşman yakınsa oyuncu gemisine ateş etsin
var dx = ship.x - e.x;
var dy = ship.y - e.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist < 600) {
// 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;
}
} else {
// Düşman uzaktaysa arada sırada rastgele ateş etsin
if (Math.random() < 0.01) {
enemyShoot(e);
}
}
}
// 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)) {
e.hp--;
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)) {
LK.effects.flashScreen(0xff0000, 800);
LK.showGameOver();
return;
}
// Gemiye çarpma
if (b.intersects(ship)) {
LK.effects.flashObject(ship, 0xff0000, 500);
b.destroy();
bullets.splice(i, 1);
// Gemi 2 kez vurulursa oyun biter
if (!ship.hit) ship.hit = 0;
ship.hit++;
if (ship.hit >= 2) {
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
@@ -17,9 +17,20 @@
self.speed = 40;
self.dirX = 0;
self.dirY = -1;
self.from = 'player'; // veya 'enemy'
+ self.targetEnemy = null; // Eğer hedef varsa
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;
@@ -302,10 +313,37 @@
if (LK.ticks - ship.lastShot > ship.shootDelay) {
var b = new Bullet();
b.x = ship.x;
b.y = ship.y - 60;
- b.dirX = 0;
- b.dirY = -1;
+ // 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;
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