User prompt
Please fix the bug: 'Uncaught TypeError: storage.getItem is not a function' in or related to this line: 'var coins = storage.getItem("coins");' Line Number: 2013
User prompt
Please fix the bug: 'Uncaught TypeError: storage.get is not a function' in or related to this line: 'var coins = storage.get("coins");' Line Number: 2013
User prompt
SHOP A BASINCA KARAKTER İÇİN YENİ SKİNLER OLSUN 10 TANE VE 1. Sİ DIŞINDA DİĞERLERİ KİLİTLİ OLSUN ONLAR TOPLADIĞI PARALAR İLE PARAYA GÖRE AÇILSIN YANİ YENİ ASSETLER
User prompt
ŞEKİLLER OYUNA BAŞLAYINCA VE MAĞAZAYA GİRİNCE OLMASIN
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'x')' in or related to this line: 'var newX = ship.x + dx;' Line Number: 1530
User prompt
YAZININ ÜSTÜNDEKİ ŞEKİLLERİ KALDIIIIIIIIIIIIIIR
User prompt
oyunun ismini üstüne şekil ekleme
User prompt
baka yanı assetleri kullana ama her yere yay yazıların üstüne gelmesin ve boş yer kelmasın
User prompt
etfara daha çok ekle ve tuşların üstüne oyunun ismini yaz
User prompt
hayır o kutularyeni assetler
User prompt
tuşların arkasına asset ekle ve etrafa kutulşar ekle ama hepsi farklı asset
User prompt
yazıları ingilizce yap
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'x')' in or related to this line: 'var dx = x - ship.x;' Line Number: 1496
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'x')' in or related to this line: 'pulseEffect.show(ship.x, ship.y);' Line Number: 1467
User prompt
şimdi oyuna basıldığı anda gelecek başla ve mağaza tuşu ekle bu başlaya basıldığında oyuna başlansın mağazayı düşünürüz
User prompt
şimdi başlangıça başla ve mağaza tuşu ekle
User prompt
çok çok az sola al
User prompt
ya bakınca güzel dursun
User prompt
biraz sağa çek
User prompt
sol altta level sayısı yazsın
User prompt
her bölüme farklı enemieler ekle
User prompt
azcık daha yavaşlat
User prompt
şu dönen biraz yavaşlasın
User prompt
daha fazla kötü karakter ekle ama yani yeni asset ve hepsinin haraketleri hfarklı olsun mesela biri playerın biraz yakın bir yerine ışınlanabilsin
User prompt
dahaçok bölümler ekle böyle 20 bölüm boss olsun bir sürü bölüm
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Ritim Kaynağı (Collectible) var Beat = Container.expand(function () { var self = Container.call(this); var beatGfx = self.attachAsset('beat', { anchorX: 0.5, anchorY: 0.5 }); return self; }); // Boss Kristali var Boss = Container.expand(function () { var self = Container.call(this); var bossGfx = self.attachAsset('boss', { anchorX: 0.5, anchorY: 0.5 }); self.hp = 5; self.pulse = function () { tween(bossGfx, { scaleX: 1.2, scaleY: 1.2 }, { duration: 100, onFinish: function onFinish() { tween(bossGfx, { scaleX: 1, scaleY: 1 }, { duration: 100 }); } }); }; return self; }); // Düşman (hareketli engel) var Enemy = Container.expand(function () { var self = Container.call(this); var enemyGfx = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); self.dir = 1; // 1: sağ, -1: sol self.speed = 6; self.range = 300; // Hareket aralığı self.baseX = 0; self.init = function (x) { self.baseX = x; }; self.update = function () { self.x += self.dir * self.speed; if (self.x > self.baseX + self.range) self.dir = -1; if (self.x < self.baseX - self.range) self.dir = 1; }; return self; }); // Engeller var Obstacle = Container.expand(function () { var self = Container.call(this); var obsGfx = self.attachAsset('obstacle', { anchorX: 0.5, anchorY: 0.5 }); return self; }); // Ritim Efekti (Pulse) var Pulse = Container.expand(function () { var self = Container.call(this); var pulseGfx = self.attachAsset('pulse', { anchorX: 0.5, anchorY: 0.5, alpha: 0.3 }); self.show = function (x, y) { self.x = x; self.y = y; pulseGfx.scaleX = 0.5; pulseGfx.scaleY = 0.5; pulseGfx.alpha = 0.3; tween(pulseGfx, { scaleX: 1.2, scaleY: 1.2, alpha: 0 }, { duration: 350 }); }; return self; }); // Uzay Gemisi (Player) var Ship = Container.expand(function () { var self = Container.call(this); var shipGfx = self.attachAsset('ship', { anchorX: 0.5, anchorY: 0.5 }); self.energy = 3; // Can self.invincible = false; // Hasar sonrası kısa süreli dokunulmazlık // Enerji kaybı animasyonu self.flash = function () { if (self.invincible) return; self.invincible = true; tween(shipGfx, { alpha: 0.3 }, { duration: 100, easing: tween.linear, onFinish: function onFinish() { tween(shipGfx, { alpha: 1 }, { duration: 200, onFinish: function onFinish() { self.invincible = false; } }); } }); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x0a0033 }); /**** * Game Code ****/ // Müzik (looping, ritmik) // Sesler // Ritim efekti (görsel feedback) // Boss kristali (finalde) // Düşman (hareketli engel) // Engeller // Ritim kaynağı (collectible) // Uzay gemisi (player) // Oyun alanı boyutları var GAME_W = 2048; var GAME_H = 2732; // Ritim parametreleri var BPM = 100; // Dakikadaki vuruş var BEAT_INTERVAL = Math.round(60 * 1000 / BPM); // ms cinsinden var lastBeatTick = 0; // Oyun durumu var score = 0; // Bölüm tanımları (her biri farklı engel, düşman ve beat dizilimi içerir) var LEVELS = [ // 1-19: Normal bölümler, 20: Boss // Her bölüm: {beats, obstacles, enemies} // beats: [{x, y}, ...], obstacles: [{x, y}], enemies: [{x, y, range}] { beats: [{ x: 400, y: 900 }, { x: 800, y: 1000 }, { x: 1200, y: 900 }, { x: 1600, y: 1000 }], obstacles: [{ x: 1024, y: 1400 }], enemies: [{ x: 1024, y: 1200, range: 200 }] }, { beats: [{ x: 350, y: 950 }, { x: 700, y: 1100 }, { x: 1024, y: 950 }, { x: 1350, y: 1100 }, { x: 1700, y: 950 }], obstacles: [{ x: 700, y: 1500 }, { x: 1350, y: 1500 }], enemies: [{ x: 1024, y: 1300, range: 300 }] }, { beats: [{ x: 400, y: 900 }, { x: 800, y: 1100 }, { x: 1200, y: 900 }, { x: 1600, y: 1100 }, { x: 1024, y: 1000 }], obstacles: [{ x: 1024, y: 1400 }, { x: 600, y: 1700 }, { x: 1440, y: 1700 }], enemies: [{ x: 700, y: 1200, range: 200 }, { x: 1350, y: 1200, range: 200 }] }, { beats: [{ x: 350, y: 950 }, { x: 700, y: 1100 }, { x: 1024, y: 950 }, { x: 1350, y: 1100 }, { x: 1700, y: 950 }, { x: 1024, y: 1200 }], obstacles: [{ x: 1024, y: 1400 }, { x: 700, y: 1700 }, { x: 1350, y: 1700 }], enemies: [{ x: 1024, y: 1300, range: 350 }] }, { beats: [{ x: 400, y: 900 }, { x: 800, y: 1000 }, { x: 1200, y: 900 }, { x: 1600, y: 1000 }, { x: 1024, y: 1100 }, { x: 600, y: 1200 }], obstacles: [{ x: 1024, y: 1400 }, { x: 600, y: 1700 }, { x: 1440, y: 1700 }], enemies: [{ x: 700, y: 1200, range: 250 }, { x: 1350, y: 1200, range: 250 }] }, // 6-19: Farklı kombinasyonlar, zorluk artıyor { beats: [{ x: 400, y: 900 }, { x: 800, y: 1000 }, { x: 1200, y: 900 }, { x: 1600, y: 1000 }, { x: 1024, y: 1100 }, { x: 600, y: 1200 }, { x: 1440, y: 1200 }], obstacles: [{ x: 1024, y: 1400 }, { x: 600, y: 1700 }, { x: 1440, y: 1700 }, { x: 1024, y: 2000 }], enemies: [{ x: 700, y: 1200, range: 300 }, { x: 1350, y: 1200, range: 300 }] }, { beats: [{ x: 350, y: 950 }, { x: 700, y: 1100 }, { x: 1024, y: 950 }, { x: 1350, y: 1100 }, { x: 1700, y: 950 }, { x: 1024, y: 1200 }, { x: 800, y: 1300 }], obstacles: [{ x: 1024, y: 1400 }, { x: 700, y: 1700 }, { x: 1350, y: 1700 }, { x: 1024, y: 2000 }], enemies: [{ x: 1024, y: 1300, range: 400 }] }, { beats: [{ x: 400, y: 900 }, { x: 800, y: 1000 }, { x: 1200, y: 900 }, { x: 1600, y: 1000 }, { x: 1024, y: 1100 }, { x: 600, y: 1200 }, { x: 1440, y: 1200 }, { x: 1024, y: 1300 }], obstacles: [{ x: 1024, y: 1400 }, { x: 600, y: 1700 }, { x: 1440, y: 1700 }, { x: 1024, y: 2000 }, { x: 800, y: 2100 }], enemies: [{ x: 700, y: 1200, range: 350 }, { x: 1350, y: 1200, range: 350 }] }, { beats: [{ x: 350, y: 950 }, { x: 700, y: 1100 }, { x: 1024, y: 950 }, { x: 1350, y: 1100 }, { x: 1700, y: 950 }, { x: 1024, y: 1200 }, { x: 800, y: 1300 }, { x: 1240, y: 1300 }], obstacles: [{ x: 1024, y: 1400 }, { x: 700, y: 1700 }, { x: 1350, y: 1700 }, { x: 1024, y: 2000 }, { x: 800, y: 2100 }, { x: 1240, y: 2100 }], enemies: [{ x: 1024, y: 1300, range: 450 }] }, // 10-19: Zorluk artıyor, daha fazla engel ve düşman { beats: [{ x: 400, y: 900 }, { x: 800, y: 1000 }, { x: 1200, y: 900 }, { x: 1600, y: 1000 }, { x: 1024, y: 1100 }, { x: 600, y: 1200 }, { x: 1440, y: 1200 }, { x: 1024, y: 1300 }, { x: 800, y: 1400 }], obstacles: [{ x: 1024, y: 1400 }, { x: 600, y: 1700 }, { x: 1440, y: 1700 }, { x: 1024, y: 2000 }, { x: 800, y: 2100 }, { x: 1240, y: 2100 }], enemies: [{ x: 700, y: 1200, range: 400 }, { x: 1350, y: 1200, range: 400 }] }, { beats: [{ x: 350, y: 950 }, { x: 700, y: 1100 }, { x: 1024, y: 950 }, { x: 1350, y: 1100 }, { x: 1700, y: 950 }, { x: 1024, y: 1200 }, { x: 800, y: 1300 }, { x: 1240, y: 1300 }, { x: 1024, y: 1500 }], obstacles: [{ x: 1024, y: 1400 }, { x: 700, y: 1700 }, { x: 1350, y: 1700 }, { x: 1024, y: 2000 }, { x: 800, y: 2100 }, { x: 1240, y: 2100 }], enemies: [{ x: 1024, y: 1300, range: 500 }] }, { beats: [{ x: 400, y: 900 }, { x: 800, y: 1000 }, { x: 1200, y: 900 }, { x: 1600, y: 1000 }, { x: 1024, y: 1100 }, { x: 600, y: 1200 }, { x: 1440, y: 1200 }, { x: 1024, y: 1300 }, { x: 800, y: 1400 }, { x: 1240, y: 1400 }], obstacles: [{ x: 1024, y: 1400 }, { x: 600, y: 1700 }, { x: 1440, y: 1700 }, { x: 1024, y: 2000 }, { x: 800, y: 2100 }, { x: 1240, y: 2100 }], enemies: [{ x: 700, y: 1200, range: 450 }, { x: 1350, y: 1200, range: 450 }] }, { beats: [{ x: 350, y: 950 }, { x: 700, y: 1100 }, { x: 1024, y: 950 }, { x: 1350, y: 1100 }, { x: 1700, y: 950 }, { x: 1024, y: 1200 }, { x: 800, y: 1300 }, { x: 1240, y: 1300 }, { x: 1024, y: 1500 }, { x: 600, y: 1600 }], obstacles: [{ x: 1024, y: 1400 }, { x: 700, y: 1700 }, { x: 1350, y: 1700 }, { x: 1024, y: 2000 }, { x: 800, y: 2100 }, { x: 1240, y: 2100 }], enemies: [{ x: 1024, y: 1300, range: 550 }] }, { beats: [{ x: 400, y: 900 }, { x: 800, y: 1000 }, { x: 1200, y: 900 }, { x: 1600, y: 1000 }, { x: 1024, y: 1100 }, { x: 600, y: 1200 }, { x: 1440, y: 1200 }, { x: 1024, y: 1300 }, { x: 800, y: 1400 }, { x: 1240, y: 1400 }, { x: 1024, y: 1600 }], obstacles: [{ x: 1024, y: 1400 }, { x: 600, y: 1700 }, { x: 1440, y: 1700 }, { x: 1024, y: 2000 }, { x: 800, y: 2100 }, { x: 1240, y: 2100 }], enemies: [{ x: 700, y: 1200, range: 500 }, { x: 1350, y: 1200, range: 500 }] }, { beats: [{ x: 350, y: 950 }, { x: 700, y: 1100 }, { x: 1024, y: 950 }, { x: 1350, y: 1100 }, { x: 1700, y: 950 }, { x: 1024, y: 1200 }, { x: 800, y: 1300 }, { x: 1240, y: 1300 }, { x: 1024, y: 1500 }, { x: 600, y: 1600 }, { x: 1440, y: 1600 }], obstacles: [{ x: 1024, y: 1400 }, { x: 700, y: 1700 }, { x: 1350, y: 1700 }, { x: 1024, y: 2000 }, { x: 800, y: 2100 }, { x: 1240, y: 2100 }], enemies: [{ x: 1024, y: 1300, range: 600 }] }, { beats: [{ x: 400, y: 900 }, { x: 800, y: 1000 }, { x: 1200, y: 900 }, { x: 1600, y: 1000 }, { x: 1024, y: 1100 }, { x: 600, y: 1200 }, { x: 1440, y: 1200 }, { x: 1024, y: 1300 }, { x: 800, y: 1400 }, { x: 1240, y: 1400 }, { x: 1024, y: 1600 }, { x: 600, y: 1700 }], obstacles: [{ x: 1024, y: 1400 }, { x: 600, y: 1700 }, { x: 1440, y: 1700 }, { x: 1024, y: 2000 }, { x: 800, y: 2100 }, { x: 1240, y: 2100 }], enemies: [{ x: 700, y: 1200, range: 550 }, { x: 1350, y: 1200, range: 550 }] }, { beats: [{ x: 350, y: 950 }, { x: 700, y: 1100 }, { x: 1024, y: 950 }, { x: 1350, y: 1100 }, { x: 1700, y: 950 }, { x: 1024, y: 1200 }, { x: 800, y: 1300 }, { x: 1240, y: 1300 }, { x: 1024, y: 1500 }, { x: 600, y: 1600 }, { x: 1440, y: 1600 }, { x: 1024, y: 1800 }], obstacles: [{ x: 1024, y: 1400 }, { x: 700, y: 1700 }, { x: 1350, y: 1700 }, { x: 1024, y: 2000 }, { x: 800, y: 2100 }, { x: 1240, y: 2100 }], enemies: [{ x: 1024, y: 1300, range: 650 }] }, { beats: [{ x: 400, y: 900 }, { x: 800, y: 1000 }, { x: 1200, y: 900 }, { x: 1600, y: 1000 }, { x: 1024, y: 1100 }, { x: 600, y: 1200 }, { x: 1440, y: 1200 }, { x: 1024, y: 1300 }, { x: 800, y: 1400 }, { x: 1240, y: 1400 }, { x: 1024, y: 1600 }, { x: 600, y: 1700 }, { x: 1440, y: 1700 }], obstacles: [{ x: 1024, y: 1400 }, { x: 600, y: 1700 }, { x: 1440, y: 1700 }, { x: 1024, y: 2000 }, { x: 800, y: 2100 }, { x: 1240, y: 2100 }], enemies: [{ x: 700, y: 1200, range: 600 }, { x: 1350, y: 1200, range: 600 }] }, { beats: [{ x: 350, y: 950 }, { x: 700, y: 1100 }, { x: 1024, y: 950 }, { x: 1350, y: 1100 }, { x: 1700, y: 950 }, { x: 1024, y: 1200 }, { x: 800, y: 1300 }, { x: 1240, y: 1300 }, { x: 1024, y: 1500 }, { x: 600, y: 1600 }, { x: 1440, y: 1600 }, { x: 1024, y: 1800 }, { x: 800, y: 1900 }], obstacles: [{ x: 1024, y: 1400 }, { x: 700, y: 1700 }, { x: 1350, y: 1700 }, { x: 1024, y: 2000 }, { x: 800, y: 2100 }, { x: 1240, y: 2100 }], enemies: [{ x: 1024, y: 1300, range: 700 }] }, // 20. bölüm: Boss { boss: true }]; var maxScore = 0; // Her bölümde dinamik olarak ayarlanacak var energy = 3; var level = 1; var onBoss = false; var bossDefeated = false; // Ana objeler var ship; var beats = []; var obstacles = []; var enemies = []; var boss; var pulseEffect; // GUI var scoreTxt = new Text2('0', { size: 120, fill: "#fff" }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); var energyTxt = new Text2('♥♥♥', { size: 90, fill: 0xFF5252 }); energyTxt.anchor.set(1, 0); LK.gui.topRight.addChild(energyTxt); // Ritim göstergesi var beatTxt = new Text2('♪', { size: 100, fill: 0xFFE066 }); beatTxt.anchor.set(0.5, 0.5); LK.gui.bottom.addChild(beatTxt); // Ritim efekti pulseEffect = new Pulse(); game.addChild(pulseEffect); // Oyun başlatıcı function startLevel() { // Temizle for (var i = 0; i < beats.length; i++) beats[i].destroy(); for (var i = 0; i < obstacles.length; i++) obstacles[i].destroy(); for (var i = 0; i < enemies.length; i++) enemies[i].destroy(); beats = []; obstacles = []; enemies = []; if (boss) { boss.destroy(); boss = null; } onBoss = false; bossDefeated = false; score = 0; energy = 3; // Bölüm verisi var lvl = LEVELS[(level - 1) % LEVELS.length]; if (lvl && lvl.boss) { startBoss(); return; } // Uzay gemisi if (ship) ship.destroy(); ship = new Ship(); ship.x = GAME_W / 2; ship.y = GAME_H - 400; game.addChild(ship); // Ritim kaynakları (beat) maxScore = lvl.beats.length; scoreTxt.setText(score + "/" + maxScore); energyTxt.setText("♥".repeat(energy)); for (var i = 0; i < lvl.beats.length; i++) { var b = new Beat(); b.x = lvl.beats[i].x; b.y = lvl.beats[i].y; beats.push(b); game.addChild(b); } // Engeller for (var i = 0; i < lvl.obstacles.length; i++) { var obs = new Obstacle(); obs.x = lvl.obstacles[i].x; obs.y = lvl.obstacles[i].y; obstacles.push(obs); game.addChild(obs); } // Düşmanlar for (var i = 0; i < lvl.enemies.length; i++) { var e = new Enemy(); e.x = lvl.enemies[i].x; e.y = lvl.enemies[i].y; e.init(e.x); if (typeof lvl.enemies[i].range === "number") e.range = lvl.enemies[i].range; enemies.push(e); game.addChild(e); } } // Boss bölümü başlat function startBoss() { onBoss = true; for (var i = 0; i < beats.length; i++) beats[i].destroy(); for (var i = 0; i < obstacles.length; i++) obstacles[i].destroy(); for (var i = 0; i < enemies.length; i++) enemies[i].destroy(); beats = []; obstacles = []; enemies = []; scoreTxt.setText("BOSS"); boss = new Boss(); boss.x = GAME_W / 2; boss.y = 700; game.addChild(boss); LK.getSound('boss').play(); } // Ritim tick'i function onBeat() { // Ritim efekti pulseEffect.show(ship.x, ship.y); // Ritim göstergesi animasyonu tween(beatTxt, { scaleX: 1.3, scaleY: 1.3 }, { duration: 80, onFinish: function onFinish() { tween(beatTxt, { scaleX: 1, scaleY: 1 }, { duration: 120 }); } }); // Adım sesi LK.getSound('step').play(); } // Ritimle hareket için bekleyen dokunuş var moveQueued = false; var queuedMove = { x: 0, y: 0 }; // Hareket yönleri function getMoveDir(x, y) { var dx = x - ship.x; var dy = y - ship.y; var dist = Math.sqrt(dx * dx + dy * dy); if (dist < 80) return { dx: 0, dy: 0 }; var angle = Math.atan2(dy, dx); var step = 220; return { dx: Math.round(Math.cos(angle) * step), dy: Math.round(Math.sin(angle) * step) }; } // Hareketi uygula (ritimle) function doMove() { if (!moveQueued) return; var dx = queuedMove.dx; var dy = queuedMove.dy; var newX = ship.x + dx; var newY = ship.y + dy; // Sınır kontrolü if (newX < 120) newX = 120; if (newX > GAME_W - 120) newX = GAME_W - 120; if (newY < 300) newY = 300; if (newY > GAME_H - 200) newY = GAME_H - 200; // Engel çarpışma kontrolü var blocked = false; for (var i = 0; i < obstacles.length; i++) { if (rectsIntersect(newX, newY, ship, obstacles[i].x, obstacles[i].y, obstacles[i])) { blocked = true; break; } } if (!blocked) { tween(ship, { x: newX, y: newY }, { duration: 120, easing: tween.cubicOut }); } moveQueued = false; } // Dikdörtgen çarpışma (merkezden) function rectsIntersect(x1, y1, obj1, x2, y2, obj2) { var w1 = obj1.width || 140, h1 = obj1.height || 140; var w2 = obj2.width || 160, h2 = obj2.height || 60; return Math.abs(x1 - x2) < (w1 + w2) / 2 - 10 && Math.abs(y1 - y2) < (h1 + h2) / 2 - 10; } // Dokunma ile hareket yönü seç game.down = function (x, y, obj) { if (onBoss && bossDefeated) return; var dir = getMoveDir(x, y); queuedMove.dx = dir.dx; queuedMove.dy = dir.dy; moveQueued = true; }; // Hareketli engeller ve boss için update game.update = function () { // Ritim tick'i if (LK.ticks - lastBeatTick >= Math.round(BEAT_INTERVAL / 16.7)) { lastBeatTick = LK.ticks; onBeat(); doMove(); } // Düşman hareketi for (var i = 0; i < enemies.length; i++) { enemies[i].update(); } // Düşman çarpışma for (var i = 0; i < enemies.length; i++) { if (ship.intersects(enemies[i]) && !ship.invincible) { energy--; energyTxt.setText("♥".repeat(energy)); ship.flash(); LK.getSound('hit').play(); if (energy <= 0) { LK.effects.flashScreen(0xff0000, 800); LK.showGameOver(); return; } } } // Ritim kaynağı toplama for (var i = beats.length - 1; i >= 0; i--) { if (ship.intersects(beats[i])) { LK.getSound('collect').play(); beats[i].destroy(); beats.splice(i, 1); score++; scoreTxt.setText(score + "/" + maxScore); if (score >= maxScore) { level++; if (level > LEVELS.length) { LK.showYouWin(); return; } LK.setTimeout(function () { startLevel(); }, 800); return; } } } // Boss bölümü if (onBoss && boss && !bossDefeated) { // Boss'a ritimle çarpınca hasar ver if (ship.intersects(boss) && moveQueued) { boss.hp--; boss.pulse(); LK.getSound('collect').play(); if (boss.hp <= 0) { bossDefeated = true; LK.effects.flashScreen(0x00e676, 1200); // Son boss ise oyunu bitir, değilse sonraki bölüme geç if (level >= LEVELS.length) { LK.showYouWin(); } else { level++; LK.setTimeout(function () { startLevel(); }, 1200); } return; } } // Boss'a çarpınca enerji kaybı if (ship.intersects(boss) && !ship.invincible && !moveQueued) { energy--; energyTxt.setText("♥".repeat(energy)); ship.flash(); LK.getSound('hit').play(); if (energy <= 0) { LK.effects.flashScreen(0xff0000, 800); LK.showGameOver(); return; } } } }; // Müzik başlat LK.playMusic('bgmusic', { fade: { start: 0, end: 1, duration: 1200 } }); // Oyun başlat startLevel();
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// Ritim Kaynağı (Collectible)
var Beat = Container.expand(function () {
var self = Container.call(this);
var beatGfx = self.attachAsset('beat', {
anchorX: 0.5,
anchorY: 0.5
});
return self;
});
// Boss Kristali
var Boss = Container.expand(function () {
var self = Container.call(this);
var bossGfx = self.attachAsset('boss', {
anchorX: 0.5,
anchorY: 0.5
});
self.hp = 5;
self.pulse = function () {
tween(bossGfx, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 100,
onFinish: function onFinish() {
tween(bossGfx, {
scaleX: 1,
scaleY: 1
}, {
duration: 100
});
}
});
};
return self;
});
// Düşman (hareketli engel)
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGfx = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.dir = 1; // 1: sağ, -1: sol
self.speed = 6;
self.range = 300; // Hareket aralığı
self.baseX = 0;
self.init = function (x) {
self.baseX = x;
};
self.update = function () {
self.x += self.dir * self.speed;
if (self.x > self.baseX + self.range) self.dir = -1;
if (self.x < self.baseX - self.range) self.dir = 1;
};
return self;
});
// Engeller
var Obstacle = Container.expand(function () {
var self = Container.call(this);
var obsGfx = self.attachAsset('obstacle', {
anchorX: 0.5,
anchorY: 0.5
});
return self;
});
// Ritim Efekti (Pulse)
var Pulse = Container.expand(function () {
var self = Container.call(this);
var pulseGfx = self.attachAsset('pulse', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.3
});
self.show = function (x, y) {
self.x = x;
self.y = y;
pulseGfx.scaleX = 0.5;
pulseGfx.scaleY = 0.5;
pulseGfx.alpha = 0.3;
tween(pulseGfx, {
scaleX: 1.2,
scaleY: 1.2,
alpha: 0
}, {
duration: 350
});
};
return self;
});
// Uzay Gemisi (Player)
var Ship = Container.expand(function () {
var self = Container.call(this);
var shipGfx = self.attachAsset('ship', {
anchorX: 0.5,
anchorY: 0.5
});
self.energy = 3; // Can
self.invincible = false; // Hasar sonrası kısa süreli dokunulmazlık
// Enerji kaybı animasyonu
self.flash = function () {
if (self.invincible) return;
self.invincible = true;
tween(shipGfx, {
alpha: 0.3
}, {
duration: 100,
easing: tween.linear,
onFinish: function onFinish() {
tween(shipGfx, {
alpha: 1
}, {
duration: 200,
onFinish: function onFinish() {
self.invincible = false;
}
});
}
});
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x0a0033
});
/****
* Game Code
****/
// Müzik (looping, ritmik)
// Sesler
// Ritim efekti (görsel feedback)
// Boss kristali (finalde)
// Düşman (hareketli engel)
// Engeller
// Ritim kaynağı (collectible)
// Uzay gemisi (player)
// Oyun alanı boyutları
var GAME_W = 2048;
var GAME_H = 2732;
// Ritim parametreleri
var BPM = 100; // Dakikadaki vuruş
var BEAT_INTERVAL = Math.round(60 * 1000 / BPM); // ms cinsinden
var lastBeatTick = 0;
// Oyun durumu
var score = 0;
// Bölüm tanımları (her biri farklı engel, düşman ve beat dizilimi içerir)
var LEVELS = [
// 1-19: Normal bölümler, 20: Boss
// Her bölüm: {beats, obstacles, enemies}
// beats: [{x, y}, ...], obstacles: [{x, y}], enemies: [{x, y, range}]
{
beats: [{
x: 400,
y: 900
}, {
x: 800,
y: 1000
}, {
x: 1200,
y: 900
}, {
x: 1600,
y: 1000
}],
obstacles: [{
x: 1024,
y: 1400
}],
enemies: [{
x: 1024,
y: 1200,
range: 200
}]
}, {
beats: [{
x: 350,
y: 950
}, {
x: 700,
y: 1100
}, {
x: 1024,
y: 950
}, {
x: 1350,
y: 1100
}, {
x: 1700,
y: 950
}],
obstacles: [{
x: 700,
y: 1500
}, {
x: 1350,
y: 1500
}],
enemies: [{
x: 1024,
y: 1300,
range: 300
}]
}, {
beats: [{
x: 400,
y: 900
}, {
x: 800,
y: 1100
}, {
x: 1200,
y: 900
}, {
x: 1600,
y: 1100
}, {
x: 1024,
y: 1000
}],
obstacles: [{
x: 1024,
y: 1400
}, {
x: 600,
y: 1700
}, {
x: 1440,
y: 1700
}],
enemies: [{
x: 700,
y: 1200,
range: 200
}, {
x: 1350,
y: 1200,
range: 200
}]
}, {
beats: [{
x: 350,
y: 950
}, {
x: 700,
y: 1100
}, {
x: 1024,
y: 950
}, {
x: 1350,
y: 1100
}, {
x: 1700,
y: 950
}, {
x: 1024,
y: 1200
}],
obstacles: [{
x: 1024,
y: 1400
}, {
x: 700,
y: 1700
}, {
x: 1350,
y: 1700
}],
enemies: [{
x: 1024,
y: 1300,
range: 350
}]
}, {
beats: [{
x: 400,
y: 900
}, {
x: 800,
y: 1000
}, {
x: 1200,
y: 900
}, {
x: 1600,
y: 1000
}, {
x: 1024,
y: 1100
}, {
x: 600,
y: 1200
}],
obstacles: [{
x: 1024,
y: 1400
}, {
x: 600,
y: 1700
}, {
x: 1440,
y: 1700
}],
enemies: [{
x: 700,
y: 1200,
range: 250
}, {
x: 1350,
y: 1200,
range: 250
}]
},
// 6-19: Farklı kombinasyonlar, zorluk artıyor
{
beats: [{
x: 400,
y: 900
}, {
x: 800,
y: 1000
}, {
x: 1200,
y: 900
}, {
x: 1600,
y: 1000
}, {
x: 1024,
y: 1100
}, {
x: 600,
y: 1200
}, {
x: 1440,
y: 1200
}],
obstacles: [{
x: 1024,
y: 1400
}, {
x: 600,
y: 1700
}, {
x: 1440,
y: 1700
}, {
x: 1024,
y: 2000
}],
enemies: [{
x: 700,
y: 1200,
range: 300
}, {
x: 1350,
y: 1200,
range: 300
}]
}, {
beats: [{
x: 350,
y: 950
}, {
x: 700,
y: 1100
}, {
x: 1024,
y: 950
}, {
x: 1350,
y: 1100
}, {
x: 1700,
y: 950
}, {
x: 1024,
y: 1200
}, {
x: 800,
y: 1300
}],
obstacles: [{
x: 1024,
y: 1400
}, {
x: 700,
y: 1700
}, {
x: 1350,
y: 1700
}, {
x: 1024,
y: 2000
}],
enemies: [{
x: 1024,
y: 1300,
range: 400
}]
}, {
beats: [{
x: 400,
y: 900
}, {
x: 800,
y: 1000
}, {
x: 1200,
y: 900
}, {
x: 1600,
y: 1000
}, {
x: 1024,
y: 1100
}, {
x: 600,
y: 1200
}, {
x: 1440,
y: 1200
}, {
x: 1024,
y: 1300
}],
obstacles: [{
x: 1024,
y: 1400
}, {
x: 600,
y: 1700
}, {
x: 1440,
y: 1700
}, {
x: 1024,
y: 2000
}, {
x: 800,
y: 2100
}],
enemies: [{
x: 700,
y: 1200,
range: 350
}, {
x: 1350,
y: 1200,
range: 350
}]
}, {
beats: [{
x: 350,
y: 950
}, {
x: 700,
y: 1100
}, {
x: 1024,
y: 950
}, {
x: 1350,
y: 1100
}, {
x: 1700,
y: 950
}, {
x: 1024,
y: 1200
}, {
x: 800,
y: 1300
}, {
x: 1240,
y: 1300
}],
obstacles: [{
x: 1024,
y: 1400
}, {
x: 700,
y: 1700
}, {
x: 1350,
y: 1700
}, {
x: 1024,
y: 2000
}, {
x: 800,
y: 2100
}, {
x: 1240,
y: 2100
}],
enemies: [{
x: 1024,
y: 1300,
range: 450
}]
},
// 10-19: Zorluk artıyor, daha fazla engel ve düşman
{
beats: [{
x: 400,
y: 900
}, {
x: 800,
y: 1000
}, {
x: 1200,
y: 900
}, {
x: 1600,
y: 1000
}, {
x: 1024,
y: 1100
}, {
x: 600,
y: 1200
}, {
x: 1440,
y: 1200
}, {
x: 1024,
y: 1300
}, {
x: 800,
y: 1400
}],
obstacles: [{
x: 1024,
y: 1400
}, {
x: 600,
y: 1700
}, {
x: 1440,
y: 1700
}, {
x: 1024,
y: 2000
}, {
x: 800,
y: 2100
}, {
x: 1240,
y: 2100
}],
enemies: [{
x: 700,
y: 1200,
range: 400
}, {
x: 1350,
y: 1200,
range: 400
}]
}, {
beats: [{
x: 350,
y: 950
}, {
x: 700,
y: 1100
}, {
x: 1024,
y: 950
}, {
x: 1350,
y: 1100
}, {
x: 1700,
y: 950
}, {
x: 1024,
y: 1200
}, {
x: 800,
y: 1300
}, {
x: 1240,
y: 1300
}, {
x: 1024,
y: 1500
}],
obstacles: [{
x: 1024,
y: 1400
}, {
x: 700,
y: 1700
}, {
x: 1350,
y: 1700
}, {
x: 1024,
y: 2000
}, {
x: 800,
y: 2100
}, {
x: 1240,
y: 2100
}],
enemies: [{
x: 1024,
y: 1300,
range: 500
}]
}, {
beats: [{
x: 400,
y: 900
}, {
x: 800,
y: 1000
}, {
x: 1200,
y: 900
}, {
x: 1600,
y: 1000
}, {
x: 1024,
y: 1100
}, {
x: 600,
y: 1200
}, {
x: 1440,
y: 1200
}, {
x: 1024,
y: 1300
}, {
x: 800,
y: 1400
}, {
x: 1240,
y: 1400
}],
obstacles: [{
x: 1024,
y: 1400
}, {
x: 600,
y: 1700
}, {
x: 1440,
y: 1700
}, {
x: 1024,
y: 2000
}, {
x: 800,
y: 2100
}, {
x: 1240,
y: 2100
}],
enemies: [{
x: 700,
y: 1200,
range: 450
}, {
x: 1350,
y: 1200,
range: 450
}]
}, {
beats: [{
x: 350,
y: 950
}, {
x: 700,
y: 1100
}, {
x: 1024,
y: 950
}, {
x: 1350,
y: 1100
}, {
x: 1700,
y: 950
}, {
x: 1024,
y: 1200
}, {
x: 800,
y: 1300
}, {
x: 1240,
y: 1300
}, {
x: 1024,
y: 1500
}, {
x: 600,
y: 1600
}],
obstacles: [{
x: 1024,
y: 1400
}, {
x: 700,
y: 1700
}, {
x: 1350,
y: 1700
}, {
x: 1024,
y: 2000
}, {
x: 800,
y: 2100
}, {
x: 1240,
y: 2100
}],
enemies: [{
x: 1024,
y: 1300,
range: 550
}]
}, {
beats: [{
x: 400,
y: 900
}, {
x: 800,
y: 1000
}, {
x: 1200,
y: 900
}, {
x: 1600,
y: 1000
}, {
x: 1024,
y: 1100
}, {
x: 600,
y: 1200
}, {
x: 1440,
y: 1200
}, {
x: 1024,
y: 1300
}, {
x: 800,
y: 1400
}, {
x: 1240,
y: 1400
}, {
x: 1024,
y: 1600
}],
obstacles: [{
x: 1024,
y: 1400
}, {
x: 600,
y: 1700
}, {
x: 1440,
y: 1700
}, {
x: 1024,
y: 2000
}, {
x: 800,
y: 2100
}, {
x: 1240,
y: 2100
}],
enemies: [{
x: 700,
y: 1200,
range: 500
}, {
x: 1350,
y: 1200,
range: 500
}]
}, {
beats: [{
x: 350,
y: 950
}, {
x: 700,
y: 1100
}, {
x: 1024,
y: 950
}, {
x: 1350,
y: 1100
}, {
x: 1700,
y: 950
}, {
x: 1024,
y: 1200
}, {
x: 800,
y: 1300
}, {
x: 1240,
y: 1300
}, {
x: 1024,
y: 1500
}, {
x: 600,
y: 1600
}, {
x: 1440,
y: 1600
}],
obstacles: [{
x: 1024,
y: 1400
}, {
x: 700,
y: 1700
}, {
x: 1350,
y: 1700
}, {
x: 1024,
y: 2000
}, {
x: 800,
y: 2100
}, {
x: 1240,
y: 2100
}],
enemies: [{
x: 1024,
y: 1300,
range: 600
}]
}, {
beats: [{
x: 400,
y: 900
}, {
x: 800,
y: 1000
}, {
x: 1200,
y: 900
}, {
x: 1600,
y: 1000
}, {
x: 1024,
y: 1100
}, {
x: 600,
y: 1200
}, {
x: 1440,
y: 1200
}, {
x: 1024,
y: 1300
}, {
x: 800,
y: 1400
}, {
x: 1240,
y: 1400
}, {
x: 1024,
y: 1600
}, {
x: 600,
y: 1700
}],
obstacles: [{
x: 1024,
y: 1400
}, {
x: 600,
y: 1700
}, {
x: 1440,
y: 1700
}, {
x: 1024,
y: 2000
}, {
x: 800,
y: 2100
}, {
x: 1240,
y: 2100
}],
enemies: [{
x: 700,
y: 1200,
range: 550
}, {
x: 1350,
y: 1200,
range: 550
}]
}, {
beats: [{
x: 350,
y: 950
}, {
x: 700,
y: 1100
}, {
x: 1024,
y: 950
}, {
x: 1350,
y: 1100
}, {
x: 1700,
y: 950
}, {
x: 1024,
y: 1200
}, {
x: 800,
y: 1300
}, {
x: 1240,
y: 1300
}, {
x: 1024,
y: 1500
}, {
x: 600,
y: 1600
}, {
x: 1440,
y: 1600
}, {
x: 1024,
y: 1800
}],
obstacles: [{
x: 1024,
y: 1400
}, {
x: 700,
y: 1700
}, {
x: 1350,
y: 1700
}, {
x: 1024,
y: 2000
}, {
x: 800,
y: 2100
}, {
x: 1240,
y: 2100
}],
enemies: [{
x: 1024,
y: 1300,
range: 650
}]
}, {
beats: [{
x: 400,
y: 900
}, {
x: 800,
y: 1000
}, {
x: 1200,
y: 900
}, {
x: 1600,
y: 1000
}, {
x: 1024,
y: 1100
}, {
x: 600,
y: 1200
}, {
x: 1440,
y: 1200
}, {
x: 1024,
y: 1300
}, {
x: 800,
y: 1400
}, {
x: 1240,
y: 1400
}, {
x: 1024,
y: 1600
}, {
x: 600,
y: 1700
}, {
x: 1440,
y: 1700
}],
obstacles: [{
x: 1024,
y: 1400
}, {
x: 600,
y: 1700
}, {
x: 1440,
y: 1700
}, {
x: 1024,
y: 2000
}, {
x: 800,
y: 2100
}, {
x: 1240,
y: 2100
}],
enemies: [{
x: 700,
y: 1200,
range: 600
}, {
x: 1350,
y: 1200,
range: 600
}]
}, {
beats: [{
x: 350,
y: 950
}, {
x: 700,
y: 1100
}, {
x: 1024,
y: 950
}, {
x: 1350,
y: 1100
}, {
x: 1700,
y: 950
}, {
x: 1024,
y: 1200
}, {
x: 800,
y: 1300
}, {
x: 1240,
y: 1300
}, {
x: 1024,
y: 1500
}, {
x: 600,
y: 1600
}, {
x: 1440,
y: 1600
}, {
x: 1024,
y: 1800
}, {
x: 800,
y: 1900
}],
obstacles: [{
x: 1024,
y: 1400
}, {
x: 700,
y: 1700
}, {
x: 1350,
y: 1700
}, {
x: 1024,
y: 2000
}, {
x: 800,
y: 2100
}, {
x: 1240,
y: 2100
}],
enemies: [{
x: 1024,
y: 1300,
range: 700
}]
},
// 20. bölüm: Boss
{
boss: true
}];
var maxScore = 0; // Her bölümde dinamik olarak ayarlanacak
var energy = 3;
var level = 1;
var onBoss = false;
var bossDefeated = false;
// Ana objeler
var ship;
var beats = [];
var obstacles = [];
var enemies = [];
var boss;
var pulseEffect;
// GUI
var scoreTxt = new Text2('0', {
size: 120,
fill: "#fff"
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var energyTxt = new Text2('♥♥♥', {
size: 90,
fill: 0xFF5252
});
energyTxt.anchor.set(1, 0);
LK.gui.topRight.addChild(energyTxt);
// Ritim göstergesi
var beatTxt = new Text2('♪', {
size: 100,
fill: 0xFFE066
});
beatTxt.anchor.set(0.5, 0.5);
LK.gui.bottom.addChild(beatTxt);
// Ritim efekti
pulseEffect = new Pulse();
game.addChild(pulseEffect);
// Oyun başlatıcı
function startLevel() {
// Temizle
for (var i = 0; i < beats.length; i++) beats[i].destroy();
for (var i = 0; i < obstacles.length; i++) obstacles[i].destroy();
for (var i = 0; i < enemies.length; i++) enemies[i].destroy();
beats = [];
obstacles = [];
enemies = [];
if (boss) {
boss.destroy();
boss = null;
}
onBoss = false;
bossDefeated = false;
score = 0;
energy = 3;
// Bölüm verisi
var lvl = LEVELS[(level - 1) % LEVELS.length];
if (lvl && lvl.boss) {
startBoss();
return;
}
// Uzay gemisi
if (ship) ship.destroy();
ship = new Ship();
ship.x = GAME_W / 2;
ship.y = GAME_H - 400;
game.addChild(ship);
// Ritim kaynakları (beat)
maxScore = lvl.beats.length;
scoreTxt.setText(score + "/" + maxScore);
energyTxt.setText("♥".repeat(energy));
for (var i = 0; i < lvl.beats.length; i++) {
var b = new Beat();
b.x = lvl.beats[i].x;
b.y = lvl.beats[i].y;
beats.push(b);
game.addChild(b);
}
// Engeller
for (var i = 0; i < lvl.obstacles.length; i++) {
var obs = new Obstacle();
obs.x = lvl.obstacles[i].x;
obs.y = lvl.obstacles[i].y;
obstacles.push(obs);
game.addChild(obs);
}
// Düşmanlar
for (var i = 0; i < lvl.enemies.length; i++) {
var e = new Enemy();
e.x = lvl.enemies[i].x;
e.y = lvl.enemies[i].y;
e.init(e.x);
if (typeof lvl.enemies[i].range === "number") e.range = lvl.enemies[i].range;
enemies.push(e);
game.addChild(e);
}
}
// Boss bölümü başlat
function startBoss() {
onBoss = true;
for (var i = 0; i < beats.length; i++) beats[i].destroy();
for (var i = 0; i < obstacles.length; i++) obstacles[i].destroy();
for (var i = 0; i < enemies.length; i++) enemies[i].destroy();
beats = [];
obstacles = [];
enemies = [];
scoreTxt.setText("BOSS");
boss = new Boss();
boss.x = GAME_W / 2;
boss.y = 700;
game.addChild(boss);
LK.getSound('boss').play();
}
// Ritim tick'i
function onBeat() {
// Ritim efekti
pulseEffect.show(ship.x, ship.y);
// Ritim göstergesi animasyonu
tween(beatTxt, {
scaleX: 1.3,
scaleY: 1.3
}, {
duration: 80,
onFinish: function onFinish() {
tween(beatTxt, {
scaleX: 1,
scaleY: 1
}, {
duration: 120
});
}
});
// Adım sesi
LK.getSound('step').play();
}
// Ritimle hareket için bekleyen dokunuş
var moveQueued = false;
var queuedMove = {
x: 0,
y: 0
};
// Hareket yönleri
function getMoveDir(x, y) {
var dx = x - ship.x;
var dy = y - ship.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist < 80) return {
dx: 0,
dy: 0
};
var angle = Math.atan2(dy, dx);
var step = 220;
return {
dx: Math.round(Math.cos(angle) * step),
dy: Math.round(Math.sin(angle) * step)
};
}
// Hareketi uygula (ritimle)
function doMove() {
if (!moveQueued) return;
var dx = queuedMove.dx;
var dy = queuedMove.dy;
var newX = ship.x + dx;
var newY = ship.y + dy;
// Sınır kontrolü
if (newX < 120) newX = 120;
if (newX > GAME_W - 120) newX = GAME_W - 120;
if (newY < 300) newY = 300;
if (newY > GAME_H - 200) newY = GAME_H - 200;
// Engel çarpışma kontrolü
var blocked = false;
for (var i = 0; i < obstacles.length; i++) {
if (rectsIntersect(newX, newY, ship, obstacles[i].x, obstacles[i].y, obstacles[i])) {
blocked = true;
break;
}
}
if (!blocked) {
tween(ship, {
x: newX,
y: newY
}, {
duration: 120,
easing: tween.cubicOut
});
}
moveQueued = false;
}
// Dikdörtgen çarpışma (merkezden)
function rectsIntersect(x1, y1, obj1, x2, y2, obj2) {
var w1 = obj1.width || 140,
h1 = obj1.height || 140;
var w2 = obj2.width || 160,
h2 = obj2.height || 60;
return Math.abs(x1 - x2) < (w1 + w2) / 2 - 10 && Math.abs(y1 - y2) < (h1 + h2) / 2 - 10;
}
// Dokunma ile hareket yönü seç
game.down = function (x, y, obj) {
if (onBoss && bossDefeated) return;
var dir = getMoveDir(x, y);
queuedMove.dx = dir.dx;
queuedMove.dy = dir.dy;
moveQueued = true;
};
// Hareketli engeller ve boss için update
game.update = function () {
// Ritim tick'i
if (LK.ticks - lastBeatTick >= Math.round(BEAT_INTERVAL / 16.7)) {
lastBeatTick = LK.ticks;
onBeat();
doMove();
}
// Düşman hareketi
for (var i = 0; i < enemies.length; i++) {
enemies[i].update();
}
// Düşman çarpışma
for (var i = 0; i < enemies.length; i++) {
if (ship.intersects(enemies[i]) && !ship.invincible) {
energy--;
energyTxt.setText("♥".repeat(energy));
ship.flash();
LK.getSound('hit').play();
if (energy <= 0) {
LK.effects.flashScreen(0xff0000, 800);
LK.showGameOver();
return;
}
}
}
// Ritim kaynağı toplama
for (var i = beats.length - 1; i >= 0; i--) {
if (ship.intersects(beats[i])) {
LK.getSound('collect').play();
beats[i].destroy();
beats.splice(i, 1);
score++;
scoreTxt.setText(score + "/" + maxScore);
if (score >= maxScore) {
level++;
if (level > LEVELS.length) {
LK.showYouWin();
return;
}
LK.setTimeout(function () {
startLevel();
}, 800);
return;
}
}
}
// Boss bölümü
if (onBoss && boss && !bossDefeated) {
// Boss'a ritimle çarpınca hasar ver
if (ship.intersects(boss) && moveQueued) {
boss.hp--;
boss.pulse();
LK.getSound('collect').play();
if (boss.hp <= 0) {
bossDefeated = true;
LK.effects.flashScreen(0x00e676, 1200);
// Son boss ise oyunu bitir, değilse sonraki bölüme geç
if (level >= LEVELS.length) {
LK.showYouWin();
} else {
level++;
LK.setTimeout(function () {
startLevel();
}, 1200);
}
return;
}
}
// Boss'a çarpınca enerji kaybı
if (ship.intersects(boss) && !ship.invincible && !moveQueued) {
energy--;
energyTxt.setText("♥".repeat(energy));
ship.flash();
LK.getSound('hit').play();
if (energy <= 0) {
LK.effects.flashScreen(0xff0000, 800);
LK.showGameOver();
return;
}
}
}
};
// Müzik başlat
LK.playMusic('bgmusic', {
fade: {
start: 0,
end: 1,
duration: 1200
}
});
// Oyun başlat
startLevel();
MÜZİK NOTASI ŞEKLİNDE BİR COİN TARZI BİR ŞEY. In-Game asset. 2d. High contrast. No shadows
MÜZİK NOTASI ŞEKLİNDE BİR UZAYLI CANAVAR BOSS ÇİZ AYAKSIZ. In-Game asset. 2d. High contrast. No shadows
MÜZİK NOTASI ŞEKLİNDE BİR UZAYLI CANAVAR ÇİZ BU KARAKTER ETRAFTA DÖNEBLİYOR ONE GÖRE, AYAKSIZ. SİYAH KULLANMA. GÜLMESİN In-Game asset. 2d. High contrast. No shadows
MÜZİK NOTASI ŞEKLİNDE BİR GFEZEGEN ÇİZ. In-Game asset. 2d. High contrast. No shadows
MÜZİK NOTASI ŞEKLİNDE BİR ENGEL AMA YATAY OLACAK. In-Game asset. 2d. High contrast. No shadows
MÜZİK NOTASI ŞEKLİNDE BİR UZAYLI CANAVAR ÇİZ AMA BU KARAKTER PLAYER VE İSMİ COSMOS ONA GÖRE TASARLA. AYAKSIZ. dONT WRİTE TEXT İN TO İMAGE. NO BLACK In-Game asset. 2d. High contrast. No shadows
MÜZİK NOTASI ŞEKLİNDE BİR UZAYLI CANAVAR ÇİZ AMA BU KARAKTER PLAYER VE İSMİ ASTERA ONA GÖRE TASARLA. AYAKSIZ. dONT WRİTE TEXT İN TO İMAGE. NO BLACK. In-Game asset. 2d. High contrast. No shadows
MÜZİK NOTASI ŞEKLİNDE BİR UZAYLI CANAVAR ÇİZ AMA BU KARAKTER PLAYER VE İSMİ VORTEX ONA GÖRE TASARLA. AYAKSIZ. dONT WRİTE TEXT İN TO İMAGE. NO BLACK.. In-Game asset. 2d. High contrast. No shadows
MÜZİK NOTASI ŞEKLİNDE BİR UZAYLI CANAVAR ÇİZ AMA BU KARAKTER PLAYER VE İSMİ zenith ONA GÖRE TASARLA. AYAKSIZ. dONT WRİTE TEXT İN TO İMAGE. NO BLACK.. In-Game asset. 2d. High contrast. No shadows
MÜZİK NOTASI ŞEKLİNDE BİR UZAYLI CANAVAR ÇİZ AMA BU KARAKTER PLAYER VE İSMİ Aurion ONA GÖRE TASARLA. AYAKSIZ. dONT WRİTE TEXT İN TO İMAGE. NO BLACK.. In-Game asset. 2d. High contrast. No shadows
MÜZİK NOTASI ŞEKLİNDE BİR UZAYLI CANAVAR ÇİZ AMA BU KARAKTER VE İSMİ Quasar ONA GÖRE TASARLA. AYAKSIZ. dONT WRİTE TEXT İN TO İMAGE. NO BLACK.. In-Game asset. 2d. High contrast. No shadows
yatay müzik notası şeklinde bir buton. In-Game asset. 2d. High contrast. No shadows
gezegensiz bir uzay temalı bir görsel background. In-Game asset. 2d. High contrast. No shadows
make a main menu button. In-Game asset. 2d. High contrast. No shadows