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) { 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 = 28; 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); } }); } }; 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) { 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 = 18; 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; }); // Oyuncu karakteri 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; } } }; 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; var b = new Bullet(angle); 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); } }; 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); playerLives--; livesText.setText('♥'.repeat(playerLives)); if (playerLives <= 0) { LK.showGameOver(); } }; return self; }); // Güçlendirme türleri: 'power', 'shield', 'bomb', 'rapid', 'double' 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; var puGfx = self.attachAsset('powerup', { anchorX: 0.5, anchorY: 0.5 }); puGfx.tint = color; self.radius = puGfx.width / 2; self.speed = 6; self.update = function () { self.y += self.speed; }; return self; }); /**** * Initialize Game ****/ // 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']; var r = Math.random(); if (r < 0.35) return 'power'; if (r < 0.55) return 'shield'; if (r < 0.7) return 'bomb'; if (r < 0.85) return 'rapid'; return 'double'; }; 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; // 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 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 () { // 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)) { 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(); } } b.destroy(); bullets.splice(i, 1); 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]; 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; } } // Güçlendirmeler for (var i = powerups.length - 1; i >= 0; i--) { var pu = powerups[i]; pu.update(); if (pu.y > 2732 + 80) { pu.destroy(); powerups.splice(i, 1); continue; } if (pu.intersects(player)) { player.gainPower(pu.type); pu.destroy(); 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'); ;
===================================================================
--- original.js
+++ change.js
@@ -1,8 +1,9 @@
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
+var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
@@ -71,29 +72,95 @@
});
self.radius = bulletGfx.width / 2;
self.speed = 28;
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);
+ }
+ });
+ }
};
return self;
});
// Düşman
-var Enemy = Container.expand(function () {
+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 () {
- self.y += self.speed;
- self.x += Math.sin(self.dir) * 2;
+ // 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 {
@@ -117,8 +184,9 @@
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', {
@@ -256,17 +324,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;
- }
+ 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;
var puGfx = self.attachAsset('powerup', {
anchorX: 0.5,
anchorY: 0.5
});
@@ -289,26 +349,28 @@
/****
* 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'];
var r = Math.random();
- if (r < 0.35) {
- return 'power';
- }
- if (r < 0.55) {
- return 'shield';
- }
- if (r < 0.7) {
- return 'bomb';
- }
- if (r < 0.85) {
- return 'rapid';
- }
+ if (r < 0.35) return 'power';
+ if (r < 0.55) return 'shield';
+ if (r < 0.7) return 'bomb';
+ if (r < 0.85) return 'rapid';
return 'double';
};
if (!tween) {
console.error("Tween plugin failed to load!");
@@ -397,11 +459,20 @@
}
}
// 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
@@ -428,35 +499,38 @@
bullets.splice(i, 1);
continue;
}
// Düşman çarpışması
- for (var j = enemies.length - 1; j >= 0; j--) {
- var e = enemies[j];
- if (b.intersects(e)) {
- if (e.hit()) {
- // Düşman öldü
- score += 10 * currentWave;
- scoreText.setText(score);
- LK.setScore(score);
- // Patlama efekti
- LK.effects.explosion(e.x, e.y, {
- color: 0xffa500,
- radius: 80,
- duration: 400
- });
- // Ekran sarsıntısı
- LK.effects.shakeScreen(400, 12);
- enemies.splice(j, 1);
- waveEnemiesLeft--;
- // Güçlendirme düşürme şansı
- if (Math.random() < 0.12) {
- spawnPowerUp();
+ var _loop = function _loop() {
+ e = enemies[j];
+ if (b.intersects(e)) {
+ 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();
+ }
}
+ b.destroy();
+ bullets.splice(i, 1);
+ return 1; // break
}
- b.destroy();
- bullets.splice(i, 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--) {
@@ -515,32 +589,35 @@
// Boss aktifse boss update ve çarpışma kontrolü
if (bossActive && boss) {
boss.update();
// Boss'a mermi çarpması
- for (var i = bullets.length - 1; i >= 0; i--) {
- var b = bullets[i];
- if (b.intersects(boss)) {
- if (boss.hit()) {
- // Boss öldü
- score += 500 * currentWave;
- scoreText.setText(score);
- LK.setScore(score);
- // Boss patlama efekti
- LK.effects.explosion(boss.x, boss.y, {
- color: 0xff2222,
- radius: 180,
- duration: 900
- });
- // Ekran sarsıntısı
- LK.effects.shakeScreen(900, 24);
- bossActive = false;
- boss = null;
- currentWave++;
- startWave(currentWave);
+ 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.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();
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