User prompt
Magnet:** Yakındaki güçlendirmeleri otomatik çeker. - **Can yenileme:** Oyuncunun canını artıran power-up. Bunları ekl
User prompt
Bizim mermilerde çok hızlı
User prompt
Düşman ve oyuncu için ölüm animasyonları - Mermi ve güçlendirme toplama efektleri - Dalga geçişlerinde ekran efektleri yap ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Müzik ekle
User prompt
Engelleri kaldır
User prompt
Upgrade yukardan aşağıya doğru düşsün eskisi gibi şuan ekran da yanıp sönüyor sadece ve düşmanın mermileri çok hızlı
User prompt
Daha Fazla Güçlendirme (Power-Up)** - Otomatik hedefleme (auto-aim) mermisi - Geçici olarak mermilerin büyümesi olması - Yavaşlatıcı (slow motion) güçlendirmesi - Geçici olarak düşmanların hareketini donduran güçlendirme
User prompt
Daha Fazla Güçlendirme (Power-Up)** - Otomatik hedefleme (auto-aim) mermisi - Geçici olarak mermilerin büyümesi veya patlayıcı olması - Yavaşlatıcı (slow motion) güçlendirmesi - Geçici olarak düşmanların hareketini donduran güçlendirme bunları ekle
User prompt
Ekranda hareket eden veya sabit engeller (duvarlar, lazerler, hareketli bloklar) - Zaman zaman ortaya çıkan tuzaklar (ör: aniden çıkan ateş, patlayan mayınlar) bunları ekle
User prompt
Düşman başlığı altında farklı düşman hareketleri ekle
User prompt
Please fix the bug: 'tween is not defined' in or related to this line: 'if (!tween) {' Line Number: 318 ↪💡 Consider importing and using the following plugins: @upit/tween.v1
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'TypeError: tween.to is not a function' in or related to this line: 'tween.to(trail, {' Line Number: 112 ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Mermi izi ekle
User prompt
Düşmanı vurduğumda ekranın sararmasını sil
User prompt
Ekran sarsıntısını kaldır
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ // Boss Düşman var Boss = Container.expand(function () { var self = Container.call(this); var bossGfx = self.attachAsset('boss', { anchorX: 0.5, anchorY: 0.5 }); self.radius = bossGfx.width / 2; self.speed = 2.2 + currentWave * 0.15; self.hp = 20 + currentWave * 8; self.dir = Math.PI / 2; self.shootCooldown = 30; self.moveTimer = 0; self.targetX = 2048 / 2; self.update = function () { // Yavaşça aşağıya gelsin, sonra yatayda hareket etsin if (self.y < 400) { self.y += self.speed; } else { // Yatayda sağa-sola hareket self.moveTimer--; if (self.moveTimer <= 0) { self.targetX = 300 + Math.random() * (2048 - 600); self.moveTimer = 60 + Math.floor(Math.random() * 60); } if (Math.abs(self.x - self.targetX) > 10) { self.x += (self.targetX - self.x) * 0.07; } } // Ateş etme if (self.shootCooldown > 0) { self.shootCooldown--; } else { // 3 yönlü ateş for (var i = -1; i <= 1; i++) { var angle = Math.PI / 2 + i * Math.PI / 12; var eb = new EnemyBullet(angle); eb.x = self.x; eb.y = self.y + self.radius - 30; enemyBullets.push(eb); game.addChild(eb); } self.shootCooldown = 18 + Math.floor(Math.random() * 18); } }; self.hit = function () { self.hp--; LK.effects.flashObject(self, 0xffffff, 120); if (self.hp <= 0) { // Ölüm animasyonu: büyüyüp patlayarak yok ol tween(self, { alpha: 0, scaleX: 2.5, scaleY: 2.5 }, { duration: 500, easing: tween.cubicOut, onFinish: function onFinish() { self.destroy(); } }); return true; } return false; }; return self; }); // Oyuncu mermisi var Bullet = Container.expand(function (angle) { var self = Container.call(this); var bulletGfx = self.attachAsset('bullet', { anchorX: 0.5, anchorY: 0.5 }); self.radius = bulletGfx.width / 2; self.speed = 16; self.angle = angle || -Math.PI / 2; // Bullet trail group self.trailGroup = new Container(); self.addChild(self.trailGroup); // Trail config self.trailInterval = 0; self.trailIntervalMax = 2; // every 2 frames self.update = function () { // Move bullet self.x += Math.cos(self.angle) * self.speed; self.y += Math.sin(self.angle) * self.speed; // Bullet trail logic self.trailInterval--; if (self.trailInterval <= 0) { self.trailInterval = self.trailIntervalMax; // Create a small faded bullet as trail var trail = LK.getAsset('bullet', { anchorX: 0.5, anchorY: 0.5, width: bulletGfx.width * 0.7, height: bulletGfx.height * 0.7, x: 0, y: 0 }); trail.alpha = 0.25; self.trailGroup.addChild(trail); // Fade and shrink the trail, then remove tween(trail, { alpha: 0, width: 0, height: 0 }, { duration: 320, onFinish: function onFinish() { if (trail.parent) trail.parent.removeChild(trail); } }); } }; self.setBig = function () { // Mermi boyutunu büyüt bulletGfx.width *= 1.8; bulletGfx.height *= 1.8; self.radius = bulletGfx.width / 2; // Trail de büyüsün self.trailIntervalMax = 1; }; return self; }); // Düşman var Enemy = Container.expand(function (type) { var self = Container.call(this); var enemyGfx = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); self.radius = enemyGfx.width / 2; // Düşman tipi seçimi self.type = type || Enemy.randomType(); // Temel parametreler self.speed = 2 + currentWave * 0.3 + Math.random() * 1.5; self.hp = 1 + Math.floor(currentWave / 2); self.dir = Math.PI / 2 + (Math.random() - 0.5) * 0.3; // Hafifçe sağa-sola sapabilir self.shootCooldown = 30 + Math.floor(Math.random() * 60); // Her düşman için rastgele başlat // Zigzag için faz self.zigzagPhase = Math.random() * Math.PI * 2; // Dalga için genlik ve frekans self.waveAmplitude = 80 + Math.random() * 60; self.waveFrequency = 0.012 + Math.random() * 0.008; // Hedefli düşman için hedef pozisyon self.targetX = 2048 / 2 + (Math.random() - 0.5) * 600; self.update = function () { // Farklı hareket tipleri if (self.type === "straight") { // Düz hareket self.y += self.speed; self.x += Math.sin(self.dir) * 2; } else if (self.type === "zigzag") { // Zigzag hareket self.y += self.speed * 0.95; self.x += Math.sin(self.y * 0.045 + self.zigzagPhase) * 12; } else if (self.type === "wave") { // Dalga hareketi self.y += self.speed * 0.92; self.x = self.targetX + Math.sin(self.y * self.waveFrequency + self.zigzagPhase) * self.waveAmplitude; } else if (self.type === "fast") { // Hızlı düz hareket self.y += self.speed + 2.5; } else if (self.type === "slow") { // Yavaş ve daha fazla can self.y += self.speed * 0.6; } else { // Varsayılan düz hareket self.y += self.speed; self.x += Math.sin(self.dir) * 2; } // Ateş etme if (self.shootCooldown > 0) { self.shootCooldown--; } else { // Kendi düz çizgisine doğru ateş et var angle = Math.PI / 2; // Düz aşağıya (ekranın altına) ateş etsin var eb = new EnemyBullet(angle); eb.x = self.x; eb.y = self.y + self.radius; enemyBullets.push(eb); game.addChild(eb); self.shootCooldown = 60 + Math.floor(Math.random() * 60); // 1-2 saniyede bir ateş } }; self.hit = function () { self.hp--; LK.effects.flashObject(self, 0xffffff, 200); if (self.hp <= 0) { // Ölüm animasyonu: küçülerek ve şeffaflaşarak yok ol tween(self, { alpha: 0, scaleX: 2, scaleY: 2 }, { duration: 350, easing: tween.cubicOut, onFinish: function onFinish() { self.destroy(); } }); return true; } return false; }; return self; }); // Düşman tipi seçici // Düşman mermisi var EnemyBullet = Container.expand(function (angle) { var self = Container.call(this); var bulletGfx = self.attachAsset('bullet', { anchorX: 0.5, anchorY: 0.5 }); bulletGfx.tint = 0xff3333; // Kırmızıya yakın renk self.radius = bulletGfx.width / 2; self.speed = 9; // Daha yavaş düşman mermisi self.angle = angle || Math.PI / 2; self.update = function () { self.x += Math.cos(self.angle) * self.speed; self.y += Math.sin(self.angle) * self.speed; }; return self; }); var Player = Container.expand(function () { var self = Container.call(this); var playerGfx = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); self.radius = playerGfx.width / 2; self.fireCooldown = 0; // Atış bekleme süresi self.fireRate = 18; // Kaç frame'de bir ateş eder (60fps'de ~3 atış/sn) self.powerLevel = 1; // Güç seviyesi (daha fazla mermi için) self.invincible = false; self.invincibleTimer = 0; self.update = function () { if (self.fireCooldown > 0) { self.fireCooldown--; } // Rapid fire buff if (self.fireRateBuff) { self.fireRateBuffTimer--; self.fireRate = 3; if (self.fireRateBuffTimer <= 0) { self.fireRateBuff = 0; self.fireRate = 18 - (self.powerLevel - 1) * 4; } } // Double shot buff if (self.doubleBuff) { self.doubleBuffTimer--; self.tempPowerLevel = self.powerLevel + 1; if (self.doubleBuffTimer <= 0) { self.doubleBuff = 0; self.tempPowerLevel = null; } } if (self.invincible) { self.invincibleTimer--; if (self.invincibleTimer <= 0) { self.invincible = false; playerGfx.alpha = 1; } } // Auto-aim buff if (self.autoAimBuff) { self.autoAimBuffTimer--; if (self.autoAimBuffTimer <= 0) { self.autoAimBuff = 0; } } // Big bullet buff if (self.bigBulletBuff) { self.bigBulletBuffTimer--; if (self.bigBulletBuffTimer <= 0) { self.bigBulletBuff = 0; } } // Magnet buff timer if (self.magnetBuff) { self.magnetBuffTimer--; if (self.magnetBuffTimer <= 0) { self.magnetBuff = 0; } } }; self.shoot = function () { if (self.fireCooldown > 0) { return; } self.fireCooldown = self.fireRate; // Güç seviyesine göre mermi sayısı var spread = self.tempPowerLevel ? self.tempPowerLevel : self.powerLevel; var angleStep = Math.PI / 16; var baseAngle = -Math.PI / 2; for (var i = 0; i < spread; i++) { var angle = baseAngle + (i - (spread - 1) / 2) * angleStep; // Auto-aim: hedefe en yakın düşmana yönel if (self.autoAimBuff && enemies.length > 0) { // En yakın düşmanı bul var minDist = 99999, targetEnemy = null; for (var ei = 0; ei < enemies.length; ei++) { var dx = enemies[ei].x - self.x; var dy = enemies[ei].y - (self.y - self.radius); var dist = dx * dx + dy * dy; if (dist < minDist) { minDist = dist; targetEnemy = enemies[ei]; } } if (targetEnemy) { angle = Math.atan2(targetEnemy.y - (self.y - self.radius), targetEnemy.x - self.x); } } var b = new Bullet(angle); // Big bullet: mermi boyutunu büyüt if (self.bigBulletBuff) { b.setBig(); } b.x = self.x; b.y = self.y - self.radius; bullets.push(b); game.addChild(b); } }; self.gainPower = function (type) { // type: 'power', 'shield', 'bomb', 'rapid', 'double' if (!type || type === 'power') { if (self.powerLevel < 3) { self.powerLevel++; LK.effects.flashObject(self, 0x2980b9, 600); // Ateş hızını artır: fireRate'i azalt, minimum 6 frame/sn'ye kadar düşebilir self.fireRate = Math.max(6, self.fireRate - 4); } } else if (type === 'shield') { self.invincible = true; self.invincibleTimer = 180; // 3 saniye playerGfx.alpha = 0.4; LK.effects.flashObject(self, 0x00bfff, 800); } else if (type === 'bomb') { // Ekrandaki tüm düşmanları ve düşman mermilerini yok et for (var i = enemies.length - 1; i >= 0; i--) { enemies[i].destroy(); enemies.splice(i, 1); score += 10 * currentWave; } for (var i = enemyBullets.length - 1; i >= 0; i--) { enemyBullets[i].destroy(); enemyBullets.splice(i, 1); } scoreText.setText(score); LK.setScore(score); LK.effects.flashScreen(0xffffff, 400); } else if (type === 'rapid') { // 5 saniye boyunca ateş hızı çok yüksek self.fireRateBuff = 1; self.fireRateBuffTimer = 300; LK.effects.flashObject(self, 0xffe066, 600); } else if (type === 'double') { // 5 saniye boyunca powerLevel +1 self.doubleBuff = 1; self.doubleBuffTimer = 300; LK.effects.flashObject(self, 0x8e44ad, 600); } else if (type === 'autoaim') { // 6 saniye boyunca otomatik hedefleme self.autoAimBuff = 1; self.autoAimBuffTimer = 360; LK.effects.flashObject(self, 0x00ff00, 600); } else if (type === 'bigbullet') { // 6 saniye boyunca büyük mermi self.bigBulletBuff = 1; self.bigBulletBuffTimer = 360; LK.effects.flashObject(self, 0xffa500, 600); } else if (type === 'slow') { // 5 saniye boyunca düşman mermileri ve düşmanlar yavaşlar if (!game.slowMotionBuff || game.slowMotionBuff <= 0) { game.slowMotionBuff = 1; game.slowMotionBuffTimer = 300; LK.effects.flashScreen(0x00bfae, 400); } } else if (type === 'freeze') { // 3 saniye boyunca düşmanlar ve mermileri donar if (!game.freezeEnemiesBuff || game.freezeEnemiesBuff <= 0) { game.freezeEnemiesBuff = 1; game.freezeEnemiesBuffTimer = 180; LK.effects.flashScreen(0x7ed6ff, 400); } } else if (type === 'magnet') { // Magnet: Yakındaki tüm güçlendirmeleri oyuncuya doğru çek if (!self.magnetBuff || self.magnetBuff <= 0) { self.magnetBuff = 1; self.magnetBuffTimer = 360; // 6 saniye LK.effects.flashObject(self, 0xff00ff, 600); } } else if (type === 'heal') { // Can yenileme: Bir can ekle, maksimum 7 if (typeof playerLives !== "undefined" && playerLives < 7) { playerLives++; livesText.setText('♥'.repeat(playerLives)); LK.effects.flashObject(self, 0x00ff44, 600); } } }; self.hit = function () { if (self.invincible) { return; } self.invincible = true; self.invincibleTimer = 90; // 1.5 saniye playerGfx.alpha = 0.5; LK.effects.flashScreen(0xff0000, 500); // Ölüm animasyonu: kısa bir sarsılma ve küçülme tween(self, { scaleX: 0.7, scaleY: 0.7 }, { duration: 120, easing: tween.cubicOut, onFinish: function onFinish() { tween(self, { scaleX: 1, scaleY: 1 }, { duration: 120, easing: tween.cubicOut }); } }); playerLives--; livesText.setText('♥'.repeat(playerLives)); if (playerLives <= 0) { // Son can ise fade out animasyonu tween(self, { alpha: 0 }, { duration: 400, onFinish: function onFinish() { LK.showGameOver(); } }); } else { // Can varsa normal devam } }; return self; }); // Güçlendirme türleri: 'power', 'shield', 'bomb', 'rapid', 'double', 'autoaim', 'bigbullet', 'slow', 'freeze' var PowerUp = Container.expand(function (type) { var self = Container.call(this); self.type = type || PowerUp.randomType(); var color = 0x00ffcc; if (self.type === 'shield') color = 0x00bfff;else if (self.type === 'bomb') color = 0xff4444;else if (self.type === 'rapid') color = 0xffe066;else if (self.type === 'double') color = 0x8e44ad;else if (self.type === 'autoaim') color = 0x00ff00;else if (self.type === 'bigbullet') color = 0xffa500;else if (self.type === 'slow') color = 0x00bfae;else if (self.type === 'freeze') color = 0x7ed6ff;else if (self.type === 'magnet') color = 0xff00ff;else if (self.type === 'heal') color = 0x00ff44; var puGfx = self.attachAsset('powerup', { anchorX: 0.5, anchorY: 0.5, width: 80, height: 80 }); puGfx.tint = color; self.radius = puGfx.width / 2; self.speed = 6; self.update = function () { // PowerUp yukarıdan aşağıya doğru düşer self.y += self.speed; }; return self; }); /**** * Initialize Game ****/ // Tuzak (Trap) - zaman zaman ortaya çıkan ateş/mayın // Rastgele güçlendirme türü seçici var game = new LK.Game({ backgroundColor: 0x222831 }); /**** * Game Code ****/ // Düşman tipi seçici // Karakter, düşman, mermi ve güçlendirme için temel şekiller // Global değişkenler // Rastgele güçlendirme türü seçici Enemy.randomType = function () { var types = ["straight", "zigzag", "wave", "fast", "slow"]; var r = Math.random(); if (r < 0.45) return "straight"; if (r < 0.65) return "zigzag"; if (r < 0.8) return "wave"; if (r < 0.92) return "fast"; return "slow"; }; PowerUp.randomType = function () { var types = ['power', 'shield', 'bomb', 'rapid', 'double', 'autoaim', 'bigbullet', 'slow', 'freeze', 'magnet', 'heal']; var r = Math.random(); if (r < 0.18) return 'power'; if (r < 0.26) return 'shield'; if (r < 0.34) return 'bomb'; if (r < 0.42) return 'rapid'; if (r < 0.50) return 'double'; if (r < 0.60) return 'autoaim'; if (r < 0.70) return 'bigbullet'; if (r < 0.78) return 'slow'; if (r < 0.86) return 'freeze'; if (r < 0.93) return 'magnet'; return 'heal'; }; if (!tween) { console.error("Tween plugin failed to load!"); } if (!storage) { console.error("Storage plugin failed to load!"); } var player; var bullets = []; var enemyBullets = []; var enemies = []; var powerups = []; var boss = null; var bossActive = false; var currentWave = 1; var waveEnemiesLeft = 0; var waveSpawnTimer = 0; var playerLives = 5; var score = 0; var dragNode = null; // Bufflar game.slowMotionBuff = 0; game.slowMotionBuffTimer = 0; game.freezeEnemiesBuff = 0; game.freezeEnemiesBuffTimer = 0; // GUI: Skor ve can var scoreText = new Text2('0', { size: 100, fill: 0xFFF700 }); scoreText.anchor.set(0.5, 0); LK.gui.top.addChild(scoreText); var livesText = new Text2('♥♥♥♥♥', { size: 90, fill: 0xE74C3C }); livesText.anchor.set(0.5, 0); LK.gui.topRight.addChild(livesText); // Dalga göstergesi var waveText = new Text2('Dalga 1', { size: 70, fill: 0x00BFFF }); waveText.anchor.set(0.5, 0); LK.gui.bottom.addChild(waveText); // Oyuncu oluştur player = new Player(); player.x = 2048 / 2; player.y = 2732 - 350; game.addChild(player); // İlk dalgayı başlat startWave(currentWave); // Sürükleme/move kontrolleri function handleMove(x, y, obj) { if (dragNode) { // Sınırları kontrol et var px = Math.max(80, Math.min(2048 - 80, x)); var py = Math.max(200, Math.min(2732 - 120, y)); dragNode.x = px; dragNode.y = py; } } game.move = handleMove; game.down = function (x, y, obj) { // Oyuncuya tıklanırsa sürüklemeye başla if (player && Math.abs(x - player.x) < player.radius && Math.abs(y - player.y) < player.radius) { dragNode = player; handleMove(x, y, obj); } }; game.up = function (x, y, obj) { dragNode = null; }; // Dalga başlatıcı function startWave(wave) { // Her 5. dalgada boss gelsin // Dalga geçiş efekti: ekranı kısa süreliğine beyaza flashla ve dalga metni büyüt küçült animasyonu LK.effects.flashScreen(wave % 5 === 0 ? 0xff2222 : 0xffffff, 300); waveText.scale.set(1.7, 1.7); tween(waveText.scale, { x: 1, y: 1 }, { duration: 400, easing: tween.cubicOut }); if (wave % 5 === 0) { bossActive = true; boss = new Boss(); boss.x = 2048 / 2; boss.y = -200; game.addChild(boss); waveEnemiesLeft = 0; waveText.setText('BOSS Dalgası!'); } else { bossActive = false; boss = null; waveEnemiesLeft = 6 + wave * 2; waveSpawnTimer = 0; waveText.setText('Dalga ' + wave); } } // Düşman üretici function spawnEnemy() { // Rastgele tipli düşman oluştur var e = new Enemy(); e.x = 150 + Math.random() * (2048 - 300); e.y = -100; // Eğer slow tipliyse canı artır if (e.type === "slow") { e.hp += 2 + Math.floor(currentWave / 2); } // Eğer fast tipliyse hızı artır if (e.type === "fast") { e.speed += 2.5; } enemies.push(e); game.addChild(e); } // Güçlendirme üretici function spawnPowerUp() { var pu = new PowerUp(PowerUp.randomType()); pu.x = 200 + Math.random() * (2048 - 400); pu.y = -80; powerups.push(pu); game.addChild(pu); } // Ana oyun döngüsü game.update = function () { // Buff timers if (game.slowMotionBuff) { game.slowMotionBuffTimer--; if (game.slowMotionBuffTimer <= 0) { game.slowMotionBuff = 0; } } if (game.freezeEnemiesBuff) { game.freezeEnemiesBuffTimer--; if (game.freezeEnemiesBuffTimer <= 0) { game.freezeEnemiesBuff = 0; } } // Oyuncu update player.update(); // Otomatik ateş player.shoot(); // Mermiler for (var i = bullets.length - 1; i >= 0; i--) { var b = bullets[i]; b.update(); // Ekran dışıysa sil if (b.y < -60 || b.x < -60 || b.x > 2048 + 60) { b.destroy(); bullets.splice(i, 1); continue; } // Düşman çarpışması var _loop = function _loop() { e = enemies[j]; if (b.intersects(e)) { // Mermi çarpma efekti: kısa bir büyüme ve fade out tween(b, { scaleX: 1.7, scaleY: 1.7, alpha: 0 }, { duration: 120, easing: tween.cubicOut, onFinish: function onFinish() { b.destroy(); } }); bullets.splice(i, 1); if (e.hit()) { // Düşman öldü score += 10 * currentWave; scoreText.setText(score); LK.setScore(score); // Patlama efekti (custom: ekranı turuncuya flashla) // Sarı ekran sarsıntısı kaldırıldı enemies.splice(j, 1); waveEnemiesLeft--; // Güçlendirme düşürme şansı if (Math.random() < 0.12) { spawnPowerUp(); } } return 1; // break } }, e, originalX, originalY, shakeTimes, shakeDuration, shakeCount; for (var j = enemies.length - 1; j >= 0; j--) { if (_loop()) break; } } // Düşman mermileri for (var i = enemyBullets.length - 1; i >= 0; i--) { var eb = enemyBullets[i]; eb.update(); // Ekran dışıysa sil if (eb.y < -60 || eb.y > 2732 + 60 || eb.x < -60 || eb.x > 2048 + 60) { eb.destroy(); enemyBullets.splice(i, 1); continue; } // Oyuncuya çarpışma if (eb.intersects(player)) { eb.destroy(); enemyBullets.splice(i, 1); player.hit(); continue; } } // Düşmanlar for (var i = enemies.length - 1; i >= 0; i--) { var e = enemies[i]; // Freeze: düşmanlar hareket etmesin if (game.freezeEnemiesBuff) { // update çağrılmasın, sadece animasyonlar dursun } else if (game.slowMotionBuff) { // Yavaşlat: update fonksiyonunu daha az uygula if (LK.ticks % 3 === 0) e.update(); } else { e.update(); } // Ekran dışıysa sil if (e.y > 2732 + 100) { e.destroy(); enemies.splice(i, 1); waveEnemiesLeft--; continue; } // Oyuncu çarpışması if (e.intersects(player)) { e.destroy(); enemies.splice(i, 1); waveEnemiesLeft--; player.hit(); continue; } } // Düşman mermileri for (var i = enemyBullets.length - 1; i >= 0; i--) { var eb = enemyBullets[i]; if (game.freezeEnemiesBuff) { // Düşman mermileri hareket etmesin } else if (game.slowMotionBuff) { if (LK.ticks % 3 === 0) eb.update(); } else { eb.update(); } // Ekran dışıysa sil if (eb.y < -60 || eb.y > 2732 + 60 || eb.x < -60 || eb.x > 2048 + 60) { eb.destroy(); enemyBullets.splice(i, 1); continue; } // Oyuncuya çarpışma if (eb.intersects(player)) { eb.destroy(); enemyBullets.splice(i, 1); player.hit(); continue; } } // Güçlendirmeler for (var i = powerups.length - 1; i >= 0; i--) { var pu = powerups[i]; // Magnet effect: Eğer oyuncuda magnet buff varsa, powerup'ı oyuncuya çek if (player.magnetBuff && player.magnetBuff > 0) { var dx = player.x - pu.x; var dy = player.y - pu.y; var dist = Math.sqrt(dx * dx + dy * dy); if (dist < 600) { var pull = 0.18 + (600 - dist) / 1200; // Yakınsa daha hızlı çeker pu.x += dx * pull; pu.y += dy * pull; } } pu.update(); if (pu.y > 2732 + 80) { pu.destroy(); powerups.splice(i, 1); continue; } if (pu.intersects(player)) { // Güçlendirme toplama efekti: büyüyüp fade out tween(pu, { scaleX: 1.7, scaleY: 1.7, alpha: 0 }, { duration: 180, easing: tween.cubicOut, onFinish: function onFinish() { pu.destroy(); } }); player.gainPower(pu.type); powerups.splice(i, 1); continue; } } // Boss aktifse boss update ve çarpışma kontrolü if (bossActive && boss) { boss.update(); // Boss'a mermi çarpması var _loop2 = function _loop2() { b = bullets[i]; if (b.intersects(boss)) { if (boss.hit()) { // Boss öldü score += 500 * currentWave; scoreText.setText(score); LK.setScore(score); // Boss patlama efekti (custom: ekranı kırmızıya flashla) LK.effects.flashScreen(0xff2222, 400); bossActive = false; boss = null; currentWave++; startWave(currentWave); } b.destroy(); bullets.splice(i, 1); } }, b, originalX, originalY, shakeTimes, shakeDuration, shakeCount; for (var i = bullets.length - 1; i >= 0; i--) { _loop2(); } // Boss oyuncuya çarparsa if (boss && boss.intersects(player)) { boss.destroy(); bossActive = false; boss = null; player.hit(); currentWave++; startWave(currentWave); } } else { // Dalga yönetimi if (waveEnemiesLeft <= 0 && enemies.length === 0) { currentWave++; startWave(currentWave); } } // Düşman üretimi if (waveEnemiesLeft > 0) { waveSpawnTimer--; if (waveSpawnTimer <= 0) { spawnEnemy(); waveEnemiesLeft--; waveSpawnTimer = Math.max(18, 60 - currentWave * 2); // Dalga arttıkça daha hızlı } } }; // Oyun başında skor ve canı sıfırla score = 0; LK.setScore(0); playerLives = 5; livesText.setText('♥'.repeat(playerLives)); scoreText.setText(score); currentWave = 1; waveText.setText('Dalga 1'); // Müzik başlat LK.playMusic('bgmusic'); ; ;
===================================================================
--- original.js
+++ change.js
@@ -287,8 +287,15 @@
if (self.bigBulletBuffTimer <= 0) {
self.bigBulletBuff = 0;
}
}
+ // Magnet buff timer
+ if (self.magnetBuff) {
+ self.magnetBuffTimer--;
+ if (self.magnetBuffTimer <= 0) {
+ self.magnetBuff = 0;
+ }
+ }
};
self.shoot = function () {
if (self.fireCooldown > 0) {
return;
@@ -390,8 +397,22 @@
game.freezeEnemiesBuff = 1;
game.freezeEnemiesBuffTimer = 180;
LK.effects.flashScreen(0x7ed6ff, 400);
}
+ } else if (type === 'magnet') {
+ // Magnet: Yakındaki tüm güçlendirmeleri oyuncuya doğru çek
+ if (!self.magnetBuff || self.magnetBuff <= 0) {
+ self.magnetBuff = 1;
+ self.magnetBuffTimer = 360; // 6 saniye
+ LK.effects.flashObject(self, 0xff00ff, 600);
+ }
+ } else if (type === 'heal') {
+ // Can yenileme: Bir can ekle, maksimum 7
+ if (typeof playerLives !== "undefined" && playerLives < 7) {
+ playerLives++;
+ livesText.setText('♥'.repeat(playerLives));
+ LK.effects.flashObject(self, 0x00ff44, 600);
+ }
}
};
self.hit = function () {
if (self.invincible) {
@@ -440,9 +461,9 @@
var PowerUp = Container.expand(function (type) {
var self = Container.call(this);
self.type = type || PowerUp.randomType();
var color = 0x00ffcc;
- if (self.type === 'shield') color = 0x00bfff;else if (self.type === 'bomb') color = 0xff4444;else if (self.type === 'rapid') color = 0xffe066;else if (self.type === 'double') color = 0x8e44ad;else if (self.type === 'autoaim') color = 0x00ff00;else if (self.type === 'bigbullet') color = 0xffa500;else if (self.type === 'slow') color = 0x00bfae;else if (self.type === 'freeze') color = 0x7ed6ff;
+ if (self.type === 'shield') color = 0x00bfff;else if (self.type === 'bomb') color = 0xff4444;else if (self.type === 'rapid') color = 0xffe066;else if (self.type === 'double') color = 0x8e44ad;else if (self.type === 'autoaim') color = 0x00ff00;else if (self.type === 'bigbullet') color = 0xffa500;else if (self.type === 'slow') color = 0x00bfae;else if (self.type === 'freeze') color = 0x7ed6ff;else if (self.type === 'magnet') color = 0xff00ff;else if (self.type === 'heal') color = 0x00ff44;
var puGfx = self.attachAsset('powerup', {
anchorX: 0.5,
anchorY: 0.5,
width: 80,
@@ -469,12 +490,12 @@
/****
* Game Code
****/
-// Rastgele güçlendirme türü seçici
-// Global değişkenler
-// Karakter, düşman, mermi ve güçlendirme için temel şekiller
// Düşman tipi seçici
+// Karakter, düşman, mermi ve güçlendirme için temel şekiller
+// Global değişkenler
+// Rastgele güçlendirme türü seçici
Enemy.randomType = function () {
var types = ["straight", "zigzag", "wave", "fast", "slow"];
var r = Math.random();
if (r < 0.45) return "straight";
@@ -483,19 +504,21 @@
if (r < 0.92) return "fast";
return "slow";
};
PowerUp.randomType = function () {
- var types = ['power', 'shield', 'bomb', 'rapid', 'double', 'autoaim', 'bigbullet', 'slow', 'freeze'];
+ var types = ['power', 'shield', 'bomb', 'rapid', 'double', 'autoaim', 'bigbullet', 'slow', 'freeze', 'magnet', 'heal'];
var r = Math.random();
- if (r < 0.22) return 'power';
- if (r < 0.32) return 'shield';
- if (r < 0.42) return 'bomb';
- if (r < 0.52) return 'rapid';
- if (r < 0.62) return 'double';
- if (r < 0.74) return 'autoaim';
- if (r < 0.84) return 'bigbullet';
- if (r < 0.92) return 'slow';
- return 'freeze';
+ if (r < 0.18) return 'power';
+ if (r < 0.26) return 'shield';
+ if (r < 0.34) return 'bomb';
+ if (r < 0.42) return 'rapid';
+ if (r < 0.50) return 'double';
+ if (r < 0.60) return 'autoaim';
+ if (r < 0.70) return 'bigbullet';
+ if (r < 0.78) return 'slow';
+ if (r < 0.86) return 'freeze';
+ if (r < 0.93) return 'magnet';
+ return 'heal';
};
if (!tween) {
console.error("Tween plugin failed to load!");
}
@@ -767,8 +790,19 @@
}
// Güçlendirmeler
for (var i = powerups.length - 1; i >= 0; i--) {
var pu = powerups[i];
+ // Magnet effect: Eğer oyuncuda magnet buff varsa, powerup'ı oyuncuya çek
+ if (player.magnetBuff && player.magnetBuff > 0) {
+ var dx = player.x - pu.x;
+ var dy = player.y - pu.y;
+ var dist = Math.sqrt(dx * dx + dy * dy);
+ if (dist < 600) {
+ var pull = 0.18 + (600 - dist) / 1200; // Yakınsa daha hızlı çeker
+ pu.x += dx * pull;
+ pu.y += dy * pull;
+ }
+ }
pu.update();
if (pu.y > 2732 + 80) {
pu.destroy();
powerups.splice(i, 1);
2d spaceship beatifull. In-Game asset. 2d. High contrast. No shadows
Yukarı doğru 3 ok upgrade. In-Game asset. 2d. High contrast. No shadows
2d bullet. In-Game asset. 2d. High contrast. No shadows
Meteor 2d. In-Game asset. 2d. High contrast. No shadows
2d enemy spaceship arka plana uyumlu olsun. In-Game asset. 2d. High contrast. No shadows
2d enemy boss spaceship. In-Game asset. 2d. High contrast. No shadows