User prompt
oyunun arka planını uzay temasını yansıtan gerçekçi bir platform ile değiştir
User prompt
boss atılan mermilerden kaçsın
User prompt
bossfire aynı anda birkaç kez ateşlensin ve yanıcı olsun
User prompt
bossfire ekranın soluna doğru hareket etsin
User prompt
bossfire ve bossmermi aynı anda ateşlenmesin
User prompt
boss attığı mermiler sadece ekranın soluna doğru hareket etsin
User prompt
10 düşman yendikten sonra yeni düşman gelmesin
User prompt
boss 8 saniyede bir bossfire ateşlesin
User prompt
mermi hızını azalt
User prompt
mermiler bossun farklı ateaşleme slotlarından çıksın ve dağınık olmasın
User prompt
boss bütün ateşleme slotlarını kullanabilsin ve aynı anda birden fazla mermi gönderebilsin
User prompt
boss bossmermi kullansın
User prompt
boss sağlık barı sağ üstte olsun
User prompt
bolumsonucanavar canı 40 olsun
User prompt
bolumsonucanavar canı 20 olsun
User prompt
bolumsonucanavar can barı sağda görünsün
User prompt
bolumsonucanavar hasar alsın ve hasar versin
User prompt
10 düşman yendikten sonra sadece bolumsonucanavar ekranda kalsın
User prompt
bolumsonucanavar ateş etsin
User prompt
10 düşman yendikten sonra yeni düşman çıkmasın sadece ekranda bolumsonucanavar görünsün
User prompt
bolumsonucanavar göründüğünde düşman nesneler kaybolsun
User prompt
bolumsonucanavar çıktığında diğer nesneler kaybolsun
User prompt
bolumsonucanavar ekranın ortasına kadar her yönde hareket edebilsin
User prompt
bolumsonucanavar sağda birden yanıp sönrek belirsin ve aşağı yukarı hareket etsin
User prompt
bolumsonucanavar ekranın solunda görünsün
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Asteroid - SAĞDAN SOLA var Asteroid = Container.expand(function () { var self = Container.call(this); var width = 120 + Math.random() * 60; var height = 120 + Math.random() * 60; var objAsset = self.attachAsset('spaceObject', { anchorX: 0.5, anchorY: 0.5 }); objAsset.width = width; objAsset.height = height; objAsset.color = 0x888888; self.radius = width / 2; // Always spawn at right edge, random Y, move left self.x = 2048 + width; self.y = 200 + Math.random() * (2732 - 400); // Speed will be set on spawn self.vx = -8; self.vy = (Math.random() - 0.5) * 2; self.update = function () { self.x += self.vx; self.y += self.vy; }; return self; }); // Mermi (Bullet) - SAĞA DOĞRU var Bullet = Container.expand(function () { var self = Container.call(this); var bulletAsset = self.attachAsset('bullet', { anchorX: 0.5, anchorY: 0.5 }); // Asset: ellipse, width: 32, height: 32, color: 0xffe066 bulletAsset.width = 32; bulletAsset.height = 32; bulletAsset.color = 0xffe066; self.speed = 32; // Rightwards self.update = function () { self.x += self.speed; }; return self; }); // EnemyBullet - DÜŞMAN MERMİSİ (sola doğru) var EnemyBullet = Container.expand(function () { var self = Container.call(this); var bulletAsset = self.attachAsset('dusmanmermi', { anchorX: 0.5, anchorY: 0.5 }); bulletAsset.width = 32; bulletAsset.height = 32; bulletAsset.color = 0xff4444; self.speed = -18; // Sola doğru hızlı self.update = function () { self.x += self.speed; }; return self; }); // EnemyShip - SAĞDAN SOLA var EnemyShip = Container.expand(function () { var self = Container.call(this); var width = 100; var height = 100; var objAsset = self.attachAsset('uzayNesnesi2', { anchorX: 0.5, anchorY: 0.5 }); objAsset.width = width; objAsset.height = height; objAsset.color = 0xff4444; self.radius = width / 2; self.x = 2048 + width; self.y = 200 + Math.random() * (2732 - 400); // Speed will be set on spawn self.vx = -10; self.vy = (Math.random() - 0.5) * 3; self.update = function () { self.x += self.vx; self.y += self.vy; }; return self; }); // MeteorStone - SAĞDAN SOLA, rastgele gelen düşman türü var MeteorStone = Container.expand(function () { var self = Container.call(this); var width = 120 + Math.random() * 60; var height = 120 + Math.random() * 60; var objAsset = self.attachAsset('meteorstone', { anchorX: 0.5, anchorY: 0.5 }); objAsset.width = width; objAsset.height = height; self.radius = width / 2; // Always spawn at right edge, random Y, move left self.x = 2048 + width; self.y = 200 + Math.random() * (2732 - 400); // Hız: asteroidlerden biraz daha hızlı olabilir var baseSpeed = 3 + Math.random() * 2; self.vx = -baseSpeed; self.vy = (Math.random() - 0.5) * 2.5; self.update = function () { self.x += self.vx; self.y += self.vy; }; return self; }); // Uzay Aracı (Player Ship) var PlayerShip = Container.expand(function () { var self = Container.call(this); // Ship asset: blue ellipse var shipAsset = self.attachAsset('playerShip', { anchorX: 0.5, anchorY: 0.5 }); // Asset will be created as: ellipse, width: 140, height: 100, color: 0x3a9cff shipAsset.width = 140; shipAsset.height = 100; shipAsset.color = 0x3a9cff; self.radius = 70; // For collision return self; }); // Uzay Cismi (Asteroid/Enemy) - SAĞDAN SOLA var SpaceObject = Container.expand(function () { var self = Container.call(this); // Randomly choose asteroid or enemy var isAsteroid = Math.random() < 0.7; var color = isAsteroid ? 0x888888 : 0xff4444; var width = isAsteroid ? 120 + Math.random() * 60 : 100; var height = isAsteroid ? 120 + Math.random() * 60 : 100; var objAsset = self.attachAsset('spaceObject', { anchorX: 0.5, anchorY: 0.5 }); objAsset.width = width; objAsset.height = height; objAsset.color = color; self.radius = width / 2; // Always spawn at right edge, random Y, move left self.x = 2048 + width; self.y = 200 + Math.random() * (2732 - 400); var speed = 6 + Math.random() * 4; self.vx = -speed; self.vy = (Math.random() - 0.5) * 2; // hafif yukarı/aşağı varyasyon self.update = function () { self.x += self.vx; self.y += self.vy; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000010 }); /**** * Game Code ****/ // Saturn gezegeni arka plan objesi // Saturn sadece bir defa görünsün var saturnBg = null; var saturnShown = false; function showSaturnOnce() { if (saturnShown) return; saturnBg = LK.getAsset('saturn', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 / 2, width: 700, height: 700 }); saturnBg.alpha = 0.18; // Hafif transparan, arka plan gibi game.addChild(saturnBg); // EN ARKA PLANDA OLACAK ŞEKİLDE EN ÖNCE EKLENİR saturnShown = true; } ; // Moonstone spawn ayarları var moonstones = []; // birden fazla aytaşı için dizi var moonstoneSpawnCooldown = 600; // moonstone 10 saniyede bir spawn olsun (600 tick ~10 saniye) var lastMoonstoneSpawnTick = -10000; // ilk başta hemen spawn olmasın // Birden fazla moonstone için hareket ve çarpışma kontrolü for (var m = moonstones.length - 1; m >= 0; m--) { var moonstone = moonstones[m]; moonstone.moonstoneMoveTick += 1; // X: Sola doğru sabit hızda hareket moonstone.x += moonstone.moonstoneVX; // Y: Orijinal konumundan, sinüs dalgası ile yukarı aşağı hareket moonstone.y = moonstone.baseY + Math.cos(moonstone.moonstoneMoveTick / (48 / moonstone.moonstoneMoveSpeed)) * moonstone.moonstoneAmpY; // Çarpışma kontrolü var moonstoneIntersect = isCircleHit(playerShip, moonstone); if (!moonstone.lastWasIntersecting && moonstoneIntersect) { // Moonstone alındı: skor +5, can +5, kısa animasyon, kaybolsun score += 5; scoreTxt.setText(score); updateDifficulty(); // Canı 5 artır, maksimumu aşmasın playerHealth = Math.min(playerHealth + 5, playerMaxHealth); updateCanBar(); // Moonstone animasyon: hızlıca büyüyüp kaybolsun (function (moonstoneToDestroy, idx) { tween(moonstoneToDestroy, { scaleX: 2.2, scaleY: 2.2, alpha: 0 }, { duration: 350, onFinish: function onFinish() { if (moonstoneToDestroy) { moonstoneToDestroy.destroy(); // Diziden çıkar var index = moonstones.indexOf(moonstoneToDestroy); if (index !== -1) moonstones.splice(index, 1); } } }); })(moonstone, m); lastMoonstoneSpawnTick = LK.ticks; } moonstone.lastWasIntersecting = moonstoneIntersect; // Ekran dışına çıktıysa yok et if (moonstone.x < -200 || moonstone.y < -200 || moonstone.y > 2732 + 200) { moonstone.destroy(); moonstones.splice(m, 1); lastMoonstoneSpawnTick = LK.ticks; } } showSaturnOnce(); // Gift spawn ayarları var giftBg = null; var giftSpawnCooldown = 900; // gift nadiren spawn olsun (900 tick ~15 saniye) var lastGiftSpawnTick = -10000; // ilk başta hemen spawn olmasın function spawnGift() { if (giftBg) return; // gift zaten varsa tekrar oluşturma giftBg = LK.getAsset('gift', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2 + 600, y: 2732 / 2 - 400, width: 120, height: 120 }); giftBg.alpha = 0.95; game.addChild(giftBg); lastGiftSpawnTick = LK.ticks; } // Moonstone animasyonlu nesnesini spawn et function spawnMoonstone() { // Her çağrıda yeni bir moonstone oluştur var moonstone = LK.getAsset('moonstone', { anchorX: 0.5, anchorY: 0.5, x: 2048 + 70, y: 400 + Math.random() * (2732 - 800), width: 70, height: 70 }); moonstone.alpha = 0.92; game.addChild(moonstone); // Animasyon: hafifçe büyüyüp küçülme efekti (pulse) tween(moonstone, { scaleX: 1.18, scaleY: 1.18 }, { duration: 500, yoyo: true, repeat: 3, onFinish: function onFinish() { tween(moonstone, { scaleX: 1, scaleY: 1 }, { duration: 200 }); } }); moonstone.baseX = moonstone.x; moonstone.baseY = moonstone.y; moonstone.moonstoneMoveTick = Math.random() * 1000; moonstone.moonstoneMoveSpeed = 1.2 + Math.random() * 1.2; moonstone.moonstoneAmpY = 80 + Math.random() * 60; moonstone.moonstoneVX = -(2.5 + Math.random() * 2.5); moonstone.lastWasIntersecting = false; moonstones.push(moonstone); lastMoonstoneSpawnTick = LK.ticks; } // Oyun değişkenleri var scrollX = 0; // Ekranın sağa doğru ilerlemesini simüle eden global değişken var scrollSpeed = 8; // px/frame, sağa doğru ilerleme hızı (başlangıç değeri) var playerShip = new PlayerShip(); // Oyuncu gemisi sol alt köşeden sağa hareket edecek şekilde konumlandırılır playerShip.x = 350; playerShip.y = 2732 / 2; game.addChild(playerShip); var playerMaxHealth = 10; var playerHealth = playerMaxHealth; var bullets = []; var spaceObjects = []; var canShoot = true; var shootInterval = 250; // ms var lastShootTick = 0; var score = 0; var difficulty = 1; var spawnInterval = 90; // ticks var lastSpawnTick = 0; // Bölüm bitişi için toplam düşman sayacı ve kontrol değişkeni var totalEnemiesSpawned = 0; var levelFinished = false; // Animated Health Bar (Can Bar) var canBarWidth = 400; var canBarHeight = 40; var canBarBg = new Container(); var canBarBgRect = canBarBg.attachAsset('can', { anchorX: 0, anchorY: 0.5, x: 0, y: canBarHeight / 2, width: canBarWidth, height: canBarHeight }); canBarBgRect.alpha = 0.25; var canBarFg = new Container(); var canBarFgRect = canBarFg.attachAsset('can', { anchorX: 0, anchorY: 0.5, x: 0, y: canBarHeight / 2, width: canBarWidth, height: canBarHeight }); canBarFgRect.alpha = 1; // Health bar container for easy positioning var canBarContainer = new Container(); canBarContainer.addChild(canBarBg); canBarContainer.addChild(canBarFg); // Position: top left, but not overlapping menu (leave 100px left and top margin) canBarContainer.x = 100 + 20; canBarContainer.y = 100 + 20; // Add to game (not GUI, so it scales with game) game.addChild(canBarContainer); // Skor gösterimi var scoreTxt = new Text2('0', { size: 120, fill: "#fff" }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Süre göstergesi (3 dakika = 180 saniye) var gameDuration = 180; // saniye var timeLeft = gameDuration; var timerTxt = new Text2('03:00', { size: 100, fill: "#fff" }); timerTxt.anchor.set(1, 0); // Anchor right edge LK.gui.topRight.addChild(timerTxt); // Add to right side of GUI // Timer'ı güncelleyen fonksiyon function updateTimerDisplay() { var min = Math.floor(timeLeft / 60); var sec = Math.floor(timeLeft % 60); var minStr = min < 10 ? "0" + min : "" + min; var secStr = sec < 10 ? "0" + sec : "" + sec; timerTxt.setText(minStr + ":" + secStr); } updateTimerDisplay(); // Animate health bar width and color function updateCanBar() { var targetWidth = canBarWidth * Math.max(0, playerHealth) / playerMaxHealth; // Animate width using tween tween(canBarFgRect, { width: targetWidth }, { duration: 300 }); // Calculate color: green (full) to red (empty) // 0x00FF00 (green) to 0xFF0000 (red) var healthRatio = Math.max(0, Math.min(1, playerHealth / playerMaxHealth)); var r = Math.round(0xFF * (1 - healthRatio)); var g = Math.round(0xFF * healthRatio); var b = 0; var color = r << 16 | g << 8 | b; // Animate color using tween tween(canBarFgRect, { color: color }, { duration: 300 }); } updateCanBar(); // Dokunma/sürükleme ile gemi hareketi var dragging = false; function handleMove(x, y, obj) { if (dragging) { // Sınırları aşmasın - tüm ekranda serbest hareket var minX = playerShip.width / 2 + 40; var maxX = 2048 - playerShip.width / 2 - 40; var minY = playerShip.height / 2 + 40; var maxY = 2732 - playerShip.height / 2 - 40; // Sadece sürükleme sırasında, gemi mouse/touch ile birlikte hareket eder playerShip.x = Math.max(minX, Math.min(maxX, x)); playerShip.y = Math.max(minY, Math.min(maxY, y)); } } game.move = handleMove; game.down = function (x, y, obj) { // Sadece geminin üstüne tıklanırsa sürükleme başlasın var dx = x - playerShip.x; var dy = y - playerShip.y; var r = playerShip.radius || (playerShip.width ? playerShip.width / 2 : 70); if (dx * dx + dy * dy <= r * r) { dragging = true; handleMove(x, y, obj); } else { dragging = false; } }; game.up = function (x, y, obj) { dragging = false; }; // Otomatik ateş (her shootInterval ms'de bir) function tryShoot() { if (!canShoot) return; var bullet = new Bullet(); // Mermi geminin sağ tarafından ateşlensin bullet.x = playerShip.x + playerShip.width / 2 + 10; bullet.y = playerShip.y; bullets.push(bullet); game.addChild(bullet); canShoot = false; LK.setTimeout(function () { canShoot = true; }, shootInterval); } // Uzay cismi oluştur function spawnSpaceObject() { // 0: uzayNesnesi2 (enemy), 1: spaceObject (asteroid), 2: meteorstone (yeni düşman) var rand = Math.random(); var obj; if (rand < 0.4) { // uzayNesnesi2 (enemy ship) obj = new Container(); var width = 100; var height = 100; var objAsset = obj.attachAsset('uzayNesnesi2', { anchorX: 0.5, anchorY: 0.5 }); objAsset.width = width; objAsset.height = height; objAsset.color = 0xff4444; obj.radius = width / 2; obj.x = 2048 + width; obj.y = 200 + Math.random() * (2732 - 400); // Düşman hızı: kolayda yavaş, zorda hızlı // 1. zorlukta ~3, 10. zorlukta ~9 var baseSpeed = 3 + (difficulty - 1) * 0.7; var speed = baseSpeed + Math.random() * (1.5 + difficulty * 0.2); obj.vx = -speed; obj.vy = (Math.random() - 0.5) * (2.5 + difficulty * 0.2); // Enemy bullet fire timer obj.enemyBulletCooldown = 40 + Math.floor(Math.random() * 40); // ticks obj.lastEnemyBulletTick = LK.ticks; obj.update = function () { obj.x += obj.vx; obj.y += obj.vy; // Ateş etme (her cooldown süresi dolduğunda) if (LK.ticks - obj.lastEnemyBulletTick > obj.enemyBulletCooldown) { var eb = new EnemyBullet(); eb.x = obj.x - 60; eb.y = obj.y; if (!game.enemyBullets) game.enemyBullets = []; game.enemyBullets.push(eb); game.addChild(eb); obj.lastEnemyBulletTick = LK.ticks; obj.enemyBulletCooldown = 40 + Math.floor(Math.random() * 40); } }; } else if (rand < 0.8) { // spaceObject (asteroid) obj = new Container(); var width = 120 + Math.random() * 60; var height = 120 + Math.random() * 60; var objAsset = obj.attachAsset('spaceObject', { anchorX: 0.5, anchorY: 0.5 }); objAsset.width = width; objAsset.height = height; objAsset.color = 0x888888; obj.radius = width / 2; obj.x = 2048 + width; obj.y = 200 + Math.random() * (2732 - 400); // Asteroid hızı: kolayda yavaş, zorda hızlı // 1. zorlukta ~2.5, 10. zorlukta ~8 var baseSpeed = 2.5 + (difficulty - 1) * 0.6; var speed = baseSpeed + Math.random() * (1.5 + difficulty * 0.2); obj.vx = -speed; obj.vy = (Math.random() - 0.5) * (2 + difficulty * 0.2); obj.update = function () { obj.x += obj.vx; obj.y += obj.vy; }; } else { // meteorstone (yeni düşman) // MeteorStone: kolayda yavaş, zorda hızlı obj = new MeteorStone(); if (obj && obj.vx !== undefined) { // 1. zorlukta ~-3, 10. zorlukta ~-8 var meteorBaseSpeed = 3 + (difficulty - 1) * 0.6; obj.vx = -meteorBaseSpeed - Math.random() * (1.5 + difficulty * 0.2); obj.vy = (Math.random() - 0.5) * (2.5 + difficulty * 0.2); } } spaceObjects.push(obj); game.addChild(obj); // Düşman sayısını artır ve 10'a ulaştıysa win kontrolü totalEnemiesSpawned++; // (Kazanan kontrolü kaldırıldı) } // Çarpışma kontrolü (daire-çarpışma) function isCircleHit(a, b) { var dx = a.x - b.x; var dy = a.y - b.y; var dist = Math.sqrt(dx * dx + dy * dy); var r1 = a.radius || (a.width ? a.width / 2 : 0); var r2 = b.radius || (b.width ? b.width / 2 : 0); return dist < r1 + r2 - 10; } // Zorluk arttırma ve oyun hızını kademeli olarak artır function updateDifficulty() { // Zorluk: 1-10 arası, her 10 puanda bir artar, maksimum 10 var newDifficulty = 1 + Math.floor(score / 10); if (newDifficulty > 10) newDifficulty = 10; if (newDifficulty > difficulty) { difficulty = newDifficulty; } // spawnInterval: Kolayda yavaş (120), zorda hızlı (30) // 1. zorlukta 120, 10. zorlukta 30 spawnInterval = Math.round(120 - (difficulty - 1) * 10); if (spawnInterval < 30) spawnInterval = 30; } // Oyun döngüsü game.update = function () { // Süreyi azalt (her frame ~1/60 saniye) if (!levelFinished && timeLeft > 0) { timeLeft -= 1 / 60; if (timeLeft < 0) timeLeft = 0; updateTimerDisplay(); } // 10 düşman spawn olduysa ve can > 0 ve süre > 0 ise win // (Kazanan kontrolü kaldırıldı) // Planets removed // Otomatik ateş if (LK.ticks - lastShootTick > Math.floor(shootInterval / 16)) { tryShoot(); lastShootTick = LK.ticks; } // Uzay cismi oluşturma if (LK.ticks - lastSpawnTick > spawnInterval) { spawnSpaceObject(); lastSpawnTick = LK.ticks; } // Mermileri güncelle for (var i = bullets.length - 1; i >= 0; i--) { var b = bullets[i]; b.update(); // ScrollX uygula (tüm objeler sağa doğru ilerliyor gibi) b.x -= scrollSpeed; // Ekran dışıysa sil if (b.x > 2048 + 50) { b.destroy(); bullets.splice(i, 1); } } // Uzay cisimlerini güncelle for (var j = spaceObjects.length - 1; j >= 0; j--) { var obj = spaceObjects[j]; obj.update(); // ScrollX uygula obj.x -= scrollSpeed; // Ekran dışıysa sil if (obj.x < -200 || obj.y < -200 || obj.y > 2732 + 200) { obj.destroy(); spaceObjects.splice(j, 1); continue; } // Gemiye çarptı mı? if (isCircleHit(obj, playerShip)) { // Patlama efekti (patlamaeffekt görseli ile) oyuncu gemisinin üstünde göster var explosion = LK.getAsset('patlamaeffekt', { anchorX: 0.5, anchorY: 0.5, x: playerShip.x, y: playerShip.y, width: playerShip.width || 140, height: playerShip.height || 100 }); game.addChild(explosion); tween(explosion, { alpha: 0, scaleX: 2, scaleY: 2 }, { duration: 400, onFinish: function onFinish() { explosion.destroy(); } }); // Farklı düşman türlerine göre hasar uygula var damage = 1; if (obj instanceof MeteorStone) { damage = 3; } else if (obj.attachAsset && obj.attachAsset('spaceObject', { anchorX: 0.5, anchorY: 0.5 })) { // SpaceObject asteroid veya enemy, asteroid ise 1 birim damage = 1; } else if (obj.attachAsset && obj.attachAsset('uzayNesnesi2', { anchorX: 0.5, anchorY: 0.5 })) { // EnemyShip ise 1 birim (uzayNesnesi2) damage = 1; } playerHealth -= damage; updateCanBar(); if (playerHealth <= 0) { LK.showGameOver(); return; } obj.destroy(); spaceObjects.splice(j, 1); continue; } // Mermiyle çarpışma var _loop = function _loop() { b = bullets[k]; if (isCircleHit(obj, b)) { // Patlama efekti (patlamaeffekt görseli ile) explosion = LK.getAsset('patlamaeffekt', { anchorX: 0.5, anchorY: 0.5, x: obj.x, y: obj.y, width: obj.width || 100, height: obj.height || 100 }); game.addChild(explosion); tween(explosion, { alpha: 0, scaleX: 2, scaleY: 2 }, { duration: 400, onFinish: function onFinish() { explosion.destroy(); } }); obj.destroy(); spaceObjects.splice(j, 1); b.destroy(); bullets.splice(k, 1); // Skor: meteorstone=2, spaceObject=1, enemy ship=3 scoreToAdd = 1; if (obj instanceof MeteorStone) { scoreToAdd = 2; } else if (obj.attachAsset && obj.attachAsset('uzayNesnesi2', { anchorX: 0.5, anchorY: 0.5 })) { scoreToAdd = 3; } score += scoreToAdd; scoreTxt.setText(score); updateDifficulty(); // Bölüm sonu: 10 düşman öldürüldüyse bitir if (!levelFinished) { if (typeof game.enemiesKilled === "undefined") game.enemiesKilled = 0; game.enemiesKilled++; if (game.enemiesKilled >= 10) { levelFinished = true; // Bölüm sonu canavarı görselini göster if (typeof game.bossImageShown === "undefined" || !game.bossImageShown) { // Sadece düşman nesnelerini (spaceObjects) yok et for (var j = spaceObjects.length - 1; j >= 0; j--) { if (spaceObjects[j]) { spaceObjects[j].destroy(); } } spaceObjects = []; // Boss animasyonu ve eklenmesi var _flashBoss = function flashBoss() { if (!game.bossImg) return; tween(game.bossImg, { alpha: 1 }, { duration: 120, onFinish: function onFinish() { tween(game.bossImg, { alpha: 0 }, { duration: 120, onFinish: function onFinish() { flashCount++; if (flashCount < 3) { _flashBoss(); } else { // Sonunda kalıcı olarak görünür olsun tween(game.bossImg, { alpha: 1 }, { duration: 120 }); } } }); } }); }; // Sağda, birden yanıp sönerek beliren ve aşağı yukarı hareket eden boss bossImg = LK.getAsset('bolumsonucanavar', { anchorX: 0.5, anchorY: 0.5, // Ekranın sağında, ortalanmış şekilde göster x: 2048 - 200, y: 2732 / 2, width: 400, height: 400 }); bossImg.alpha = 0; game.addChild(bossImg); game.bossImageShown = true; game.bossImg = bossImg; game.bossAppearTick = LK.ticks; // Yanıp sönme animasyonu (3 kez) flashCount = 0; _flashBoss(); // Boss'un aşağı yukarı hareketi için tick kaydı game.bossBaseY = bossImg.y; } // Oyun bitmesin, win popup gösterme return { v: void 0 }; } } return 0; // break } }, b, explosion, scoreToAdd, bossImg, flashCount, _ret; for (var k = bullets.length - 1; k >= 0; k--) { _ret = _loop(); if (_ret === 0) break; if (_ret) return _ret.v; } } // Düşman mermileri güncelle ve çarpışma kontrolü if (game.enemyBullets) { for (var eb = game.enemyBullets.length - 1; eb >= 0; eb--) { var enemyBullet = game.enemyBullets[eb]; enemyBullet.update(); // ScrollX uygula enemyBullet.x -= scrollSpeed; // Ekran dışıysa sil if (enemyBullet.x < -100) { enemyBullet.destroy(); game.enemyBullets.splice(eb, 1); continue; } // Oyuncuya çarptı mı? if (isCircleHit(enemyBullet, playerShip)) { // Patlama efekti (patlamaeffekt görseli ile) oyuncu gemisinin üstünde göster var explosion = LK.getAsset('patlamaeffekt', { anchorX: 0.5, anchorY: 0.5, x: playerShip.x, y: playerShip.y, width: playerShip.width || 140, height: playerShip.height || 100 }); game.addChild(explosion); tween(explosion, { alpha: 0, scaleX: 2, scaleY: 2 }, { duration: 400, onFinish: function onFinish() { explosion.destroy(); } }); playerHealth -= 2; updateCanBar(); if (playerHealth <= 0) { LK.showGameOver(); return; } enemyBullet.destroy(); game.enemyBullets.splice(eb, 1); continue; } } } // Boss varsa, ekranda merkeze kadar her yönde hareket ettir if (game.bossImg && game.bossBaseY !== undefined) { // Boss'un hareket yarıçapı: ekranın sağ yarısında, merkeze kadar gidebilsin // Merkez: (2048/2, 2732/2) // Boss'un hareket merkezi: ekranın sağında başlar, merkeze kadar hareket edebilir var centerX = 2048 / 2; var centerY = 2732 / 2; var rightEdgeX = 2048 - 200; var bossMoveRadiusX = (rightEdgeX - centerX) / 2; // sağdan merkeze kadar yarıçap var bossMoveRadiusY = (centerY - 0) * 0.8; // üstten alta merkeze kadar (biraz daha az) // Boss'un hareket merkezi: sağ ve merkez arası var bossCenterX = centerX + bossMoveRadiusX; var bossCenterY = centerY; // Zamanı kullanarak dairesel hareket (her yönde) var t = LK.ticks / 60; // yavaş hareket için game.bossImg.x = bossCenterX + Math.cos(t) * bossMoveRadiusX; game.bossImg.y = bossCenterY + Math.sin(t * 0.8) * bossMoveRadiusY; } // Her frame scrollX'i artır (ekran sağa doğru ilerliyor gibi) scrollX += scrollSpeed; // Saturn gezegenini sağa doğru kaydır (arka plan efekti) // Saturn, ekranın ortasında başlar ve scrollX ile daha yavaş kayar, uzaklık efekti için scroll oranı azaltıldı if (saturnBg) { // Saturn'u ana oyun alanının çok daha gerisinde, daha yavaş kayacak şekilde hareket ettir (uzaklık için 0.08 oranı) saturnBg.x = 2048 / 2 - scrollX * 0.08 % (2048 + 700); // Y ekseninde hafif dalgalanma efekti saturnBg.y = 2732 / 2 + Math.sin(LK.ticks / 180) * 60; } // Gift spawn: gift yoksa ve spawn süresi dolduysa nadiren spawn et if (!giftBg && LK.ticks - lastGiftSpawnTick > giftSpawnCooldown) { // %80 olasılıkla gift spawn et if (Math.random() < 0.8) { spawnGift(); } else { // spawn denemesi başarısızsa tekrar denemek için tick'i güncelleme lastGiftSpawnTick = LK.ticks; } } // Moonstone spawn: ekranda en fazla 3 moonstone olsun, spawn süresi dolduysa rastgele spawn et if (moonstones.length < 3 && LK.ticks - lastMoonstoneSpawnTick > moonstoneSpawnCooldown) { // %60 olasılıkla moonstone spawn et if (Math.random() < 0.6) { spawnMoonstone(); } else { lastMoonstoneSpawnTick = LK.ticks; } } // Gift görselini sağa ve aşağıya doğru çapraz kaydır (parallax efekti, saturn'den daha hızlı ama ana objelerden yavaş) if (giftBg) { // X: Orijinal konumundan, scrollX'in 0.18 oranı kadar sola kayar (parallax) giftBg.x = 2048 / 2 + 600 - scrollX * 0.18 % (2048 + 120); // Y: Orijinal konumundan, scrollX'in 0.10 oranı kadar aşağıya kayar (çapraz hareket) + dalgalanma efekti giftBg.y = 2732 / 2 - 400 + scrollX * 0.10 % (2732 + 120) + Math.sin(LK.ticks / 90) * 40; // Skor artırma: oyuncu gemisi gift'e değdi mi kontrol et if (typeof giftBg.lastWasIntersecting === "undefined") { giftBg.lastWasIntersecting = false; } var isIntersecting = isCircleHit(playerShip, giftBg); if (!giftBg.lastWasIntersecting && isIntersecting) { score += 10; scoreTxt.setText(score); updateDifficulty(); // Canı 5 artır, maksimumu aşmasın playerHealth = Math.min(playerHealth + 5, playerMaxHealth); updateCanBar(); // Oyuncu gemisinin kalıcı büyüklük katsayısı if (typeof playerShip.giftScale === "undefined") { playerShip.giftScale = 1; } playerShip.giftScale += 0.15; // Her gift ile %15 büyüsün if (playerShip && playerShip.children && playerShip.children.length > 0) { var shipAsset = playerShip.children[0]; // Hedef büyüklük var targetScale = playerShip.giftScale; // Animasyonla büyüt tween(shipAsset, { scaleX: targetScale, scaleY: targetScale }, { duration: 400 }); // Gemi çarpışma yarıçapını da güncelle playerShip.radius = shipAsset.width * targetScale / 2; // Gemi boyutunu kullanan diğer sınırları da güncellemek gerekirse handleMove fonksiyonunda da scale dikkate alınmalı } // Gift kaybolsun giftBg.destroy(); giftBg = null; // Bir sonraki spawn için tick'i güncelle lastGiftSpawnTick = LK.ticks; } if (giftBg) { giftBg.lastWasIntersecting = isIntersecting; } } };
===================================================================
--- original.js
+++ change.js
@@ -692,44 +692,15 @@
if (game.enemiesKilled >= 10) {
levelFinished = true;
// Bölüm sonu canavarı görselini göster
if (typeof game.bossImageShown === "undefined" || !game.bossImageShown) {
- // Tüm diğer nesneleri yok et
- // Uzay cisimleri
+ // Sadece düşman nesnelerini (spaceObjects) yok et
for (var j = spaceObjects.length - 1; j >= 0; j--) {
if (spaceObjects[j]) {
spaceObjects[j].destroy();
}
}
spaceObjects = [];
- // Mermiler
- for (var i = bullets.length - 1; i >= 0; i--) {
- if (bullets[i]) {
- bullets[i].destroy();
- }
- }
- bullets = [];
- // Düşman mermileri
- if (game.enemyBullets) {
- for (var eb = game.enemyBullets.length - 1; eb >= 0; eb--) {
- if (game.enemyBullets[eb]) {
- game.enemyBullets[eb].destroy();
- }
- }
- game.enemyBullets = [];
- }
- // Moonstone'lar
- for (var m = moonstones.length - 1; m >= 0; m--) {
- if (moonstones[m]) {
- moonstones[m].destroy();
- }
- }
- moonstones = [];
- // Gift
- if (giftBg) {
- giftBg.destroy();
- giftBg = null;
- }
// Boss animasyonu ve eklenmesi
var _flashBoss = function flashBoss() {
if (!game.bossImg) return;
tween(game.bossImg, {
düşman uzay gemisi. In-Game asset. 2d. High contrast. No shadows
patlama efekti. In-Game asset. 2d. High contrast. No shadows
mermi yönünü sağa çevir ve yat
satürn. In-Game asset. 2d. High contrast. No shadows
meteor taşı. In-Game asset. 2d. High contrast. No shadows
bölüm sonu canavar için devasa uzay gemisi. In-Game asset. 2d. High contrast. No shadows
rengini değiştir
ışın mermisi. In-Game asset. 2d. High contrast. No shadows
yanan ateş topları. In-Game asset. 2d. High contrast. No shadows
oyunda açılacak bir uzay portalı için görüntüyü netleştir
A magical sci-fi starburst explosion for a 2D game effect, with a bright blue and white energy core bursting outward in radiant spikes, surrounded by glowing particles, swirling light trails, and a soft nebula-like aura. The effect should feel like a powerful portal discharge or dimensional rift opening, with dynamic energy and cinematic glow. Transparent background, digital art style, top-down angle, ideal for sprite use in games.. In-Game asset. 2d. High contrast. No shadows
A stunning 2D top-down galaxy for a space-themed game background, featuring a massive spiral galaxy with swirling arms in vibrant shades of blue, purple, and pink, a bright glowing core, scattered star clusters, distant nebulae, and a few small planets orbiting around. The galaxy should feel colorful, mysterious, and vast, with soft glowing effects and high contrast for a sci-fi aesthetic. Style: digital art, seamless background, suitable for looping game parallax layers.. In-Game asset. 2d. High contrast. No shadows
kalkanın içinde gemi olmasın
A 2D sci-fi gift box or power-up crate floating in space, with a glowing metallic surface, futuristic design, bright neon blue and silver accents, and a soft pulsing light effect. The box should look valuable and mysterious, slightly levitating with subtle sparkles or energy rings around it. Designed for a top-down space shooter game. Transparent background, digital art, ideal for sprite use.. In-Game asset. 2d. High contrast. No shadows
A 2D sci-fi power-up gift box that grants a shield, designed with a glowing blue energy core inside a metallic futuristic container. The box features holographic shield symbols, neon cyan highlights, and soft pulsing light. It is slightly levitating, surrounded by sparkles and a faint energy ring. The design should clearly suggest it gives protective power. Transparent background, digital art style, ideal for sprite use in a top-down space shooter game.. In-Game asset. 2d. High contrast. No shadows
bu görseli hız için değiştir
Design a basic 2D top-down spaceship with a compact, angular body and minimal detailing. The ship should have a small central cockpit, two modest rear thrusters, and one weapon mount. Colors are simple — grays and blues — suggesting a utilitarian design. It should look like a beginner’s ship: reliable but not advanced. In-Game asset. 2d. High contrast. No shadows
Upgrade the Level 1 ship into a more capable 2D top-down design. Add wing extensions with subtle glowing lines, a larger engine section with animated thrusters, and two visible weapon hardpoints. Add more color variation (blues, steel, light glow effects) to indicate progress and increased power.. In-Game asset. 2d. High contrast. No shadows
Transform the ship into a high-tech 2D top-down spacecraft. Add shield emitters with rotating energy halos, four weapon slots, side thrusters, and an enhanced cockpit with a golden or crystal-like glow. The silhouette is wider and more refined. Visuals should include detailed paneling, moving parts, and advanced energy flows.. In-Game asset. 2d. High contrast. No shadows
elmas. In-Game asset. 2d. High contrast. No shadows
uzay 2d etkileyici lazer ışını. In-Game asset. 2d. High contrast. No shadows