User prompt
/**** * Assets ****/ LK.init.shape('overlay', {width:2048, height:2732, color:0x000000, shape:'box'}); LK.init.image('background', {width:2048, height:2732.07, id:'67d97ff4ed4e4720c972d114'}); LK.init.image('background2', {width:2048, height:2850, id:'67dacf6f4c81bb9f3792105a'}); LK.init.image('coin', {width:150, height:150, id:'67d58381540f369ec40716a5'}); LK.init.image('control', {width:299, height:1, id:'67d757ae885017473a98979d'}); LK.init.image('control_2', {width:299, height:201, id:'67d757ae885017473a98979c'}); LK.init.image('counter_background', {width:100, height:100, id:'67db37c416a72d6be958a21e'}); LK.init.image('enemy', {width:150, height:150, id:'67589498e1c6df8afc3f7fdf', flipX:1}); LK.init.image('flyin_enemy', {width:150, height:165, id:'67d6cc20228891638f6d62af', flipX:1}); LK.init.image('heart', {width:100, height:100, id:'67d966dd24ccde20f6adb0eb'}); LK.init.image('particle', {width:100, height:100, id:'67d62caff0905a2251a97ad0'}); LK.init.image('player', {width:150, height:150, id:'67589443e1c6df8afc3f7fd5'}); LK.init.image('tube_2', {width:250, height:375, id:'67d9810d24ccde20f6adb16b', flipY:1}); LK.init.image('tup_1', {width:250, height:375, id:'67d76073885017473a989801'}); LK.init.image('tup_2', {width:250, height:375, id:'67d76073885017473a989801', flipX:1}); LK.init.image('weapon', {width:120, height:120, id:'67d579ab540f369ec4071660'}); // yesil_1; tube_1 ile aynı işlevselliğe sahip olacak ancak fade in–fade outtan önce inaktif. LK.init.image('yesil_1', {width:250, height:375, id:'67d76073885017473a989801', flipX:1, flipY:1, orientation:3}); /**** * Classes ****/ // Coin class var Coin = Container.expand(function () { var self = Container.call(this); var coinGraphics = self.attachAsset('coin', { anchorX: 0.5, anchorY: 0.5 }); self.velocity = 5; self.zIndex = 15; self.update = function () { self.x -= self.velocity; }; }); // Enemy class var Enemy = Container.expand(function () { var self = Container.call(this); var enemyGraphics = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.zIndex = 10; self.canDamage = true; self.update = function () { self.x -= self.speed; if (self.x < -50) self.destroy(); }; }); // FlyinEnemy class var FlyinEnemy = Container.expand(function () { var self = Container.call(this); var flyinEnemyGraphics = self.attachAsset('flyin_enemy', { anchorX: 0.5, anchorY: 0 }); self.speed = 5; self.zIndex = 10; self.canDamage = true; self.homing = false; // false: eski davranış, true: oyuncuya yönelik self.vx = 0; self.vy = 0; self.update = function () { if (!self.homing) { self.x -= self.speed; if (self.x < -50) self.destroy(); } else { self.x += self.vx; self.y += self.vy; if (self.x < -200 || self.x > 2248 || self.y < -200 || self.y > 2932) self.destroy(); } }; }); // Player class var Player = Container.expand(function () { var self = Container.call(this); var playerGraphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.jumpHeight = 40; self.isJumping = false; self.velocityY = 0; self.isFalling = false; self.fallSpeed = 0; self.fallAcceleration = 0.7; self.fallTargetY = 2732 / 2 - 7; self.zIndex = 20; self.hearts = typeof remainingHearts !== 'undefined' ? remainingHearts : 3; self.update = function () { self.prevY = self.y; if (self.isFalling) { self.y += self.fallSpeed; self.fallSpeed += self.fallAcceleration; if (self.y >= self.fallTargetY) { self.y = self.fallTargetY; self.isFalling = false; self.fallSpeed = 0; game.weaponEnabled = true; } } self.prevY = self.y; if (self.isJumping) { self.y += self.velocityY; self.velocityY += 0.7; if (self.y >= 2732 / 2 - 3) { self.y = 2732 / 2 - 9; self.isJumping = false; self.velocityY = 0; } } }; self.invulnerable = false; self.hit = function () { if (!self.invulnerable) { self.loseHeart(); self.invulnerable = true; LK.setTimeout(function () { self.invulnerable = false; }, 500); } }; self.jump = function () { if (!self.isJumping) { self.isJumping = true; self.velocityY = -self.jumpHeight; } }; self.loseHeart = function () { self.hearts--; playerDeaths++; if (playerDeaths === 1 && hearts[0]) hearts[0].destroy(); else if (playerDeaths === 2 && hearts[1]) hearts[1].destroy(); else if (playerDeaths === 3 && hearts[2]) hearts[2].destroy(); remainingHearts = self.hearts; if (hearts.length === 0) { for (var i = enemies.length - 1; i >= 0; i--) { enemies[i].destroy(); enemies.splice(i, 1); } for (var i = flyinEnemies.length - 1; i >= 0; i--) { flyinEnemies[i].destroy(); flyinEnemies.splice(i, 1); } for (var i = coins.length - 1; i >= 0; i--) { coins[i].destroy(); coins.splice(i, 1); } self.destroy(); game.weaponEnabled = false; } }; }); // ScrollingBackground class var ScrollingBackground = Container.expand(function () { var self = Container.call(this); self.bg1 = LK.getAsset('background', { anchorX: 0, anchorY: 0 }); self.bg1.x = 0; self.bg1.y = 0; self.addChild(self.bg1); self.bg2 = LK.getAsset('background', { anchorX: 1, anchorY: 0 }); self.bg2.scaleX = -1; self.bg2.x = self.bg1.width; self.bg2.y = 0; self.addChild(self.bg2); self.speed = 2; self.update = function () { self.bg1.x -= self.speed; self.bg2.x -= self.speed; if (self.bg1.x + self.bg1.width <= 0) self.bg1.x = self.bg2.x + self.bg2.width; if (self.bg2.x + self.bg2.width <= 0) self.bg2.x = self.bg1.x + self.bg1.width; }; }); // ScrollingBackground2 class var ScrollingBackground2 = Container.expand(function () { var self = Container.call(this); var bg1 = LK.getAsset('background2', { anchorX: 0, anchorY: 0 }); bg1.x = 0; bg1.y = 0; self.addChild(bg1); var bg2 = LK.getAsset('background2', { anchorX: 1, anchorY: 0 }); bg2.scaleX = -1; bg2.x = bg1.width; bg2.y = 0; self.addChild(bg2); self.speed = 2; self.update = function () { bg1.x -= self.speed; bg2.x -= self.speed; if (bg1.x + bg1.width <= 0) bg1.x = bg2.x + bg2.width; if (bg2.x + bg2.width <= 0) bg2.x = bg1.x + bg1.width; }; }); // Tube class – tube_1, asset "tup_1" var Tube = Container.expand(function () { var self = Container.call(this); var tubeGraphics = self.attachAsset('tup_1', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.zIndex = 0; self.update = function () { self.x -= self.speed; if (self.x < -50) self.destroy(); }; }); // YesilTube class – tube_1 fonksiyonelliğini aynen taşıyan, fakat asseti "yesil_1" var YesilTube = Container.expand(function () { var self = Container.call(this); var tubeGraphics = self.attachAsset('yesil_1', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.zIndex = 0; self.update = function () { self.x -= self.speed; if (self.x < -50) self.destroy(); }; }); // Tube2 class – tube_2 eskisi gibi var Tube2 = Container.expand(function () { var self = Container.call(this); var tubeGraphics = self.attachAsset('tube_2', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.zIndex = 2000; self.update = function () { self.x -= self.speed; if (self.x < -self.width) self.destroy(); }; }); // Weapon class var Weapon = Container.expand(function () { var self = Container.call(this); var weaponGraphics = self.attachAsset('weapon', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 40; self.update = function () { self.x += self.directionX * self.speed; self.y += self.directionY * self.speed; weaponGraphics.rotation += 0.3; if (Math.abs(game.down.x - self.x) < self.speed && Math.abs(game.down.y - self.y) < self.speed) { self.destroy(); } }; }); /**** * Initialize Game ****/ var game = new LK.Game({ width: 2048, height: 2732, backgroundColor: 0x000000 }); /**** * Global Variables & Flags ****/ var control_2 = LK.getAsset('control_2', { anchorX: 0.5, anchorY: 0.5 }); var startNormalEnemy = true; var coinCounter = 0; var flyinEnemies = []; var playerDeaths = 0; var hearts = []; var remainingHearts = 3; game.controlActive = false; var coins = []; var firstControlTriggered = false; var enemies = []; var enemySpawnInterval = Math.floor(Math.random() * 100) + 30; var enemySpawnCounter = 0; var stopSpawn = false; game.weaponEnabled = true; // spawnTubeType: "tube" için tube_1 (tup_1) spawn edilir; "yesil" için YesilTube spawn edilir. var spawnTubeType = "tube"; /**** * Tube Spawn (her 15 saniyede bir) ****/ function spawnTube() { if (stopSpawn) return; var tube; if (spawnTubeType === "tube") { tube = new Tube(); } else { // spawnTubeType === "yesil" tube = new YesilTube(); } tube.x = 2048 + 125; tube.y = 2732 / 2 - 120; game.addChild(tube); var control = LK.getAsset('control', { anchorX: 0.5, anchorY: 0.5 }); control.x = 0; control.y = -177.5; tube.addChild(control); control.update = function () { if (player.intersects(control)) { if (!firstControlTriggered && coinCounter >= 10) { console.log("Control event triggered: coinCounter = " + coinCounter); startNormalEnemy = false; game.controlActive = true; LK.setTimeout(function () { for (var i = enemies.length - 1; i >= 0; i--) { enemies[i].destroy(); enemies.splice(i, 1); } for (var i = flyinEnemies.length - 1; i >= 0; i--) { flyinEnemies[i].destroy(); flyinEnemies.splice(i, 1); } }, 400); for (var i = 0; i < game.children.length; i++) { var obj = game.children[i]; if (obj.update) obj.update = function () {}; } LK.setTimeout(function () { player.destroy(); }, 330); enhancedFadeEffect(); firstControlTriggered = true; } } }; if (!stopSpawn) { LK.setTimeout(spawnTube, 15000); } } spawnTube(); /**** * (A) Eski FlyinEnemy Spawn (homing false) ****/ function spawnFlyinEnemy() { if (stopSpawn) return; var delay = Math.random() * 2000 + 2000; LK.setTimeout(function () { if (stopSpawn) return; var fe = new FlyinEnemy(); fe.x = 2048; fe.y = 449; fe.zIndex = 10; game.addChild(fe); flyinEnemies.push(fe); spawnFlyinEnemy(); }, delay); } spawnFlyinEnemy(); /**** * (B) Wave şeklinde, homing davranışlı FlyinEnemy Spawn ****/ function spawnWaveOfFlyinEnemies() { var spawnPoints = [ { x: 0, y: 0 }, { x: 2048, y: 0 }, { x: 0, y: 2732 }, { x: 2048, y: 2732 }, { x: 1024, y: 0 }, { x: 1024, y: 2732 }, { x: 0, y: 1366 }, { x: 2048, y: 1366 } ]; for (var i = spawnPoints.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var temp = spawnPoints[i]; spawnPoints[i] = spawnPoints[j]; spawnPoints[j] = temp; } spawnPoints.forEach(function (point, index) { LK.setTimeout(function () { var enemy = new FlyinEnemy(); enemy.homing = true; enemy.wave = true; enemy.x = point.x; enemy.y = point.y; var dx = player.x - enemy.x; var dy = player.y - enemy.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance === 0) distance = 1; enemy.vx = (dx / distance) * enemy.speed; enemy.vy = (dy / distance) * enemy.speed; enemy.zIndex = 2100; if (enemy.x < 1024) enemy.scaleX = -1; game.addChild(enemy); flyinEnemies.push(enemy); }, index * 800); if (index === spawnPoints.length - 1) { LK.setTimeout(function () { spawnFlyinEnemy(); }, 10000); } }); } /**** * Normal Enemy Spawn (homing false) ****/ game.update = function () { scrollingBackground.update(); player.update(); if (game.scrollingBg2 && game.scrollingBg2.update) game.scrollingBg2.update(); for (var t = 0; t < game.children.length; t++) { var child = game.children[t]; if (child instanceof Tube || child instanceof YesilTube) child.update(); if (child.children) { for (var c = 0; c < child.children.length; c++) { var subChild = child.children[c]; if (subChild.update) subChild.update(); } } } enemySpawnCounter++; if (startNormalEnemy && !stopSpawn && enemySpawnCounter >= enemySpawnInterval && !(LK.ticks >= 876 && LK.ticks <= 936) && !(LK.ticks >= 1776 && LK.ticks <= 1836) && !(LK.ticks >= 2676 && LK.ticks <= 2736) && !(LK.ticks >= 3576 && LK.ticks <= 3636) && !(LK.ticks >= 4476 && LK.ticks <= 4536) && !(LK.ticks >= 5376 && LK.ticks <= 5436) && !(LK.ticks >= 6276 && LK.ticks <= 6336) && !(LK.ticks >= 7776 && LK.ticks <= 7836) ) { var canSpawn = true; for (var i = 0; i < enemies.length; i++) { if (enemies[i].x > 1800) { canSpawn = false; break; } } if (canSpawn) { var tubeCollision = false; for (var t = 0; t < game.children.length; t++) { var child = game.children[t]; if (child.asset && child.asset.name === 'tup_1') { var enemyRight = 2048 + 75; var enemyLeft = 2048 - 75; var tubeRight = child.x + 125; var tubeLeft = child.x - 125; if (!(enemyLeft > tubeRight || enemyRight < tubeLeft)) { tubeCollision = true; break; } } } if (!tubeCollision) { LK.setTimeout(function () { if (stopSpawn) return; var enemy = new Enemy(); enemy.x = 2048; enemy.y = 2732 / 2 - 13; enemy.zIndex = 10; enemies.push(enemy); game.addChild(enemy); }, 100); } enemySpawnCounter = 0; enemySpawnInterval = Math.floor(Math.random() * 100) + 30; } enemySpawnCounter = 0; enemySpawnInterval = Math.floor(Math.random() * 100) + 30; } game.children.sort(function (a, b) { return (a.zIndex || 0) - (b.zIndex || 0); }); // --- Enemy - Player --- for (var j = enemies.length - 1; j >= 0; j--) { if (enemies[j]) enemies[j].update(); if (player.intersects(enemies[j]) && enemies[j].canDamage) { enemies[j].canDamage = false; LK.effects.flashScreen(0xff0000, 750, 0.0001); player.hit(); if (player.hearts <= 0) LK.showGameOver(); } for (var k = game.children.length - 1; k >= 0; k--) { var child = game.children[k]; if (child instanceof Weapon && child.intersects(enemies[j])) { var coin = new Coin(); coin.x = enemies[j].x; coin.y = enemies[j].y; coin.velocity = 5; game.addChild(coin); coins.push(coin); var particleEffect = LK.getAsset('particle', { anchorX: 0.5, anchorY: 0.5, color: 0x808080 }); particleEffect.x = enemies[j].x - 15; particleEffect.y = enemies[j].y; game.addChild(particleEffect); LK.setTimeout(function () { particleEffect.destroy(); }, 150); enemies[j].destroy(); child.destroy(); enemies.splice(j, 1); break; } } } // --- FlyinEnemy - Player --- for (var n = flyinEnemies.length - 1; n >= 0; n--) { if (flyinEnemies[n]) flyinEnemies[n].update(); if (player.intersects(flyinEnemies[n]) && flyinEnemies[n].canDamage) { flyinEnemies[n].canDamage = false; LK.effects.flashScreen(0xff0000, 750, 0.0001); player.hit(); if (player.hearts <= 0) LK.showGameOver(); } for (var k = game.children.length - 1; k >= 0; k--) { var child = game.children[k]; if (child instanceof Weapon && child.intersects(flyinEnemies[n])) { if (!flyinEnemies[n].wave) { var coin = new Coin(); coin.x = flyinEnemies[n].x; coin.y = flyinEnemies[n].y + 60; coin.velocity = 5; game.addChild(coin); coins.push(coin); } var particleEffect = LK.getAsset('particle', { anchorX: 0.5, anchorY: 0.5, color: 0x808080 }); particleEffect.x = flyinEnemies[n].x - 30; particleEffect.y = flyinEnemies[n].y + 30; game.addChild(particleEffect); LK.setTimeout(function () { particleEffect.destroy(); }, 150); flyinEnemies[n].destroy(); child.destroy(); flyinEnemies.splice(n, 1); break; } } if (flyinEnemies[n] && !flyinEnemies[n].homing && flyinEnemies[n].x < -50) { flyinEnemies[n].destroy(); flyinEnemies.splice(n, 1); } } // --- Coin Toplanması --- for (var m = coins.length - 1; m >= 0; m--) { var coin = coins[m]; coin.x -= coin.velocity; if (coin.x < -100) { coin.destroy(); coins.splice(m, 1); } else if (player.intersects(coin)) { coinCounter++; scoreText.setText(coinCounter.toString()); if (coinCounter > 9 && !scoreText.movedLeft) { scoreText.x -= 20; scoreText.movedLeft = true; } coin.destroy(); coins.splice(m, 1); } } }; // Dokunma/Kontrol game.down = function (x, y, obj) { if (player.isJumping && game.weaponEnabled) { if (!game.lastWeaponTime || Date.now() - game.lastWeaponTime > 350) { var weapon = new Weapon(); weapon.x = player.x; weapon.y = player.y; var dx = x - weapon.x; var dy = y - weapon.y; var distance = Math.sqrt(dx * dx + dy * dy); weapon.directionX = dx / distance; weapon.directionY = dy / distance; var angle = Math.acos(weapon.directionY / Math.sqrt(weapon.directionX * weapon.directionX + weapon.directionY * weapon.directionY)); var angleInDegrees = angle * (180 / Math.PI); if (angleInDegrees <= 30) weapon.speed *= 1.3; game.addChild(weapon); LK.setTimeout(function () { weapon.destroy(); }, 9000); game.lastWeaponTime = Date.now(); } } player.jump(); }; // Oyunu Sahneye Ekle LK.stage.addChild(game); /**** * Arka Plan ve Oyuncu, Skor GUI & Kalp ****/ var scrollingBackground = new ScrollingBackground(); game.addChild(scrollingBackground); var player = game.addChild(new Player()); player.x = 2048 / 2 - 30; player.y = 2732 / 2 + 3; var counterBackground = LK.getAsset('counter_background', { anchorX: 0.5, anchorY: 0.5 }); LK.gui.top.addChild(counterBackground); counterBackground.x = LK.gui.top.width / 2 - 62; counterBackground.y = 45; var scoreText = new Text2('0', { size: 80, fill: 0xFFFFFF }); LK.gui.top.addChild(scoreText); scoreText.x = LK.gui.top.width / 2 - 85; scoreText.y = 0; for (var i = 0; i < 3; i++) { var heart = LK.getAsset('heart', { anchorX: 0.5, anchorY: 0.5 }); LK.gui.top.addChild(heart); heart.x = 50 + i * 110 + 390; heart.y = 50; hearts.push(heart); } /**** * enhancedFadeEffect: Fade-out, temizle, yeni arka plan (ScrollingBackground2) ekle, * tube_1 (tup_1) spawn işlemini iptal et, spawnTubeType değerini "yesil" yap ve * mevcut tube_1 nesnelerini kaldır. ****/ function enhancedFadeEffect() { if (game.isFading || game.fadeCompleted || !game.controlActive) return; game.isFading = true; var overlay = LK.getAsset('overlay', { anchorX: 0, anchorY: 0 }); overlay.alpha = 0; if (!overlay.parent) LK.stage.addChild(overlay); var steps = 20; var duration = 500; var stepTime = duration / steps; var currentStep = 0; var fadeOutInterval = LK.setInterval(function () { if (currentStep < steps) { overlay.alpha = currentStep / steps; currentStep++; } else { LK.clearInterval(fadeOutInterval); currentStep = 0; // Artık tube_1 spawn edilmemeli; spawnTubeType'u "yesil" olarak güncelleyelim. spawnTubeType = "yesil"; // Mevcut tube_1 (Tube) nesnelerini temizleyelim: for (var i = game.children.length - 1; i >= 0; i--) { var child = game.children[i]; if (child instanceof Tube) { child.destroy(); game.children.splice(i, 1); } } // Tube2 eskisi gibi devam edecek, diğer nesneler korunacak. var scrollingBg2 = new ScrollingBackground2(); scrollingBg2.alpha = 0; game.scrollingBg2 = scrollingBg2; game.addChild(scrollingBg2); // Fade in aşamasında overlay yavaşça kaybolacak. LK.setTimeout(function () { var newPlayer = new Player(); newPlayer.hearts = remainingHearts; newPlayer.x = 2048 / 2 - 30; // Yeni tube (spawnTubeType "yesil" olduğu için YesilTube) ile etkileşimde konumlandırılıyor. newPlayer.y = 2732 / 2; newPlayer.isFalling = true; newPlayer.fallSpeed = 0; newPlayer.fallAcceleration = 0.7; newPlayer.fallTargetY = 2732 / 2 - 7; game.addChild(newPlayer); player = newPlayer; game.weaponEnabled = true; LK.setTimeout(function () { spawnWaveOfFlyinEnemies(); }, 800); LK.setTimeout(function () { startNormalEnemy = true; }, 10500); }, 500); var fadeInDuration = 500; var fadeInStepTime = fadeInDuration / steps; var fadeInInterval = LK.setInterval(function () { if (currentStep < steps) { if (game.scrollingBg2) game.scrollingBg2.alpha = currentStep / steps; currentStep++; } else { LK.clearInterval(fadeInInterval); if (overlay.parent) overlay.parent.removeChild(overlay); var oldScrollingSpeed = game.scrollingBg2.speed; var oldTubeSpeed; // Yeni spawn edilen tube (YesilTube) var ise hızını donduralım for (var j = 0; j < game.children.length; j++) { var obj = game.children[j]; if (obj instanceof YesilTube) { oldTubeSpeed = obj.speed; obj.speed = 0; break; } } game.scrollingBg2.speed = 0; LK.setTimeout(function () { game.scrollingBg2.speed = oldScrollingSpeed; for (var j = 0; j < game.children.length; j++) { var obj = game.children[j]; if (obj instanceof YesilTube) { obj.speed = oldTubeSpeed; break; } } stopSpawn = false; game.isFading = false; game.fadeCompleted = true; }, 8000); } }, fadeInStepTime); } }, stepTime); } // Dokunma/Kontrol (yeniden tanımlandı) game.down = function (x, y, obj) { if (player.isJumping && game.weaponEnabled) { if (!game.lastWeaponTime || Date.now() - game.lastWeaponTime > 350) { var weapon = new Weapon(); weapon.x = player.x; weapon.y = player.y; var dx = x - weapon.x; var dy = y - weapon.y; var distance = Math.sqrt(dx * dx + dy * dy); weapon.directionX = dx / distance; weapon.directionY = dy / distance; var angle = Math.acos(weapon.directionY / Math.sqrt(weapon.directionX * weapon.directionX + weapon.directionY * weapon.directionY)); var angleInDegrees = angle * (180 / Math.PI); if (angleInDegrees <= 30) weapon.speed *= 1.3; game.addChild(weapon); LK.setTimeout(function () { weapon.destroy(); }, 9000); game.lastWeaponTime = Date.now(); } } player.jump(); }; LK.stage.addChild(game); integrate new features to code
Code edit (2 edits merged)
Please save this source code
User prompt
Please fix the bug: 'Timeout.tick error: tube2 is not defined' in or related to this line: 'var oldTubeSpeed = tube2.speed;' Line Number: 793
User prompt
Please fix the bug: 'Timeout.tick error: tube2 is not defined' in or related to this line: 'newPlayer.y = tube2.y;' Line Number: 764
User prompt
Please fix the bug: 'Timeout.tick error: YesilTube is not defined' in or related to this line: 'var yesilTube = new YesilTube();' Line Number: 724
User prompt
/**** * Assets ****/ LK.init.shape('overlay', {width:2048, height:2732, color:0x000000, shape:'box'}); LK.init.image('background', {width:2048, height:2732.07, id:'67d97ff4ed4e4720c972d114'}); LK.init.image('background2', {width:2048, height:2850, id:'67dacf6f4c81bb9f3792105a'}); LK.init.image('coin', {width:150, height:150, id:'67d58381540f369ec40716a5'}); LK.init.image('control', {width:299, height:1, id:'67d757ae885017473a98979d'}); LK.init.image('control_2', {width:299, height:201, id:'67d757ae885017473a98979c'}); LK.init.image('counter_background', {width:100, height:100, id:'67db37c416a72d6be958a21e'}); LK.init.image('enemy', {width:150, height:150, id:'67589498e1c6df8afc3f7fdf', flipX:1}); LK.init.image('flyin_enemy', {width:150, height:165, id:'67d6cc20228891638f6d62af', flipX:1}); LK.init.image('heart', {width:100, height:100, id:'67d966dd24ccde20f6adb0eb'}); LK.init.image('particle', {width:100, height:100, id:'67d62caff0905a2251a97ad0'}); LK.init.image('player', {width:150, height:150, id:'67589443e1c6df8afc3f7fd5'}); LK.init.image('tube_2', {width:250, height:375, id:'67d9810d24ccde20f6adb16b', flipY:1}); LK.init.image('tup_1', {width:250, height:375, id:'67d76073885017473a989801'}); LK.init.image('tup_2', {width:250, height:375, id:'67d76073885017473a989801', flipX:1}); LK.init.image('weapon', {width:120, height:120, id:'67d579ab540f369ec4071660'}); // Yeni asset: yesil_1 – fade in–fade out sonrası aktif olacak LK.init.image('yesil_1', {width:250, height:375, id:'67d76073885017473a989801', flipX:1, flipY:1, orientation:3}); /**** * Classes ****/ // Coin class var Coin = Container.expand(function () { var self = Container.call(this); var coinGraphics = self.attachAsset('coin', { anchorX: 0.5, anchorY: 0.5 }); self.velocity = 5; self.zIndex = 15; self.update = function () { self.x -= self.velocity; }; }); // Enemy class var Enemy = Container.expand(function () { var self = Container.call(this); var enemyGraphics = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.zIndex = 10; self.canDamage = true; self.update = function () { self.x -= self.speed; if (self.x < -50) { self.destroy(); } }; }); // FlyinEnemy class (hem eski, hem yeni) var FlyinEnemy = Container.expand(function () { var self = Container.call(this); var flyinEnemyGraphics = self.attachAsset('flyin_enemy', { anchorX: 0.5, anchorY: 0 }); self.speed = 5; self.zIndex = 10; self.canDamage = true; self.homing = false; // false: eski davranış, true: oyuncuya yönelik self.vx = 0; self.vy = 0; self.update = function () { if (!self.homing) { self.x -= self.speed; if (self.x < -50) { self.destroy(); } } else { self.x += self.vx; self.y += self.vy; if (self.x < -200 || self.x > 2248 || self.y < -200 || self.y > 2932) { self.destroy(); } } }; }); // Player class var Player = Container.expand(function () { var self = Container.call(this); var playerGraphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.jumpHeight = 40; self.isJumping = false; self.velocityY = 0; self.isFalling = false; self.fallSpeed = 0; self.fallAcceleration = 0.7; self.fallTargetY = 2732 / 2 - 7; self.zIndex = 20; self.hearts = typeof remainingHearts !== 'undefined' ? remainingHearts : 3; self.update = function () { self.prevY = self.y; if (self.isFalling) { self.y += self.fallSpeed; self.fallSpeed += self.fallAcceleration; if (self.y >= self.fallTargetY) { self.y = self.fallTargetY; self.isFalling = false; self.fallSpeed = 0; game.weaponEnabled = true; } } self.prevY = self.y; if (self.isJumping) { self.y += self.velocityY; self.velocityY += 0.7; if (self.y >= 2732 / 2 - 3) { self.y = 2732 / 2 - 9; self.isJumping = false; self.velocityY = 0; } } }; self.invulnerable = false; self.hit = function () { if (!self.invulnerable) { self.loseHeart(); self.invulnerable = true; LK.setTimeout(function () { self.invulnerable = false; }, 500); } }; self.jump = function () { if (!self.isJumping) { self.isJumping = true; self.velocityY = -self.jumpHeight; } }; self.loseHeart = function () { self.hearts--; playerDeaths++; if (playerDeaths === 1 && hearts[0]) { hearts[0].destroy(); } else if (playerDeaths === 2 && hearts[1]) { hearts[1].destroy(); } else if (playerDeaths === 3 && hearts[2]) { hearts[2].destroy(); } remainingHearts = self.hearts; if (hearts.length === 0) { for (var i = enemies.length - 1; i >= 0; i--) { enemies[i].destroy(); enemies.splice(i, 1); } for (var i = flyinEnemies.length - 1; i >= 0; i--) { flyinEnemies[i].destroy(); flyinEnemies.splice(i, 1); } for (var i = coins.length - 1; i >= 0; i--) { coins[i].destroy(); coins.splice(i, 1); } self.destroy(); game.weaponEnabled = false; } }; }); // ScrollingBackground class var ScrollingBackground = Container.expand(function () { var self = Container.call(this); self.bg1 = LK.getAsset('background', { anchorX: 0, anchorY: 0 }); self.bg1.x = 0; self.bg1.y = 0; self.addChild(self.bg1); self.bg2 = LK.getAsset('background', { anchorX: 1, anchorY: 0 }); self.bg2.scaleX = -1; self.bg2.x = self.bg1.width; self.bg2.y = 0; self.addChild(self.bg2); self.speed = 2; self.update = function () { self.bg1.x -= self.speed; self.bg2.x -= self.speed; if (self.bg1.x + self.bg1.width <= 0) { self.bg1.x = self.bg2.x + self.bg2.width; } if (self.bg2.x + self.bg2.width <= 0) { self.bg2.x = self.bg1.x + self.bg1.width; } }; }); // ScrollingBackground2 class var ScrollingBackground2 = Container.expand(function () { var self = Container.call(this); var bg1 = LK.getAsset('background2', { anchorX: 0, anchorY: 0 }); bg1.x = 0; bg1.y = 0; self.addChild(bg1); var bg2 = LK.getAsset('background2', { anchorX: 1, anchorY: 0 }); bg2.scaleX = -1; bg2.x = bg1.width; bg2.y = 0; self.addChild(bg2); self.speed = 2; self.update = function () { bg1.x -= self.speed; bg2.x -= self.speed; if (bg1.x + bg1.width <= 0) { bg1.x = bg2.x + bg2.width; } if (bg2.x + bg2.width <= 0) { bg2.x = bg1.x + bg1.width; } }; }); // Tube class – başlangıçta aktif; asset olarak "tup_1" var Tube = Container.expand(function () { var self = Container.call(this); var tubeGraphics = self.attachAsset('tup_1', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.zIndex = 0; self.update = function () { self.x -= self.speed; if (self.x < -50) { self.destroy(); } }; }); // Yeni sınıf: YesilTube – fade in–fade out sonrası aktif olacak; tube_1 yerine yesil_1 kullanılıyor. var YesilTube = Container.expand(function () { var self = Container.call(this); var tubeGraphics = self.attachAsset('yesil_1', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.zIndex = 0; self.update = function () { self.x -= self.speed; if (self.x < -50) { self.destroy(); } }; }); // Tube2 class (ön planda) – asset olarak "tube_2" var Tube2 = Container.expand(function () { var self = Container.call(this); var tubeGraphics = self.attachAsset('tube_2', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.zIndex = 2000; self.update = function () { self.x -= self.speed; if (self.x < -self.width) { self.destroy(); } }; }); // Weapon class var Weapon = Container.expand(function () { var self = Container.call(this); var weaponGraphics = self.attachAsset('weapon', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 40; self.update = function () { self.x += self.directionX * self.speed; self.y += self.directionY * self.speed; weaponGraphics.rotation += 0.3; if (Math.abs(game.down.x - self.x) < self.speed && Math.abs(game.down.y - self.y) < self.speed) { self.destroy(); } }; }); /**** * Initialize Game ****/ var game = new LK.Game({ width: 2048, height: 2732, backgroundColor: 0x000000 }); /**** * Game Code ****/ var control_2 = LK.getAsset('control_2', { anchorX: 0.5, anchorY: 0.5 }); /**** * Global Variables & Flags ****/ var startNormalEnemy = true; var coinCounter = 0; var flyinEnemies = []; var playerDeaths = 0; var hearts = []; var remainingHearts = 3; game.controlActive = false; var coins = []; var firstControlTriggered = false; var enemies = []; var enemySpawnInterval = Math.floor(Math.random() * 100) + 30; var enemySpawnCounter = 0; var stopSpawn = false; game.weaponEnabled = true; /**** * (A) Eski FlyinEnemy Spawn (homing false) ****/ function spawnFlyinEnemy() { if (stopSpawn) return; var delay = Math.random() * 2000 + 2000; LK.setTimeout(function () { if (stopSpawn) return; var fe = new FlyinEnemy(); fe.x = 2048; fe.y = 449; fe.zIndex = 10; game.addChild(fe); flyinEnemies.push(fe); spawnFlyinEnemy(); }, delay); } spawnFlyinEnemy(); /**** * (B) Wave şeklinde, homing davranışlı FlyinEnemy Spawn ****/ function spawnWaveOfFlyinEnemies() { var spawnPoints = [ { x: 0, y: 0 }, { x: 2048, y: 0 }, { x: 0, y: 2732 }, { x: 2048, y: 2732 }, { x: 1024, y: 0 }, { x: 1024, y: 2732 }, { x: 0, y: 1366 }, { x: 2048, y: 1366 } ]; for (var i = spawnPoints.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var temp = spawnPoints[i]; spawnPoints[i] = spawnPoints[j]; spawnPoints[j] = temp; } spawnPoints.forEach(function (point, index) { LK.setTimeout(function () { var enemy = new FlyinEnemy(); enemy.homing = true; enemy.wave = true; enemy.x = point.x; enemy.y = point.y; var dx = player.x - enemy.x; var dy = player.y - enemy.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance === 0) distance = 1; enemy.vx = (dx / distance) * enemy.speed; enemy.vy = (dy / distance) * enemy.speed; enemy.zIndex = 2100; if (enemy.x < 1024) { enemy.scaleX = -1; } game.addChild(enemy); flyinEnemies.push(enemy); }, index * 800); if (index === spawnPoints.length - 1) { LK.setTimeout(function () { spawnFlyinEnemy(); }, 10000); } }); } /**** * Normal Enemy Spawn (homing false) ****/ game.update = function () { scrollingBackground.update(); player.update(); if (game.scrollingBg2 && game.scrollingBg2.update) { game.scrollingBg2.update(); } for (var t = 0; t < game.children.length; t++) { var child = game.children[t]; if (child instanceof Tube) { child.update(); } if (child.children) { for (var c = 0; c < child.children.length; c++) { var subChild = child.children[c]; if (subChild.update) subChild.update(); } } } enemySpawnCounter++; if (startNormalEnemy && !stopSpawn && enemySpawnCounter >= enemySpawnInterval && !(LK.ticks >= 876 && LK.ticks <= 936) && !(LK.ticks >= 1776 && LK.ticks <= 1836) && !(LK.ticks >= 2676 && LK.ticks <= 2736) && !(LK.ticks >= 3576 && LK.ticks <= 3636) && !(LK.ticks >= 4476 && LK.ticks <= 4536) && !(LK.ticks >= 5376 && LK.ticks <= 5436) && !(LK.ticks >= 6276 && LK.ticks <= 6336) && !(LK.ticks >= 7776 && LK.ticks <= 7836) ) { var canSpawn = true; for (var i = 0; i < enemies.length; i++) { if (enemies[i].x > 1800) { canSpawn = false; break; } } if (canSpawn) { var tubeCollision = false; for (var t = 0; t < game.children.length; t++) { var child = game.children[t]; if (child.asset && child.asset.name === 'tup_1') { var enemyRight = 2048 + 75; var enemyLeft = 2048 - 75; var tubeRight = child.x + 125; var tubeLeft = child.x - 125; if (!(enemyLeft > tubeRight || enemyRight < tubeLeft)) { tubeCollision = true; break; } } } if (!tubeCollision) { LK.setTimeout(function () { if (stopSpawn) return; var enemy = new Enemy(); enemy.x = 2048; enemy.y = 2732 / 2 - 13; enemy.zIndex = 10; enemies.push(enemy); game.addChild(enemy); }, 100); } enemySpawnCounter = 0; enemySpawnInterval = Math.floor(Math.random() * 100) + 30; } enemySpawnCounter = 0; enemySpawnInterval = Math.floor(Math.random() * 100) + 30; } game.children.sort(function (a, b) { return (a.zIndex || 0) - (b.zIndex || 0); }); // --- Enemy - Player --- for (var j = enemies.length - 1; j >= 0; j--) { if (enemies[j]) { enemies[j].update(); } if (player.intersects(enemies[j]) && enemies[j].canDamage) { enemies[j].canDamage = false; LK.effects.flashScreen(0xff0000, 750, 0.0001); player.hit(); if (player.hearts <= 0) { LK.showGameOver(); } } for (var k = game.children.length - 1; k >= 0; k--) { var child = game.children[k]; if (child instanceof Weapon && child.intersects(enemies[j])) { var coin = new Coin(); coin.x = enemies[j].x; coin.y = enemies[j].y; coin.velocity = 5; game.addChild(coin); coins.push(coin); var particleEffect = LK.getAsset('particle', { anchorX: 0.5, anchorY: 0.5, color: 0x808080 }); particleEffect.x = enemies[j].x - 15; particleEffect.y = enemies[j].y; game.addChild(particleEffect); LK.setTimeout(function () { particleEffect.destroy(); }, 150); enemies[j].destroy(); child.destroy(); enemies.splice(j, 1); break; } } } // --- FlyinEnemy - Player --- for (var n = flyinEnemies.length - 1; n >= 0; n--) { if (flyinEnemies[n]) { flyinEnemies[n].update(); } if (player.intersects(flyinEnemies[n]) && flyinEnemies[n].canDamage) { flyinEnemies[n].canDamage = false; LK.effects.flashScreen(0xff0000, 750, 0.0001); player.hit(); if (player.hearts <= 0) { LK.showGameOver(); } } for (var k = game.children.length - 1; k >= 0; k--) { var child = game.children[k]; if (child instanceof Weapon && child.intersects(flyinEnemies[n])) { if (!flyinEnemies[n].wave) { var coin = new Coin(); coin.x = flyinEnemies[n].x; coin.y = flyinEnemies[n].y + 60; coin.velocity = 5; game.addChild(coin); coins.push(coin); } var particleEffect = LK.getAsset('particle', { anchorX: 0.5, anchorY: 0.5, color: 0x808080 }); particleEffect.x = flyinEnemies[n].x - 30; particleEffect.y = flyinEnemies[n].y + 30; game.addChild(particleEffect); LK.setTimeout(function () { particleEffect.destroy(); }, 150); flyinEnemies[n].destroy(); child.destroy(); flyinEnemies.splice(n, 1); break; } } if (flyinEnemies[n] && !flyinEnemies[n].homing && flyinEnemies[n].x < -50) { flyinEnemies[n].destroy(); flyinEnemies.splice(n, 1); } } // --- Coin toplanması --- for (var m = coins.length - 1; m >= 0; m--) { var coin = coins[m]; coin.x -= coin.velocity; if (coin.x < -100) { coin.destroy(); coins.splice(m, 1); } else if (player.intersects(coin)) { coinCounter++; scoreText.setText(coinCounter.toString()); if (coinCounter > 9 && !scoreText.movedLeft) { scoreText.x -= 20; scoreText.movedLeft = true; } coin.destroy(); coins.splice(m, 1); } } }; // Dokunma/Kontrol game.down = function (x, y, obj) { if (player.isJumping && game.weaponEnabled) { if (!game.lastWeaponTime || Date.now() - game.lastWeaponTime > 350) { var weapon = new Weapon(); weapon.x = player.x; weapon.y = player.y; var dx = x - weapon.x; var dy = y - weapon.y; var distance = Math.sqrt(dx * dx + dy * dy); weapon.directionX = dx / distance; weapon.directionY = dy / distance; var angle = Math.acos(weapon.directionY / Math.sqrt(weapon.directionX * weapon.directionX + weapon.directionY * weapon.directionY)); var angleInDegrees = angle * (180 / Math.PI); if (angleInDegrees <= 30) { weapon.speed *= 1.3; } game.addChild(weapon); LK.setTimeout(function () { weapon.destroy(); }, 9000); game.lastWeaponTime = Date.now(); } } player.jump(); }; // Oyunu Sahneye Ekle LK.stage.addChild(game); /**** Tube Spawn (her 15 saniyede bir) ****/ function spawnTube() { if (stopSpawn) return; // Başlangıçta Tube (asset: tup_1) spawn ediliyor var tube = new Tube(); tube.x = 2048 + 125; tube.y = 2732 / 2 - 120; game.addChild(tube); var control = LK.getAsset('control', { anchorX: 0.5, anchorY: 0.5 }); control.x = 0; control.y = -177.5; tube.addChild(control); control.update = function () { if (player.intersects(control)) { if (!firstControlTriggered && coinCounter >= 10) { console.log("Control event triggered: coinCounter = " + coinCounter); startNormalEnemy = false; game.controlActive = true; LK.setTimeout(function () { for (var i = enemies.length - 1; i >= 0; i--) { enemies[i].destroy(); enemies.splice(i, 1); } for (var i = flyinEnemies.length - 1; i >= 0; i--) { flyinEnemies[i].destroy(); flyinEnemies.splice(i, 1); } }, 400); for (var i = 0; i < game.children.length; i++) { var obj = game.children[i]; if (obj.update) { obj.update = function () {}; } } LK.setTimeout(function () { player.destroy(); }, 330); enhancedFadeEffect(); firstControlTriggered = true; } } }; if (!stopSpawn) { LK.setTimeout(spawnTube, 15000); } } spawnTube(); /**** Arka Plan ve Oyuncu ****/ var scrollingBackground = new ScrollingBackground(); game.addChild(scrollingBackground); var player = game.addChild(new Player()); player.x = 2048 / 2 - 30; player.y = 2732 / 2 + 3; /**** Skor GUI ve Kalp ****/ var counterBackground = LK.getAsset('counter_background', { anchorX: 0.5, anchorY: 0.5 }); LK.gui.top.addChild(counterBackground); counterBackground.x = LK.gui.top.width / 2 - 62; counterBackground.y = 45; var scoreText = new Text2('0', { size: 80, fill: 0xFFFFFF }); LK.gui.top.addChild(scoreText); scoreText.x = LK.gui.top.width / 2 - 85; scoreText.y = 0; for (var i = 0; i < 3; i++) { var heart = LK.getAsset('heart', { anchorX: 0.5, anchorY: 0.5 }); LK.gui.top.addChild(heart); heart.x = 50 + i * 110 + 390; heart.y = 50; hearts.push(heart); } /**** enhancedFadeEffect: Fade-out, clear scene, spawn background2, YesilTube (yesil_1 aktif) then new player ****/ function enhancedFadeEffect() { if (game.isFading || game.fadeCompleted || !game.controlActive) return; game.isFading = true; var overlay = LK.getAsset('overlay', { anchorX: 0, anchorY: 0 }); overlay.alpha = 0; if (!overlay.parent) { LK.stage.addChild(overlay); } var steps = 20; var duration = 500; var stepTime = duration / steps; var currentStep = 0; var fadeOutInterval = LK.setInterval(function () { if (currentStep < steps) { overlay.alpha = currentStep / steps; currentStep++; } else { LK.clearInterval(fadeOutInterval); currentStep = 0; stopSpawn = true; // Remove tüm game.children öğeleri (Tube nesneleri dahil) while (game.children.length > 0) { game.removeChild(game.children[0]); } var scrollingBg2 = new ScrollingBackground2(); scrollingBg2.alpha = 0; game.scrollingBg2 = scrollingBg2; game.addChild(scrollingBg2); // Tube yerine artık YesilTube spawn edilecek (yesil_1 aktif) var yesilTube = new YesilTube(); control_2.x = 0; control_2.y = -177.5; yesilTube.addChild(control_2); // control_2 update fonksiyonları; yeni player ile etkileşimde kullanılacak control_2.update = function () { if (player && player.intersects(control_2)) { if (coinCounter >= 30) { console.log("Control_2 event triggered: coinCounter = " + coinCounter); for (var i = 0; i < game.children.length; i++) { var obj = game.children[i]; if (obj.update) { obj.update = function () {}; } } } } }; yesilTube.x = 2048 / 2 + 140; yesilTube.y = yesilTube.height / 2 - 60; game.addChild(yesilTube); LK.setTimeout(function () { var newPlayer = new Player(); newPlayer.hearts = remainingHearts; newPlayer.x = 2048 / 2 - 30; newPlayer.y = yesilTube.y; newPlayer.isFalling = true; newPlayer.fallSpeed = 0; newPlayer.fallAcceleration = 0.7; newPlayer.fallTargetY = 2732 / 2 - 7; game.addChild(newPlayer); player = newPlayer; game.weaponEnabled = true; LK.setTimeout(function () { spawnWaveOfFlyinEnemies(); }, 800); LK.setTimeout(function () { startNormalEnemy = true; }, 10500); }, 500); var fadeInDuration = 500; var fadeInStepTime = fadeInDuration / steps; var fadeInInterval = LK.setInterval(function () { if (currentStep < steps) { if (game.scrollingBg2) { game.scrollingBg2.alpha = currentStep / steps; } currentStep++; } else { LK.clearInterval(fadeInInterval); if (overlay.parent) { overlay.parent.removeChild(overlay); } var oldScrollingSpeed = game.scrollingBg2.speed; var oldTubeSpeed = yesilTube.speed; game.scrollingBg2.speed = 0; yesilTube.speed = 0; LK.setTimeout(function () { game.scrollingBg2.speed = oldScrollingSpeed; yesilTube.speed = oldTubeSpeed; stopSpawn = false; game.isFading = false; game.fadeCompleted = true; }, 8000); } }, fadeInStepTime); } }, stepTime); } // Dokunma/Kontrol (yeniden tanımlandı) game.down = function (x, y, obj) { if (player.isJumping && game.weaponEnabled) { if (!game.lastWeaponTime || Date.now() - game.lastWeaponTime > 350) { var weapon = new Weapon(); weapon.x = player.x; weapon.y = player.y; var dx = x - weapon.x; var dy = y - weapon.y; var distance = Math.sqrt(dx * dx + dy * dy); weapon.directionX = dx / distance; weapon.directionY = dy / distance; var angle = Math.acos(weapon.directionY / Math.sqrt(weapon.directionX * weapon.directionX + weapon.directionY * weapon.directionY)); var angleInDegrees = angle * (180 / Math.PI); if (angleInDegrees <= 30) { weapon.speed *= 1.3; } game.addChild(weapon); LK.setTimeout(function () { weapon.destroy(); }, 9000); game.lastWeaponTime = Date.now(); } } player.jump(); }; LK.stage.addChild(game); yesil_1 ve tube_1 hakkındaki değişiklikleri entegre et
Code edit (1 edits merged)
Please save this source code
User prompt
Aşağıdaki kod bloğu, wave bittikten sonra (yani firstControlTriggered true olduktan sonra) tube_1’in normal spawn noktasında, yesil_1 asset’ini spawn edip sola hareket ettirecek şekilde spawnTube() fonksiyonunu tek bir kod bloğunda modifiye eder: js Kopyala Düzenle function spawnTube() { if (stopSpawn) { return; } if (firstControlTriggered) { // Wave sonrası: tube_1 spawn noktasında yesil_1 spawn edilsin var yesilTube = LK.getAsset('yesil_1', { anchorX: 0.5, anchorY: 0.5 }); yesilTube.x = 2048 + 125; // tube_1 spawn noktası yesilTube.y = 2732 / 2 - 120; yesilTube.update = function () { yesilTube.x -= 5; // sola hareket hızı if (yesilTube.x < -50) { yesilTube.destroy(); } }; game.addChild(yesilTube); } else { // Normal durumda tube_1 spawn ediliyor var tube = new Tube(); tube.x = 2048 + 125; tube.y = 2732 / 2 - 120; game.addChild(tube); var control = LK.getAsset('control', { anchorX: 0.5, anchorY: 0.5 }); control.x = 0; control.y = -177.5; tube.addChild(control); control.update = function () { if (player.intersects(control)) { if (!firstControlTriggered && coinCounter >= 10) { console.log("Control event triggered: coinCounter = " + coinCounter); startNormalEnemy = false; game.controlActive = true; LK.setTimeout(function () { for (var i = enemies.length - 1; i >= 0; i--) { enemies[i].destroy(); enemies.splice(i, 1); } for (var i = flyinEnemies.length - 1; i >= 0; i--) { flyinEnemies[i].destroy(); flyinEnemies.splice(i, 1); } }, 400); for (var i = 0; i < game.children.length; i++) { var obj = game.children[i]; if (obj.update) { obj.update = function () {}; } } LK.setTimeout(function () { player.destroy(); }, 330); enhancedFadeEffect(); firstControlTriggered = true; } } }; } if (!stopSpawn) { LK.setTimeout(spawnTube, 15000); } } spawnTube(); Bu tek kod bloğu; Normal durumda: Tube (tup_1) spawn edilir, üzerine kontrol eklenir. Wave tetiklendikten sonra (firstControlTriggered true olduğunda): Tube spawn yerine, yesil_1 asset’i aynı spawn konumunda eklenir ve update fonksiyonu sayesinde sola doğru hareket eder. Bu şekilde, wave bittikten sonra tube_1 spawn noktasında yesil_1 asset’i sola hareket edecek.
User prompt
create yesil_1 at the spawn point as the tube_1 has and make it go to left but start this function after fade out
User prompt
make yesil_1 faster
User prompt
make yesil_1 faster
User prompt
make yesil_1 go to left as the same speed as tube_1
User prompt
spawn yesil_1 at the spawn point on tube_1 after wave started
User prompt
spawn yesil_1 at the spawn point on tube_1 after fade in fade out
User prompt
make yesil_1 fast as enemy
User prompt
Aşağıdaki örnekte, wave sonrasında normalde tube (yani tup_1) spawn edilen noktada artık yesil_1 kullanılarak yeni bir "YesilTube" spawn edilecek. Bunu yapmak için, yesil_1 asset’ini kullanan yeni bir sınıf tanımlayıp, spawnTube fonksiyonunda firstControlTriggered bayrağı true olduğunda YesilTube spawn edilmesini sağlayabilirsiniz: js Kopyala Düzenle // YesilTube sınıfı: Asset olarak yesil_1 kullanır var YesilTube = Container.expand(function () { var self = Container.call(this); var yesilTubeGraphics = self.attachAsset('yesil_1', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.zIndex = 0; self.update = function () { self.x -= self.speed; if (self.x < -50) { self.destroy(); } }; }); Ardından, spawnTube() fonksiyonunu şu şekilde düzenleyin: js Kopyala Düzenle function spawnTube() { if (stopSpawn) { return; } if (firstControlTriggered) { // Wave sonrası, tube_1 yerine yesil_1 spawn edilsin var yesilTube = new YesilTube(); yesilTube.x = 2048 + 125; yesilTube.y = 2732 / 2 - 120; game.addChild(yesilTube); } else { // Normal durumda tup_1 kullanılarak Tube spawn ediliyor var tube = new Tube(); tube.x = 2048 + 125; tube.y = 2732 / 2 - 120; game.addChild(tube); var control = LK.getAsset('control', { anchorX: 0.5, anchorY: 0.5 }); control.x = 0; control.y = -177.5; tube.addChild(control); control.update = function () { if (player.intersects(control)) { if (!firstControlTriggered && coinCounter >= 10) { console.log("Control event triggered: coinCounter = " + coinCounter); startNormalEnemy = false; game.controlActive = true; LK.setTimeout(function () { for (var i = enemies.length - 1; i >= 0; i--) { enemies[i].destroy(); enemies.splice(i, 1); } for (var i = flyinEnemies.length - 1; i >= 0; i--) { flyinEnemies[i].destroy(); flyinEnemies.splice(i, 1); } }, 400); for (var i = 0; i < game.children.length; i++) { var obj = game.children[i]; if (obj.update) { obj.update = function () {}; } } LK.setTimeout(function () { player.destroy(); }, 330); enhancedFadeEffect(); firstControlTriggered = true; } } }; } if (!stopSpawn) { LK.setTimeout(spawnTube, 15000); } } spawnTube(); Bu düzenleme ile wave tamamlandığında (firstControlTriggered true olduğunda) tube spawn noktasında artık yesil_1 kullanılarak YesilTube spawn edilecek, normalde tube (tup_1) spawn edilmesi engellenecektir.
User prompt
spawn yesil_1 insted of tube_2 after first tube_2
User prompt
tube_2 yerine tup_2 spawn olsun wave olduktan sonra
User prompt
Wave sonrası, normalde tup_1 (Tube) spawn edilen yerde tup_2 (Tube2) spawn etmek için, spawnTube() fonksiyonundaki spawn işlemini koşula bağlayabilirsiniz. Örneğin, firstControlTriggered bayrağı true olduğunda Tube2 nesnesi spawn edilecek şekilde kodu şu şekilde güncelleyebilirsiniz: js Kopyala Düzenle function spawnTube() { if (stopSpawn) { return; } // Wave sonrası (firstControlTriggered true ise) tup_2 spawn edilsin if (firstControlTriggered) { var tube2 = new Tube2(); tube2.x = 2048 + 125; tube2.y = 2732 / 2 - 120; game.addChild(tube2); } else { // Normal durumda tup_1 spawn ediliyor var tube = new Tube(); tube.x = 2048 + 125; tube.y = 2732 / 2 - 120; game.addChild(tube); } if (!stopSpawn) { LK.setTimeout(spawnTube, 15000); } } spawnTube(); Bu değişiklikle, wave tamamlandıktan sonra (firstControlTriggered true olduğunda) spawnTube() fonksiyonu tup_2 (Tube2) kullanarak spawn işlemini gerçekleştirecektir. Böylece normalde tup_1 yerine tup_2 spawn edilmiş olur.
User prompt
Aşağıdaki öneriler, oyunun “wave” sonrası istenmeyen tup_1 yerine tup_2 (yani Tube2) kullanmasını ve tube_2’nin (Tube2) üzerinde control_2’nin spawn olmamasını sağlamaya yöneliktir. 1. spawnTube() Fonksiyonunun Değiştirilmesi Wave’dan sonra tup_1 (Tube) spawn edilmesini istemediğiniz için, spawnTube() fonksiyonunun tetiklenmesini durdurmanız veya koşula bağlamanız gerekir. Örneğin, wave etkinliğinden sonra (yani firstControlTriggered true olduğunda) spawnTube()’yu artık çağırmayabilirsiniz: js Kopyala Düzenle function spawnTube() { if (stopSpawn || firstControlTriggered) { // wave sonrası tube spawn edilmesin return; } var tube = new Tube(); // Bu sınıf asset olarak 'tup_1' kullanıyor tube.x = 2048 + 125; tube.y = 2732 / 2 - 120; game.addChild(tube); // ... kalan kontrol kodu ... if (!stopSpawn && !firstControlTriggered) { LK.setTimeout(spawnTube, 15000); } } spawnTube(); Böylece wave sonrası bu fonksiyon hiç çağrılmaz (ya da erken return verir) ve tup_1 (Tube) spawn edilmez. 2. enhancedFadeEffect İçerisinde Tube2’nin (tup_2) Spawn Edilmesi Wave sırasında geçiş efektinde yeni arka plan ve Tube2 spawn ediliyor. Eğer tube_2 (Tube2) üzerinde control_2’nin spawn olmasını istemiyorsanız, control_2 ile ilgili tüm satırları Tube2’ye ekleme kısmından kaldırın. Örneğin, enhancedFadeEffect fonksiyonunda şu satırları: js Kopyala Düzenle var tube2 = new Tube2(); // Aşağıdaki control_2 eklemelerini kaldırın: control_2.x = 0; // Centered in tube2 control_2.y = -177.5; // Same position as control tube2.addChild(control_2); control_2.update = function () { if (player && player.intersects(control_2)) { if (coinCounter >= 30) { console.log("Control_2 event triggered: coinCounter = " + coinCounter); for (var i = 0; i < game.children.length; i++) { var obj = game.children[i]; if (obj.update) { obj.update = function () {}; } } } } }; yerine Tube2 spawn edildiğinde control_2’yi hiç eklemeyin. Böylece tube_2’nin üzerinde kontrol objesi olmayacaktır. Örneğin, Tube2 spawn kısmını şu şekilde sadeleştirebilirsiniz: js Kopyala Düzenle // Tube2 spawn – tup_2 kullanılıyor var tube2 = new Tube2(); tube2.x = 2048 / 2 + 140; tube2.y = tube2.height / 2 - 60; game.addChild(tube2); Bu değişikliklerle, wave sonrası: Yeni tube spawn’unda artık Tube (tup_1) değil, Tube2 (tup_2) kullanılır. Tube2’nin üzerine kontrol (control_2) eklenmemiş olur. 3. Ek Notlar Düzenli kontrol: Eğer oyunun diğer bölümlerinde de tube/spawn kontrolü yapılıyorsa, ilgili collision veya spawn kontrollerinin (örneğin, update fonksiyonunda asset adı kontrolü) wave sonrası duruma uygun şekilde güncellendiğinden emin olun. Global bayrak kullanımı: firstControlTriggered veya game.controlActive gibi bayrakları doğru yerde güncellediğinizden emin olun. Böylece istenmeyen tube spawnları önlenir. Bu düzenlemeler, oyunun wave sonrası istenmeyen tup_1 (Tube) yerine tup_2 (Tube2) spawn etmesini ve tube_2’nin (Tube2) üzerinde control_2’nin görünmemesini sağlayacaktır. Eğer başka senaryolarda da benzer durumlar varsa, ilgili spawn ve update fonksiyonlarında benzer koşul kontrolleri ekleyebilirsiniz.
User prompt
after birs wave dont spawn any more tup_1
User prompt
fade in fade outtan sonra hiç tup_1 spawn olmasın
User prompt
Please fix the bug: 'Timeout.tick error: control_2 is not defined' in or related to this line: 'control_2.x = 0; // Centered in tube2' Line Number: 720
User prompt
fade in fade outtan sonra tup_1 yerine tup_2 spawn olsun ve tup_2nin üstünde control_2 asseti olsun onun dışındaki her control_2 yi sil
User prompt
spawn control_2 spawn at the spawn point as the tube that goes right to left spawned after flyin enemy wave started
/**** * Classes ****/ // Coin class var Coin = Container.expand(function () { var self = Container.call(this); var coinGraphics = self.attachAsset('coin', { anchorX: 0.5, anchorY: 0.5 }); self.velocity = 5; self.zIndex = 15; self.update = function () { self.x -= self.velocity; }; }); // Enemy class var Enemy = Container.expand(function () { var self = Container.call(this); var enemyGraphics = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.zIndex = 10; self.canDamage = true; self.update = function () { self.x -= self.speed; if (self.x < -50) { self.destroy(); } }; }); // FlyinEnemy class (destek: hem eski (homing false) hem de yeni (homing true)) var FlyinEnemy = Container.expand(function () { var self = Container.call(this); var flyinEnemyGraphics = self.attachAsset('flyin_enemy', { anchorX: 0.5, anchorY: 0 }); self.speed = 5; self.zIndex = 10; self.canDamage = true; self.homing = false; // false: eski davranış, true: oyuncuya yönelik self.vx = 0; self.vy = 0; self.update = function () { if (!self.homing) { self.x -= self.speed; if (self.x < -50) { self.destroy(); } } else { self.x += self.vx; self.y += self.vy; if (self.x < -200 || self.x > 2248 || self.y < -200 || self.y > 2932) { self.destroy(); } } }; }); // Player class var Player = Container.expand(function () { var self = Container.call(this); var playerGraphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.jumpHeight = 40; self.isJumping = false; self.velocityY = 0; self.isFalling = false; self.fallSpeed = 0; self.fallAcceleration = 0.7; self.fallTargetY = 2732 / 2 - 7; self.zIndex = 20; self.hearts = typeof remainingHearts !== 'undefined' ? remainingHearts : 3; self.update = function () { self.prevY = self.y; if (self.isFalling) { self.y += self.fallSpeed; self.fallSpeed += self.fallAcceleration; if (self.y >= self.fallTargetY) { self.y = self.fallTargetY; self.isFalling = false; self.fallSpeed = 0; game.weaponEnabled = true; } } self.prevY = self.y; if (self.isJumping) { self.y += self.velocityY; self.velocityY += 0.7; if (self.y >= 2732 / 2 - 3) { self.y = 2732 / 2 - 9; self.isJumping = false; self.velocityY = 0; } } }; self.invulnerable = false; // Invulnerability flag (initially false) self.hit = function () { if (!self.invulnerable) { self.loseHeart(); self.invulnerable = true; // Make player vulnerable again after 500ms LK.setTimeout(function () { self.invulnerable = false; }, 500); } }; self.jump = function () { if (!self.isJumping) { self.isJumping = true; self.velocityY = -self.jumpHeight; } }; self.loseHeart = function () { self.hearts--; playerDeaths++; if (playerDeaths === 1 && hearts[0]) { hearts[0].destroy(); } else if (playerDeaths === 2 && hearts[1]) { hearts[1].destroy(); } else if (playerDeaths === 3 && hearts[2]) { hearts[2].destroy(); } remainingHearts = self.hearts; // Update global remainingHearts if (hearts.length === 0) { for (var i = enemies.length - 1; i >= 0; i--) { enemies[i].destroy(); enemies.splice(i, 1); } for (var i = flyinEnemies.length - 1; i >= 0; i--) { flyinEnemies[i].destroy(); flyinEnemies.splice(i, 1); } for (var i = coins.length - 1; i >= 0; i--) { coins[i].destroy(); coins.splice(i, 1); } self.destroy(); game.weaponEnabled = false; } }; }); // ScrollingBackground class var ScrollingBackground = Container.expand(function () { var self = Container.call(this); self.bg1 = LK.getAsset('background', { anchorX: 0, anchorY: 0 }); self.bg1.x = 0; self.bg1.y = 0; self.addChild(self.bg1); self.bg2 = LK.getAsset('background', { anchorX: 1, anchorY: 0 }); self.bg2.scaleX = -1; self.bg2.x = self.bg1.width; self.bg2.y = 0; self.addChild(self.bg2); self.speed = 2; self.update = function () { self.bg1.x -= self.speed; self.bg2.x -= self.speed; if (self.bg1.x + self.bg1.width <= 0) { self.bg1.x = self.bg2.x + self.bg2.width; } if (self.bg2.x + self.bg2.width <= 0) { self.bg2.x = self.bg1.x + self.bg1.width; } }; }); // ScrollingBackground2 class var ScrollingBackground2 = Container.expand(function () { var self = Container.call(this); var bg1 = LK.getAsset('background2', { anchorX: 0, anchorY: 0 }); bg1.x = 0; bg1.y = 0; self.addChild(bg1); var bg2 = LK.getAsset('background2', { anchorX: 1, anchorY: 0 }); bg2.scaleX = -1; bg2.x = bg1.width; bg2.y = 0; self.addChild(bg2); self.speed = 2; self.update = function () { bg1.x -= self.speed; bg2.x -= self.speed; if (bg1.x + bg1.width <= 0) { bg1.x = bg2.x + bg2.width; } if (bg2.x + bg2.width <= 0) { bg2.x = bg1.x + bg1.width; } }; }); // Tube class var Tube = Container.expand(function () { var self = Container.call(this); var tubeGraphics = self.attachAsset('tup_1', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.zIndex = 0; self.update = function () { self.x -= self.speed; if (self.x < -50) { self.destroy(); } }; }); // Tube2 class var Tube2 = Container.expand(function () { var self = Container.call(this); var tubeGraphics = self.attachAsset('tube_2', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.zIndex = 2000; // Tube2 her zaman ön planda self.update = function () { self.x -= self.speed; if (self.x < -self.width) { self.destroy(); } }; }); // Weapon class var Weapon = Container.expand(function () { var self = Container.call(this); var weaponGraphics = self.attachAsset('weapon', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 40; self.update = function () { self.x += self.directionX * self.speed; self.y += self.directionY * self.speed; weaponGraphics.rotation += 0.3; if (Math.abs(game.down.x - self.x) < self.speed && Math.abs(game.down.y - self.y) < self.speed) { self.destroy(); } }; }); /**** * Initialize Game ****/ var game = new LK.Game({ width: 2048, height: 2732, backgroundColor: 0x000000 }); /**** * Game Code ****/ function spawnControl2() { var tube2 = new Tube2(); control_2.x = 0; // Centered in tube2 control_2.y = -177.5; // Same position as control tube2.addChild(control_2); control_2.update = function () { if (player && player.intersects(control_2)) { if (coinCounter >= 30) { console.log("Control_2 event triggered: coinCounter = " + coinCounter); for (var i = 0; i < game.children.length; i++) { var obj = game.children[i]; if (obj.update) { obj.update = function () {}; } } } } }; tube2.x = 2048 / 2 + 140; tube2.y = tube2.height / 2 - 60; game.addChild(tube2); } var control_2 = LK.getAsset('control_2', { anchorX: 0.5, anchorY: 0.5 }); // Initialize control_2 variable in the global scope control_2.update = function () { if (player.intersects(control_2)) { // Trigger event if coinCounter is 30 or more if (coinCounter >= 30) { console.log("Control_2 event triggered: coinCounter = " + coinCounter); // Freeze everything on screen for (var i = 0; i < game.children.length; i++) { var obj = game.children[i]; if (obj.update) { obj.update = function () {}; } } // Optional: Reset coinCounter if desired // coinCounter = 0; // scoreText.setText(coinCounter.toString()); } } }; /**** * Global Variables & Flags ****/ var startNormalEnemy = true; // Normal enemy spawn, başta true; 12 sn sonra true olacak. var coinCounter = 0; var flyinEnemies = []; var playerDeaths = 0; var hearts = []; var remainingHearts = 3; // Global variable to track remaining hearts game.controlActive = false; var coins = []; var firstControlTriggered = false; // Global flag for first control activation var control_2 = LK.getAsset('control_2', { anchorX: 0.5, anchorY: 0.5 }); // Initialize control_2 variable in the global scope control_2.update = function () { if (player.intersects(control_2)) { // Trigger event if coinCounter is 30 or more if (coinCounter >= 30) { console.log("Control_2 event triggered: coinCounter = " + coinCounter); // Freeze everything on screen for (var i = 0; i < game.children.length; i++) { var obj = game.children[i]; if (obj.update) { obj.update = function () {}; } } // Optional: Reset coinCounter if desired // coinCounter = 0; // scoreText.setText(coinCounter.toString()); } } }; var enemies = []; var enemySpawnInterval = Math.floor(Math.random() * 100) + 30; var enemySpawnCounter = 0; var stopSpawn = false; game.weaponEnabled = true; /**** * (A) Eski FlyinEnemy Spawn (sağdan sola, homing false) ****/ function spawnFlyinEnemy() { if (stopSpawn) { return; } var delay = Math.random() * 2000 + 2000; LK.setTimeout(function () { if (stopSpawn) { return; } var fe = new FlyinEnemy(); // Eski davranış: homing false fe.x = 2048; fe.y = 449; fe.zIndex = 10; game.addChild(fe); flyinEnemies.push(fe); spawnFlyinEnemy(); }, delay); } spawnFlyinEnemy(); /**** * (B) Wave şeklinde, homing davranışlı FlyinEnemy Spawn * (Wave enemy'ler Tube2’nin önünde görünmesi için z-index 2100) ****/ function spawnWaveOfFlyinEnemies() { var spawnPoints = [{ x: 0, y: 0 }, { x: 2048, y: 0 }, { x: 0, y: 2732 }, { x: 2048, y: 2732 }, { x: 1024, y: 0 }, { x: 1024, y: 2732 }, { x: 0, y: 1366 }, { x: 2048, y: 1366 }]; for (var i = spawnPoints.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var temp = spawnPoints[i]; spawnPoints[i] = spawnPoints[j]; spawnPoints[j] = temp; } spawnPoints.forEach(function (point, index) { LK.setTimeout(function () { var enemy = new FlyinEnemy(); enemy.homing = true; enemy.wave = true; enemy.x = point.x; enemy.y = point.y; var dx = player.x - enemy.x; var dy = player.y - enemy.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance === 0) { distance = 1; } enemy.vx = dx / distance * enemy.speed; enemy.vy = dy / distance * enemy.speed; enemy.zIndex = 2100; // Tube2 z-index 2000 olduğundan, wave enemy'ler onun önünde görünsün. if (enemy.x < 1024) { enemy.scaleX = -1; } game.addChild(enemy); flyinEnemies.push(enemy); }, index * 800); // 0.8 sn arayla if (index === spawnPoints.length - 1) { LK.setTimeout(function () { spawnFlyinEnemy(); spawnControl2(); // Spawn control_2 after flyin enemy wave starts }, 10000); // 10 seconds after wave started } }); } /**** * Normal Enemy Spawn (sağdan sola, homing false) * Sadece startNormalEnemy true olduğunda update içinde spawn ediliyor. ****/ game.update = function () { scrollingBackground.update(); player.update(); if (game.scrollingBg2 && game.scrollingBg2.update) { game.scrollingBg2.update(); } for (var t = 0; t < game.children.length; t++) { var child = game.children[t]; if (child instanceof Tube) { child.update(); } if (child.children) { for (var c = 0; c < child.children.length; c++) { var subChild = child.children[c]; if (subChild.update) { subChild.update(); } } } } enemySpawnCounter++; if (startNormalEnemy && !stopSpawn && enemySpawnCounter >= enemySpawnInterval && !(LK.ticks >= 876 && LK.ticks <= 936) && !(LK.ticks >= 1776 && LK.ticks <= 1836) && !(LK.ticks >= 2676 && LK.ticks <= 2736) && !(LK.ticks >= 3576 && LK.ticks <= 3636) && !(LK.ticks >= 4476 && LK.ticks <= 4536) && !(LK.ticks >= 5376 && LK.ticks <= 5436) && !(LK.ticks >= 6276 && LK.ticks <= 6336) && !(LK.ticks >= 7776 && LK.ticks <= 7836)) { var canSpawn = true; for (var i = 0; i < enemies.length; i++) { if (enemies[i].x > 1800) { canSpawn = false; break; } } if (canSpawn) { var tubeCollision = false; for (var t = 0; t < game.children.length; t++) { var child = game.children[t]; if (child.asset && child.asset.name === 'tup_1') { var enemyRight = 2048 + 75; var enemyLeft = 2048 - 75; var tubeRight = child.x + 125; var tubeLeft = child.x - 125; if (!(enemyLeft > tubeRight || enemyRight < tubeLeft)) { tubeCollision = true; break; } } } if (!tubeCollision) { LK.setTimeout(function () { if (stopSpawn) { return; } var enemy = new Enemy(); enemy.x = 2048; enemy.y = 2732 / 2 - 13; enemy.zIndex = 10; enemies.push(enemy); game.addChild(enemy); }, 100); } enemySpawnCounter = 0; enemySpawnInterval = Math.floor(Math.random() * 100) + 30; } enemySpawnCounter = 0; enemySpawnInterval = Math.floor(Math.random() * 100) + 30; } game.children.sort(function (a, b) { return (a.zIndex || 0) - (b.zIndex || 0); }); // --- Enemy - Player --- for (var j = enemies.length - 1; j >= 0; j--) { if (enemies[j]) { enemies[j].update(); } if (player.intersects(enemies[j]) && enemies[j].canDamage) { enemies[j].canDamage = false; LK.effects.flashScreen(0xff0000, 750, 0.0001); player.hit(); // Use hit() method to trigger damage and invulnerability if (player.hearts <= 0) { LK.showGameOver(); } } for (var k = game.children.length - 1; k >= 0; k--) { var child = game.children[k]; if (child instanceof Weapon && child.intersects(enemies[j])) { var coin = new Coin(); coin.x = enemies[j].x; coin.y = enemies[j].y; coin.velocity = 5; game.addChild(coin); coins.push(coin); var particleEffect = LK.getAsset('particle', { anchorX: 0.5, anchorY: 0.5, color: 0x808080 }); particleEffect.x = enemies[j].x - 15; particleEffect.y = enemies[j].y; game.addChild(particleEffect); LK.setTimeout(function () { particleEffect.destroy(); }, 150); enemies[j].destroy(); child.destroy(); enemies.splice(j, 1); break; } } } // --- FlyinEnemy - Player --- for (var n = flyinEnemies.length - 1; n >= 0; n--) { if (flyinEnemies[n]) { flyinEnemies[n].update(); } if (player.intersects(flyinEnemies[n]) && flyinEnemies[n].canDamage) { flyinEnemies[n].canDamage = false; LK.effects.flashScreen(0xff0000, 750, 0.0001); player.hit(); // Use hit() method to trigger damage and invulnerability if (player.hearts <= 0) { LK.showGameOver(); } } for (var k = game.children.length - 1; k >= 0; k--) { var child = game.children[k]; if (child instanceof Weapon && child.intersects(flyinEnemies[n])) { if (!flyinEnemies[n].wave) { var coin = new Coin(); coin.x = flyinEnemies[n].x; coin.y = flyinEnemies[n].y + 60; coin.velocity = 5; game.addChild(coin); coins.push(coin); } var particleEffect = LK.getAsset('particle', { anchorX: 0.5, anchorY: 0.5, color: 0x808080 }); particleEffect.x = flyinEnemies[n].x - 30; particleEffect.y = flyinEnemies[n].y + 30; game.addChild(particleEffect); LK.setTimeout(function () { particleEffect.destroy(); }, 150); flyinEnemies[n].destroy(); child.destroy(); flyinEnemies.splice(n, 1); break; } } if (flyinEnemies[n] && !flyinEnemies[n].homing && flyinEnemies[n].x < -50) { flyinEnemies[n].destroy(); flyinEnemies.splice(n, 1); } } // --- Coin toplanması --- for (var m = coins.length - 1; m >= 0; m--) { var coin = coins[m]; coin.x -= coin.velocity; if (coin.x < -100) { coin.destroy(); coins.splice(m, 1); } else if (player.intersects(coin)) { coinCounter++; scoreText.setText(coinCounter.toString()); if (coinCounter > 9 && !scoreText.movedLeft) { scoreText.x -= 20; scoreText.movedLeft = true; } coin.destroy(); coins.splice(m, 1); } } }; // Dokunma/Kontrol game.down = function (x, y, obj) { if (player.isJumping && game.weaponEnabled) { if (!game.lastWeaponTime || Date.now() - game.lastWeaponTime > 350) { var weapon = new Weapon(); weapon.x = player.x; weapon.y = player.y; var dx = x - weapon.x; var dy = y - weapon.y; var distance = Math.sqrt(dx * dx + dy * dy); weapon.directionX = dx / distance; weapon.directionY = dy / distance; var angle = Math.acos(weapon.directionY / Math.sqrt(weapon.directionX * weapon.directionX + weapon.directionY * weapon.directionY)); var angleInDegrees = angle * (180 / Math.PI); if (angleInDegrees <= 30) { weapon.speed *= 1.3; } game.addChild(weapon); LK.setTimeout(function () { weapon.destroy(); }, 9000); game.lastWeaponTime = Date.now(); } } player.jump(); }; // Oyunu Sahneye Ekle LK.stage.addChild(game); /**** Tube Spawn (her 15 saniyede bir) ****/ function spawnTube() { if (stopSpawn) { return; } var tube = new Tube(); tube.x = 2048 + 125; tube.y = 2732 / 2 - 120; game.addChild(tube); var control = LK.getAsset('control', { anchorX: 0.5, anchorY: 0.5 }); control.x = 0; control.y = -177.5; tube.addChild(control); control.update = function () { if (player.intersects(control)) { // First event: Trigger if coinCounter is 10 or more // First activation: if firstControlTriggered is false and coinCounter >= 10 // First control: If controlStage is 1 and coinCounter is 10 or more if (!firstControlTriggered && coinCounter >= 10) { console.log("Control event triggered: coinCounter = " + coinCounter); startNormalEnemy = false; game.controlActive = true; LK.setTimeout(function () { for (var i = enemies.length - 1; i >= 0; i--) { enemies[i].destroy(); enemies.splice(i, 1); } for (var i = flyinEnemies.length - 1; i >= 0; i--) { flyinEnemies[i].destroy(); flyinEnemies.splice(i, 1); } }, 400); for (var i = 0; i < game.children.length; i++) { var obj = game.children[i]; if (obj.update) { obj.update = function () {}; } } LK.setTimeout(function () { player.destroy(); }, 330); enhancedFadeEffect(); firstControlTriggered = true; // Optional: Reset coinCounter if desired // coinCounter = 0; // scoreText.setText(coinCounter.toString()); } } }; if (!stopSpawn) { LK.setTimeout(spawnTube, 15000); } } spawnTube(); /**** Arka Plan ve Oyuncu ****/ var scrollingBackground = new ScrollingBackground(); game.addChild(scrollingBackground); var player = game.addChild(new Player()); player.x = 2048 / 2 - 30; player.y = 2732 / 2 + 3; /**** Skor GUI ve Kalp ****/ var counterBackground = LK.getAsset('counter_background', { anchorX: 0.5, anchorY: 0.5 }); LK.gui.top.addChild(counterBackground); counterBackground.x = LK.gui.top.width / 2 - 62; // Move 3 pixels right counterBackground.y = 45; // Move 5 pixels up var scoreText = new Text2('0', { size: 80, fill: 0xFFFFFF }); LK.gui.top.addChild(scoreText); scoreText.x = LK.gui.top.width / 2 - 85; scoreText.y = 0; for (var i = 0; i < 3; i++) { var heart = LK.getAsset('heart', { anchorX: 0.5, anchorY: 0.5 }); LK.gui.top.addChild(heart); heart.x = 50 + i * 110 + 390; heart.y = 50; hearts.push(heart); } /**** enhancedFadeEffect: Fade-out, clear scene, spawn background2, Tube2, then new player ****/ function enhancedFadeEffect() { if (game.isFading || game.fadeCompleted || !game.controlActive) { return; } game.isFading = true; var overlay = LK.getAsset('overlay', { anchorX: 0, anchorY: 0 }); overlay.alpha = 0; if (!overlay.parent) { LK.stage.addChild(overlay); } var steps = 20; var duration = 500; var stepTime = duration / steps; var currentStep = 0; var fadeOutInterval = LK.setInterval(function () { if (currentStep < steps) { overlay.alpha = currentStep / steps; currentStep++; } else { LK.clearInterval(fadeOutInterval); currentStep = 0; stopSpawn = true; while (game.children.length > 0) { game.removeChild(game.children[0]); } var scrollingBg2 = new ScrollingBackground2(); scrollingBg2.alpha = 0; game.scrollingBg2 = scrollingBg2; game.addChild(scrollingBg2); var tube2 = new Tube2(); control_2.x = 0; // Centered in tube2 control_2.y = -177.5; // Same position as control tube2.addChild(control_2); control_2.update = function () { if (player && player.intersects(control_2)) { if (coinCounter >= 30) { console.log("Control_2 event triggered: coinCounter = " + coinCounter); for (var i = 0; i < game.children.length; i++) { var obj = game.children[i]; if (obj.update) { obj.update = function () {}; } } } } }; control_2.x = 0; // Centered in tube2 control_2.y = -177.5; // Same position as control tube2.addChild(control_2); control_2.update = function () { if (player && player.intersects(control_2)) { if (coinCounter >= 30) { console.log("Control_2 event triggered: coinCounter = " + coinCounter); for (var i = 0; i < game.children.length; i++) { var obj = game.children[i]; if (obj.update) { obj.update = function () {}; } } } } }; tube2.x = 2048 / 2 + 140; tube2.y = tube2.height / 2 - 60; game.addChild(tube2); LK.setTimeout(function () { var newPlayer = new Player(); newPlayer.hearts = remainingHearts; // Use global remainingHearts for new player newPlayer.x = 2048 / 2 - 30; newPlayer.y = tube2.y; newPlayer.isFalling = true; newPlayer.fallSpeed = 0; newPlayer.fallAcceleration = 0.7; newPlayer.fallTargetY = 2732 / 2 - 7; game.addChild(newPlayer); player = newPlayer; game.weaponEnabled = true; LK.setTimeout(function () { spawnWaveOfFlyinEnemies(); }, 800); LK.setTimeout(function () { startNormalEnemy = true; }, 10500); }, 500); var fadeInDuration = 500; var fadeInStepTime = fadeInDuration / steps; var fadeInInterval = LK.setInterval(function () { if (currentStep < steps) { if (game.scrollingBg2) { game.scrollingBg2.alpha = currentStep / steps; } currentStep++; } else { LK.clearInterval(fadeInInterval); if (overlay.parent) { overlay.parent.removeChild(overlay); } var oldScrollingSpeed = game.scrollingBg2.speed; var oldTubeSpeed = tube2.speed; game.scrollingBg2.speed = 0; tube2.speed = 0; LK.setTimeout(function () { game.scrollingBg2.speed = oldScrollingSpeed; tube2.speed = oldTubeSpeed; stopSpawn = false; // Enemy spawn işlemlerine yeniden izin ver. game.isFading = false; game.fadeCompleted = true; }, 8000); } }, fadeInStepTime); } }, stepTime); } /**** Oyun Döngüsü ****/ game.update = function () { scrollingBackground.update(); player.update(); if (game.scrollingBg2 && game.scrollingBg2.update) { game.scrollingBg2.update(); } for (var t = 0; t < game.children.length; t++) { var child = game.children[t]; if (child instanceof Tube) { child.update(); } if (child.children) { for (var c = 0; c < child.children.length; c++) { var subChild = child.children[c]; if (subChild.update) { subChild.update(); } } } } enemySpawnCounter++; if (startNormalEnemy && !stopSpawn && enemySpawnCounter >= enemySpawnInterval && !(LK.ticks >= 876 && LK.ticks <= 936) && !(LK.ticks >= 1776 && LK.ticks <= 1836) && !(LK.ticks >= 2676 && LK.ticks <= 2736) && !(LK.ticks >= 3576 && LK.ticks <= 3636) && !(LK.ticks >= 4476 && LK.ticks <= 4536) && !(LK.ticks >= 5376 && LK.ticks <= 5436) && !(LK.ticks >= 6276 && LK.ticks <= 6336) && !(LK.ticks >= 7776 && LK.ticks <= 7836)) { var canSpawn = true; for (var i = 0; i < enemies.length; i++) { if (enemies[i].x > 1800) { canSpawn = false; break; } } if (canSpawn) { var tubeCollision = false; for (var t = 0; t < game.children.length; t++) { var child = game.children[t]; if (child.asset && child.asset.name === 'tup_1') { var enemyRight = 2048 + 75; var enemyLeft = 2048 - 75; var tubeRight = child.x + 125; var tubeLeft = child.x - 125; if (!(enemyLeft > tubeRight || enemyRight < tubeLeft)) { tubeCollision = true; break; } } } if (!tubeCollision) { LK.setTimeout(function () { if (stopSpawn) { return; } var enemy = new Enemy(); enemy.x = 2048; enemy.y = 2732 / 2 - 13; enemy.zIndex = 10; enemies.push(enemy); game.addChild(enemy); }, 100); } enemySpawnCounter = 0; enemySpawnInterval = Math.floor(Math.random() * 100) + 30; } enemySpawnCounter = 0; enemySpawnInterval = Math.floor(Math.random() * 100) + 30; } game.children.sort(function (a, b) { return (a.zIndex || 0) - (b.zIndex || 0); }); // Çarpışma Kontrolleri for (var j = enemies.length - 1; j >= 0; j--) { if (enemies[j]) { enemies[j].update(); } if (player.intersects(enemies[j]) && enemies[j].canDamage) { enemies[j].canDamage = false; LK.effects.flashScreen(0xff0000, 750, 0.0001); player.loseHeart(); if (player.hearts <= 0) { LK.showGameOver(); } } for (var k = game.children.length - 1; k >= 0; k--) { var child = game.children[k]; if (child instanceof Weapon && child.intersects(enemies[j])) { var coin = new Coin(); coin.x = enemies[j].x; coin.y = enemies[j].y; coin.velocity = 5; game.addChild(coin); coins.push(coin); var particleEffect = LK.getAsset('particle', { anchorX: 0.5, anchorY: 0.5, color: 0x808080 }); particleEffect.x = enemies[j].x - 15; particleEffect.y = enemies[j].y; game.addChild(particleEffect); LK.setTimeout(function () { particleEffect.destroy(); }, 150); enemies[j].destroy(); child.destroy(); enemies.splice(j, 1); break; } } } for (var n = flyinEnemies.length - 1; n >= 0; n--) { if (flyinEnemies[n]) { flyinEnemies[n].update(); } if (player.intersects(flyinEnemies[n]) && flyinEnemies[n].canDamage) { flyinEnemies[n].canDamage = false; LK.effects.flashScreen(0xff0000, 750, 0.0001); player.loseHeart(); if (player.hearts <= 0) { LK.showGameOver(); } } for (var k = game.children.length - 1; k >= 0; k--) { var child = game.children[k]; if (child instanceof Weapon && child.intersects(flyinEnemies[n])) { if (!flyinEnemies[n].wave) { var coin = new Coin(); coin.x = flyinEnemies[n].x; coin.y = flyinEnemies[n].y + 60; coin.velocity = 5; game.addChild(coin); coins.push(coin); } var particleEffect = LK.getAsset('particle', { anchorX: 0.5, anchorY: 0.5, color: 0x808080 }); particleEffect.x = flyinEnemies[n].x - 30; particleEffect.y = flyinEnemies[n].y + 30; game.addChild(particleEffect); LK.setTimeout(function () { particleEffect.destroy(); }, 150); flyinEnemies[n].destroy(); child.destroy(); flyinEnemies.splice(n, 1); break; } } if (flyinEnemies[n] && !flyinEnemies[n].homing && flyinEnemies[n].x < -50) { flyinEnemies[n].destroy(); flyinEnemies.splice(n, 1); } } for (var m = coins.length - 1; m >= 0; m--) { var coin = coins[m]; coin.x -= coin.velocity; if (coin.x < -100) { coin.destroy(); coins.splice(m, 1); } else if (player.intersects(coin)) { coinCounter++; scoreText.setText(coinCounter.toString()); if (coinCounter > 9 && !scoreText.movedLeft) { scoreText.x -= 20; scoreText.movedLeft = true; } coin.destroy(); coins.splice(m, 1); } } }; // Dokunma/Kontrol game.down = function (x, y, obj) { if (player.isJumping && game.weaponEnabled) { if (!game.lastWeaponTime || Date.now() - game.lastWeaponTime > 350) { var weapon = new Weapon(); weapon.x = player.x; weapon.y = player.y; var dx = x - weapon.x; var dy = y - weapon.y; var distance = Math.sqrt(dx * dx + dy * dy); weapon.directionX = dx / distance; weapon.directionY = dy / distance; var angle = Math.acos(weapon.directionY / Math.sqrt(weapon.directionX * weapon.directionX + weapon.directionY * weapon.directionY)); var angleInDegrees = angle * (180 / Math.PI); if (angleInDegrees <= 30) { weapon.speed *= 1.3; } game.addChild(weapon); LK.setTimeout(function () { weapon.destroy(); }, 9000); game.lastWeaponTime = Date.now(); } } player.jump(); }; // Oyunu Sahneye Ekle LK.stage.addChild(game);
/****
* Classes
****/
// Coin class
var Coin = Container.expand(function () {
var self = Container.call(this);
var coinGraphics = self.attachAsset('coin', {
anchorX: 0.5,
anchorY: 0.5
});
self.velocity = 5;
self.zIndex = 15;
self.update = function () {
self.x -= self.velocity;
};
});
// Enemy class
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.zIndex = 10;
self.canDamage = true;
self.update = function () {
self.x -= self.speed;
if (self.x < -50) {
self.destroy();
}
};
});
// FlyinEnemy class (destek: hem eski (homing false) hem de yeni (homing true))
var FlyinEnemy = Container.expand(function () {
var self = Container.call(this);
var flyinEnemyGraphics = self.attachAsset('flyin_enemy', {
anchorX: 0.5,
anchorY: 0
});
self.speed = 5;
self.zIndex = 10;
self.canDamage = true;
self.homing = false; // false: eski davranış, true: oyuncuya yönelik
self.vx = 0;
self.vy = 0;
self.update = function () {
if (!self.homing) {
self.x -= self.speed;
if (self.x < -50) {
self.destroy();
}
} else {
self.x += self.vx;
self.y += self.vy;
if (self.x < -200 || self.x > 2248 || self.y < -200 || self.y > 2932) {
self.destroy();
}
}
};
});
// Player class
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.jumpHeight = 40;
self.isJumping = false;
self.velocityY = 0;
self.isFalling = false;
self.fallSpeed = 0;
self.fallAcceleration = 0.7;
self.fallTargetY = 2732 / 2 - 7;
self.zIndex = 20;
self.hearts = typeof remainingHearts !== 'undefined' ? remainingHearts : 3;
self.update = function () {
self.prevY = self.y;
if (self.isFalling) {
self.y += self.fallSpeed;
self.fallSpeed += self.fallAcceleration;
if (self.y >= self.fallTargetY) {
self.y = self.fallTargetY;
self.isFalling = false;
self.fallSpeed = 0;
game.weaponEnabled = true;
}
}
self.prevY = self.y;
if (self.isJumping) {
self.y += self.velocityY;
self.velocityY += 0.7;
if (self.y >= 2732 / 2 - 3) {
self.y = 2732 / 2 - 9;
self.isJumping = false;
self.velocityY = 0;
}
}
};
self.invulnerable = false; // Invulnerability flag (initially false)
self.hit = function () {
if (!self.invulnerable) {
self.loseHeart();
self.invulnerable = true;
// Make player vulnerable again after 500ms
LK.setTimeout(function () {
self.invulnerable = false;
}, 500);
}
};
self.jump = function () {
if (!self.isJumping) {
self.isJumping = true;
self.velocityY = -self.jumpHeight;
}
};
self.loseHeart = function () {
self.hearts--;
playerDeaths++;
if (playerDeaths === 1 && hearts[0]) {
hearts[0].destroy();
} else if (playerDeaths === 2 && hearts[1]) {
hearts[1].destroy();
} else if (playerDeaths === 3 && hearts[2]) {
hearts[2].destroy();
}
remainingHearts = self.hearts; // Update global remainingHearts
if (hearts.length === 0) {
for (var i = enemies.length - 1; i >= 0; i--) {
enemies[i].destroy();
enemies.splice(i, 1);
}
for (var i = flyinEnemies.length - 1; i >= 0; i--) {
flyinEnemies[i].destroy();
flyinEnemies.splice(i, 1);
}
for (var i = coins.length - 1; i >= 0; i--) {
coins[i].destroy();
coins.splice(i, 1);
}
self.destroy();
game.weaponEnabled = false;
}
};
});
// ScrollingBackground class
var ScrollingBackground = Container.expand(function () {
var self = Container.call(this);
self.bg1 = LK.getAsset('background', {
anchorX: 0,
anchorY: 0
});
self.bg1.x = 0;
self.bg1.y = 0;
self.addChild(self.bg1);
self.bg2 = LK.getAsset('background', {
anchorX: 1,
anchorY: 0
});
self.bg2.scaleX = -1;
self.bg2.x = self.bg1.width;
self.bg2.y = 0;
self.addChild(self.bg2);
self.speed = 2;
self.update = function () {
self.bg1.x -= self.speed;
self.bg2.x -= self.speed;
if (self.bg1.x + self.bg1.width <= 0) {
self.bg1.x = self.bg2.x + self.bg2.width;
}
if (self.bg2.x + self.bg2.width <= 0) {
self.bg2.x = self.bg1.x + self.bg1.width;
}
};
});
// ScrollingBackground2 class
var ScrollingBackground2 = Container.expand(function () {
var self = Container.call(this);
var bg1 = LK.getAsset('background2', {
anchorX: 0,
anchorY: 0
});
bg1.x = 0;
bg1.y = 0;
self.addChild(bg1);
var bg2 = LK.getAsset('background2', {
anchorX: 1,
anchorY: 0
});
bg2.scaleX = -1;
bg2.x = bg1.width;
bg2.y = 0;
self.addChild(bg2);
self.speed = 2;
self.update = function () {
bg1.x -= self.speed;
bg2.x -= self.speed;
if (bg1.x + bg1.width <= 0) {
bg1.x = bg2.x + bg2.width;
}
if (bg2.x + bg2.width <= 0) {
bg2.x = bg1.x + bg1.width;
}
};
});
// Tube class
var Tube = Container.expand(function () {
var self = Container.call(this);
var tubeGraphics = self.attachAsset('tup_1', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.zIndex = 0;
self.update = function () {
self.x -= self.speed;
if (self.x < -50) {
self.destroy();
}
};
});
// Tube2 class
var Tube2 = Container.expand(function () {
var self = Container.call(this);
var tubeGraphics = self.attachAsset('tube_2', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.zIndex = 2000; // Tube2 her zaman ön planda
self.update = function () {
self.x -= self.speed;
if (self.x < -self.width) {
self.destroy();
}
};
});
// Weapon class
var Weapon = Container.expand(function () {
var self = Container.call(this);
var weaponGraphics = self.attachAsset('weapon', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 40;
self.update = function () {
self.x += self.directionX * self.speed;
self.y += self.directionY * self.speed;
weaponGraphics.rotation += 0.3;
if (Math.abs(game.down.x - self.x) < self.speed && Math.abs(game.down.y - self.y) < self.speed) {
self.destroy();
}
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
width: 2048,
height: 2732,
backgroundColor: 0x000000
});
/****
* Game Code
****/
function spawnControl2() {
var tube2 = new Tube2();
control_2.x = 0; // Centered in tube2
control_2.y = -177.5; // Same position as control
tube2.addChild(control_2);
control_2.update = function () {
if (player && player.intersects(control_2)) {
if (coinCounter >= 30) {
console.log("Control_2 event triggered: coinCounter = " + coinCounter);
for (var i = 0; i < game.children.length; i++) {
var obj = game.children[i];
if (obj.update) {
obj.update = function () {};
}
}
}
}
};
tube2.x = 2048 / 2 + 140;
tube2.y = tube2.height / 2 - 60;
game.addChild(tube2);
}
var control_2 = LK.getAsset('control_2', {
anchorX: 0.5,
anchorY: 0.5
}); // Initialize control_2 variable in the global scope
control_2.update = function () {
if (player.intersects(control_2)) {
// Trigger event if coinCounter is 30 or more
if (coinCounter >= 30) {
console.log("Control_2 event triggered: coinCounter = " + coinCounter);
// Freeze everything on screen
for (var i = 0; i < game.children.length; i++) {
var obj = game.children[i];
if (obj.update) {
obj.update = function () {};
}
}
// Optional: Reset coinCounter if desired
// coinCounter = 0;
// scoreText.setText(coinCounter.toString());
}
}
};
/****
* Global Variables & Flags
****/
var startNormalEnemy = true; // Normal enemy spawn, başta true; 12 sn sonra true olacak.
var coinCounter = 0;
var flyinEnemies = [];
var playerDeaths = 0;
var hearts = [];
var remainingHearts = 3; // Global variable to track remaining hearts
game.controlActive = false;
var coins = [];
var firstControlTriggered = false; // Global flag for first control activation
var control_2 = LK.getAsset('control_2', {
anchorX: 0.5,
anchorY: 0.5
}); // Initialize control_2 variable in the global scope
control_2.update = function () {
if (player.intersects(control_2)) {
// Trigger event if coinCounter is 30 or more
if (coinCounter >= 30) {
console.log("Control_2 event triggered: coinCounter = " + coinCounter);
// Freeze everything on screen
for (var i = 0; i < game.children.length; i++) {
var obj = game.children[i];
if (obj.update) {
obj.update = function () {};
}
}
// Optional: Reset coinCounter if desired
// coinCounter = 0;
// scoreText.setText(coinCounter.toString());
}
}
};
var enemies = [];
var enemySpawnInterval = Math.floor(Math.random() * 100) + 30;
var enemySpawnCounter = 0;
var stopSpawn = false;
game.weaponEnabled = true;
/****
* (A) Eski FlyinEnemy Spawn (sağdan sola, homing false)
****/
function spawnFlyinEnemy() {
if (stopSpawn) {
return;
}
var delay = Math.random() * 2000 + 2000;
LK.setTimeout(function () {
if (stopSpawn) {
return;
}
var fe = new FlyinEnemy();
// Eski davranış: homing false
fe.x = 2048;
fe.y = 449;
fe.zIndex = 10;
game.addChild(fe);
flyinEnemies.push(fe);
spawnFlyinEnemy();
}, delay);
}
spawnFlyinEnemy();
/****
* (B) Wave şeklinde, homing davranışlı FlyinEnemy Spawn
* (Wave enemy'ler Tube2’nin önünde görünmesi için z-index 2100)
****/
function spawnWaveOfFlyinEnemies() {
var spawnPoints = [{
x: 0,
y: 0
}, {
x: 2048,
y: 0
}, {
x: 0,
y: 2732
}, {
x: 2048,
y: 2732
}, {
x: 1024,
y: 0
}, {
x: 1024,
y: 2732
}, {
x: 0,
y: 1366
}, {
x: 2048,
y: 1366
}];
for (var i = spawnPoints.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = spawnPoints[i];
spawnPoints[i] = spawnPoints[j];
spawnPoints[j] = temp;
}
spawnPoints.forEach(function (point, index) {
LK.setTimeout(function () {
var enemy = new FlyinEnemy();
enemy.homing = true;
enemy.wave = true;
enemy.x = point.x;
enemy.y = point.y;
var dx = player.x - enemy.x;
var dy = player.y - enemy.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance === 0) {
distance = 1;
}
enemy.vx = dx / distance * enemy.speed;
enemy.vy = dy / distance * enemy.speed;
enemy.zIndex = 2100; // Tube2 z-index 2000 olduğundan, wave enemy'ler onun önünde görünsün.
if (enemy.x < 1024) {
enemy.scaleX = -1;
}
game.addChild(enemy);
flyinEnemies.push(enemy);
}, index * 800); // 0.8 sn arayla
if (index === spawnPoints.length - 1) {
LK.setTimeout(function () {
spawnFlyinEnemy();
spawnControl2(); // Spawn control_2 after flyin enemy wave starts
}, 10000); // 10 seconds after wave started
}
});
}
/****
* Normal Enemy Spawn (sağdan sola, homing false)
* Sadece startNormalEnemy true olduğunda update içinde spawn ediliyor.
****/
game.update = function () {
scrollingBackground.update();
player.update();
if (game.scrollingBg2 && game.scrollingBg2.update) {
game.scrollingBg2.update();
}
for (var t = 0; t < game.children.length; t++) {
var child = game.children[t];
if (child instanceof Tube) {
child.update();
}
if (child.children) {
for (var c = 0; c < child.children.length; c++) {
var subChild = child.children[c];
if (subChild.update) {
subChild.update();
}
}
}
}
enemySpawnCounter++;
if (startNormalEnemy && !stopSpawn && enemySpawnCounter >= enemySpawnInterval && !(LK.ticks >= 876 && LK.ticks <= 936) && !(LK.ticks >= 1776 && LK.ticks <= 1836) && !(LK.ticks >= 2676 && LK.ticks <= 2736) && !(LK.ticks >= 3576 && LK.ticks <= 3636) && !(LK.ticks >= 4476 && LK.ticks <= 4536) && !(LK.ticks >= 5376 && LK.ticks <= 5436) && !(LK.ticks >= 6276 && LK.ticks <= 6336) && !(LK.ticks >= 7776 && LK.ticks <= 7836)) {
var canSpawn = true;
for (var i = 0; i < enemies.length; i++) {
if (enemies[i].x > 1800) {
canSpawn = false;
break;
}
}
if (canSpawn) {
var tubeCollision = false;
for (var t = 0; t < game.children.length; t++) {
var child = game.children[t];
if (child.asset && child.asset.name === 'tup_1') {
var enemyRight = 2048 + 75;
var enemyLeft = 2048 - 75;
var tubeRight = child.x + 125;
var tubeLeft = child.x - 125;
if (!(enemyLeft > tubeRight || enemyRight < tubeLeft)) {
tubeCollision = true;
break;
}
}
}
if (!tubeCollision) {
LK.setTimeout(function () {
if (stopSpawn) {
return;
}
var enemy = new Enemy();
enemy.x = 2048;
enemy.y = 2732 / 2 - 13;
enemy.zIndex = 10;
enemies.push(enemy);
game.addChild(enemy);
}, 100);
}
enemySpawnCounter = 0;
enemySpawnInterval = Math.floor(Math.random() * 100) + 30;
}
enemySpawnCounter = 0;
enemySpawnInterval = Math.floor(Math.random() * 100) + 30;
}
game.children.sort(function (a, b) {
return (a.zIndex || 0) - (b.zIndex || 0);
});
// --- Enemy - Player ---
for (var j = enemies.length - 1; j >= 0; j--) {
if (enemies[j]) {
enemies[j].update();
}
if (player.intersects(enemies[j]) && enemies[j].canDamage) {
enemies[j].canDamage = false;
LK.effects.flashScreen(0xff0000, 750, 0.0001);
player.hit(); // Use hit() method to trigger damage and invulnerability
if (player.hearts <= 0) {
LK.showGameOver();
}
}
for (var k = game.children.length - 1; k >= 0; k--) {
var child = game.children[k];
if (child instanceof Weapon && child.intersects(enemies[j])) {
var coin = new Coin();
coin.x = enemies[j].x;
coin.y = enemies[j].y;
coin.velocity = 5;
game.addChild(coin);
coins.push(coin);
var particleEffect = LK.getAsset('particle', {
anchorX: 0.5,
anchorY: 0.5,
color: 0x808080
});
particleEffect.x = enemies[j].x - 15;
particleEffect.y = enemies[j].y;
game.addChild(particleEffect);
LK.setTimeout(function () {
particleEffect.destroy();
}, 150);
enemies[j].destroy();
child.destroy();
enemies.splice(j, 1);
break;
}
}
}
// --- FlyinEnemy - Player ---
for (var n = flyinEnemies.length - 1; n >= 0; n--) {
if (flyinEnemies[n]) {
flyinEnemies[n].update();
}
if (player.intersects(flyinEnemies[n]) && flyinEnemies[n].canDamage) {
flyinEnemies[n].canDamage = false;
LK.effects.flashScreen(0xff0000, 750, 0.0001);
player.hit(); // Use hit() method to trigger damage and invulnerability
if (player.hearts <= 0) {
LK.showGameOver();
}
}
for (var k = game.children.length - 1; k >= 0; k--) {
var child = game.children[k];
if (child instanceof Weapon && child.intersects(flyinEnemies[n])) {
if (!flyinEnemies[n].wave) {
var coin = new Coin();
coin.x = flyinEnemies[n].x;
coin.y = flyinEnemies[n].y + 60;
coin.velocity = 5;
game.addChild(coin);
coins.push(coin);
}
var particleEffect = LK.getAsset('particle', {
anchorX: 0.5,
anchorY: 0.5,
color: 0x808080
});
particleEffect.x = flyinEnemies[n].x - 30;
particleEffect.y = flyinEnemies[n].y + 30;
game.addChild(particleEffect);
LK.setTimeout(function () {
particleEffect.destroy();
}, 150);
flyinEnemies[n].destroy();
child.destroy();
flyinEnemies.splice(n, 1);
break;
}
}
if (flyinEnemies[n] && !flyinEnemies[n].homing && flyinEnemies[n].x < -50) {
flyinEnemies[n].destroy();
flyinEnemies.splice(n, 1);
}
}
// --- Coin toplanması ---
for (var m = coins.length - 1; m >= 0; m--) {
var coin = coins[m];
coin.x -= coin.velocity;
if (coin.x < -100) {
coin.destroy();
coins.splice(m, 1);
} else if (player.intersects(coin)) {
coinCounter++;
scoreText.setText(coinCounter.toString());
if (coinCounter > 9 && !scoreText.movedLeft) {
scoreText.x -= 20;
scoreText.movedLeft = true;
}
coin.destroy();
coins.splice(m, 1);
}
}
};
// Dokunma/Kontrol
game.down = function (x, y, obj) {
if (player.isJumping && game.weaponEnabled) {
if (!game.lastWeaponTime || Date.now() - game.lastWeaponTime > 350) {
var weapon = new Weapon();
weapon.x = player.x;
weapon.y = player.y;
var dx = x - weapon.x;
var dy = y - weapon.y;
var distance = Math.sqrt(dx * dx + dy * dy);
weapon.directionX = dx / distance;
weapon.directionY = dy / distance;
var angle = Math.acos(weapon.directionY / Math.sqrt(weapon.directionX * weapon.directionX + weapon.directionY * weapon.directionY));
var angleInDegrees = angle * (180 / Math.PI);
if (angleInDegrees <= 30) {
weapon.speed *= 1.3;
}
game.addChild(weapon);
LK.setTimeout(function () {
weapon.destroy();
}, 9000);
game.lastWeaponTime = Date.now();
}
}
player.jump();
};
// Oyunu Sahneye Ekle
LK.stage.addChild(game);
/**** Tube Spawn (her 15 saniyede bir) ****/
function spawnTube() {
if (stopSpawn) {
return;
}
var tube = new Tube();
tube.x = 2048 + 125;
tube.y = 2732 / 2 - 120;
game.addChild(tube);
var control = LK.getAsset('control', {
anchorX: 0.5,
anchorY: 0.5
});
control.x = 0;
control.y = -177.5;
tube.addChild(control);
control.update = function () {
if (player.intersects(control)) {
// First event: Trigger if coinCounter is 10 or more
// First activation: if firstControlTriggered is false and coinCounter >= 10
// First control: If controlStage is 1 and coinCounter is 10 or more
if (!firstControlTriggered && coinCounter >= 10) {
console.log("Control event triggered: coinCounter = " + coinCounter);
startNormalEnemy = false;
game.controlActive = true;
LK.setTimeout(function () {
for (var i = enemies.length - 1; i >= 0; i--) {
enemies[i].destroy();
enemies.splice(i, 1);
}
for (var i = flyinEnemies.length - 1; i >= 0; i--) {
flyinEnemies[i].destroy();
flyinEnemies.splice(i, 1);
}
}, 400);
for (var i = 0; i < game.children.length; i++) {
var obj = game.children[i];
if (obj.update) {
obj.update = function () {};
}
}
LK.setTimeout(function () {
player.destroy();
}, 330);
enhancedFadeEffect();
firstControlTriggered = true;
// Optional: Reset coinCounter if desired
// coinCounter = 0;
// scoreText.setText(coinCounter.toString());
}
}
};
if (!stopSpawn) {
LK.setTimeout(spawnTube, 15000);
}
}
spawnTube();
/**** Arka Plan ve Oyuncu ****/
var scrollingBackground = new ScrollingBackground();
game.addChild(scrollingBackground);
var player = game.addChild(new Player());
player.x = 2048 / 2 - 30;
player.y = 2732 / 2 + 3;
/**** Skor GUI ve Kalp ****/
var counterBackground = LK.getAsset('counter_background', {
anchorX: 0.5,
anchorY: 0.5
});
LK.gui.top.addChild(counterBackground);
counterBackground.x = LK.gui.top.width / 2 - 62; // Move 3 pixels right
counterBackground.y = 45; // Move 5 pixels up
var scoreText = new Text2('0', {
size: 80,
fill: 0xFFFFFF
});
LK.gui.top.addChild(scoreText);
scoreText.x = LK.gui.top.width / 2 - 85;
scoreText.y = 0;
for (var i = 0; i < 3; i++) {
var heart = LK.getAsset('heart', {
anchorX: 0.5,
anchorY: 0.5
});
LK.gui.top.addChild(heart);
heart.x = 50 + i * 110 + 390;
heart.y = 50;
hearts.push(heart);
}
/**** enhancedFadeEffect: Fade-out, clear scene, spawn background2, Tube2, then new player ****/
function enhancedFadeEffect() {
if (game.isFading || game.fadeCompleted || !game.controlActive) {
return;
}
game.isFading = true;
var overlay = LK.getAsset('overlay', {
anchorX: 0,
anchorY: 0
});
overlay.alpha = 0;
if (!overlay.parent) {
LK.stage.addChild(overlay);
}
var steps = 20;
var duration = 500;
var stepTime = duration / steps;
var currentStep = 0;
var fadeOutInterval = LK.setInterval(function () {
if (currentStep < steps) {
overlay.alpha = currentStep / steps;
currentStep++;
} else {
LK.clearInterval(fadeOutInterval);
currentStep = 0;
stopSpawn = true;
while (game.children.length > 0) {
game.removeChild(game.children[0]);
}
var scrollingBg2 = new ScrollingBackground2();
scrollingBg2.alpha = 0;
game.scrollingBg2 = scrollingBg2;
game.addChild(scrollingBg2);
var tube2 = new Tube2();
control_2.x = 0; // Centered in tube2
control_2.y = -177.5; // Same position as control
tube2.addChild(control_2);
control_2.update = function () {
if (player && player.intersects(control_2)) {
if (coinCounter >= 30) {
console.log("Control_2 event triggered: coinCounter = " + coinCounter);
for (var i = 0; i < game.children.length; i++) {
var obj = game.children[i];
if (obj.update) {
obj.update = function () {};
}
}
}
}
};
control_2.x = 0; // Centered in tube2
control_2.y = -177.5; // Same position as control
tube2.addChild(control_2);
control_2.update = function () {
if (player && player.intersects(control_2)) {
if (coinCounter >= 30) {
console.log("Control_2 event triggered: coinCounter = " + coinCounter);
for (var i = 0; i < game.children.length; i++) {
var obj = game.children[i];
if (obj.update) {
obj.update = function () {};
}
}
}
}
};
tube2.x = 2048 / 2 + 140;
tube2.y = tube2.height / 2 - 60;
game.addChild(tube2);
LK.setTimeout(function () {
var newPlayer = new Player();
newPlayer.hearts = remainingHearts; // Use global remainingHearts for new player
newPlayer.x = 2048 / 2 - 30;
newPlayer.y = tube2.y;
newPlayer.isFalling = true;
newPlayer.fallSpeed = 0;
newPlayer.fallAcceleration = 0.7;
newPlayer.fallTargetY = 2732 / 2 - 7;
game.addChild(newPlayer);
player = newPlayer;
game.weaponEnabled = true;
LK.setTimeout(function () {
spawnWaveOfFlyinEnemies();
}, 800);
LK.setTimeout(function () {
startNormalEnemy = true;
}, 10500);
}, 500);
var fadeInDuration = 500;
var fadeInStepTime = fadeInDuration / steps;
var fadeInInterval = LK.setInterval(function () {
if (currentStep < steps) {
if (game.scrollingBg2) {
game.scrollingBg2.alpha = currentStep / steps;
}
currentStep++;
} else {
LK.clearInterval(fadeInInterval);
if (overlay.parent) {
overlay.parent.removeChild(overlay);
}
var oldScrollingSpeed = game.scrollingBg2.speed;
var oldTubeSpeed = tube2.speed;
game.scrollingBg2.speed = 0;
tube2.speed = 0;
LK.setTimeout(function () {
game.scrollingBg2.speed = oldScrollingSpeed;
tube2.speed = oldTubeSpeed;
stopSpawn = false; // Enemy spawn işlemlerine yeniden izin ver.
game.isFading = false;
game.fadeCompleted = true;
}, 8000);
}
}, fadeInStepTime);
}
}, stepTime);
}
/**** Oyun Döngüsü ****/
game.update = function () {
scrollingBackground.update();
player.update();
if (game.scrollingBg2 && game.scrollingBg2.update) {
game.scrollingBg2.update();
}
for (var t = 0; t < game.children.length; t++) {
var child = game.children[t];
if (child instanceof Tube) {
child.update();
}
if (child.children) {
for (var c = 0; c < child.children.length; c++) {
var subChild = child.children[c];
if (subChild.update) {
subChild.update();
}
}
}
}
enemySpawnCounter++;
if (startNormalEnemy && !stopSpawn && enemySpawnCounter >= enemySpawnInterval && !(LK.ticks >= 876 && LK.ticks <= 936) && !(LK.ticks >= 1776 && LK.ticks <= 1836) && !(LK.ticks >= 2676 && LK.ticks <= 2736) && !(LK.ticks >= 3576 && LK.ticks <= 3636) && !(LK.ticks >= 4476 && LK.ticks <= 4536) && !(LK.ticks >= 5376 && LK.ticks <= 5436) && !(LK.ticks >= 6276 && LK.ticks <= 6336) && !(LK.ticks >= 7776 && LK.ticks <= 7836)) {
var canSpawn = true;
for (var i = 0; i < enemies.length; i++) {
if (enemies[i].x > 1800) {
canSpawn = false;
break;
}
}
if (canSpawn) {
var tubeCollision = false;
for (var t = 0; t < game.children.length; t++) {
var child = game.children[t];
if (child.asset && child.asset.name === 'tup_1') {
var enemyRight = 2048 + 75;
var enemyLeft = 2048 - 75;
var tubeRight = child.x + 125;
var tubeLeft = child.x - 125;
if (!(enemyLeft > tubeRight || enemyRight < tubeLeft)) {
tubeCollision = true;
break;
}
}
}
if (!tubeCollision) {
LK.setTimeout(function () {
if (stopSpawn) {
return;
}
var enemy = new Enemy();
enemy.x = 2048;
enemy.y = 2732 / 2 - 13;
enemy.zIndex = 10;
enemies.push(enemy);
game.addChild(enemy);
}, 100);
}
enemySpawnCounter = 0;
enemySpawnInterval = Math.floor(Math.random() * 100) + 30;
}
enemySpawnCounter = 0;
enemySpawnInterval = Math.floor(Math.random() * 100) + 30;
}
game.children.sort(function (a, b) {
return (a.zIndex || 0) - (b.zIndex || 0);
});
// Çarpışma Kontrolleri
for (var j = enemies.length - 1; j >= 0; j--) {
if (enemies[j]) {
enemies[j].update();
}
if (player.intersects(enemies[j]) && enemies[j].canDamage) {
enemies[j].canDamage = false;
LK.effects.flashScreen(0xff0000, 750, 0.0001);
player.loseHeart();
if (player.hearts <= 0) {
LK.showGameOver();
}
}
for (var k = game.children.length - 1; k >= 0; k--) {
var child = game.children[k];
if (child instanceof Weapon && child.intersects(enemies[j])) {
var coin = new Coin();
coin.x = enemies[j].x;
coin.y = enemies[j].y;
coin.velocity = 5;
game.addChild(coin);
coins.push(coin);
var particleEffect = LK.getAsset('particle', {
anchorX: 0.5,
anchorY: 0.5,
color: 0x808080
});
particleEffect.x = enemies[j].x - 15;
particleEffect.y = enemies[j].y;
game.addChild(particleEffect);
LK.setTimeout(function () {
particleEffect.destroy();
}, 150);
enemies[j].destroy();
child.destroy();
enemies.splice(j, 1);
break;
}
}
}
for (var n = flyinEnemies.length - 1; n >= 0; n--) {
if (flyinEnemies[n]) {
flyinEnemies[n].update();
}
if (player.intersects(flyinEnemies[n]) && flyinEnemies[n].canDamage) {
flyinEnemies[n].canDamage = false;
LK.effects.flashScreen(0xff0000, 750, 0.0001);
player.loseHeart();
if (player.hearts <= 0) {
LK.showGameOver();
}
}
for (var k = game.children.length - 1; k >= 0; k--) {
var child = game.children[k];
if (child instanceof Weapon && child.intersects(flyinEnemies[n])) {
if (!flyinEnemies[n].wave) {
var coin = new Coin();
coin.x = flyinEnemies[n].x;
coin.y = flyinEnemies[n].y + 60;
coin.velocity = 5;
game.addChild(coin);
coins.push(coin);
}
var particleEffect = LK.getAsset('particle', {
anchorX: 0.5,
anchorY: 0.5,
color: 0x808080
});
particleEffect.x = flyinEnemies[n].x - 30;
particleEffect.y = flyinEnemies[n].y + 30;
game.addChild(particleEffect);
LK.setTimeout(function () {
particleEffect.destroy();
}, 150);
flyinEnemies[n].destroy();
child.destroy();
flyinEnemies.splice(n, 1);
break;
}
}
if (flyinEnemies[n] && !flyinEnemies[n].homing && flyinEnemies[n].x < -50) {
flyinEnemies[n].destroy();
flyinEnemies.splice(n, 1);
}
}
for (var m = coins.length - 1; m >= 0; m--) {
var coin = coins[m];
coin.x -= coin.velocity;
if (coin.x < -100) {
coin.destroy();
coins.splice(m, 1);
} else if (player.intersects(coin)) {
coinCounter++;
scoreText.setText(coinCounter.toString());
if (coinCounter > 9 && !scoreText.movedLeft) {
scoreText.x -= 20;
scoreText.movedLeft = true;
}
coin.destroy();
coins.splice(m, 1);
}
}
};
// Dokunma/Kontrol
game.down = function (x, y, obj) {
if (player.isJumping && game.weaponEnabled) {
if (!game.lastWeaponTime || Date.now() - game.lastWeaponTime > 350) {
var weapon = new Weapon();
weapon.x = player.x;
weapon.y = player.y;
var dx = x - weapon.x;
var dy = y - weapon.y;
var distance = Math.sqrt(dx * dx + dy * dy);
weapon.directionX = dx / distance;
weapon.directionY = dy / distance;
var angle = Math.acos(weapon.directionY / Math.sqrt(weapon.directionX * weapon.directionX + weapon.directionY * weapon.directionY));
var angleInDegrees = angle * (180 / Math.PI);
if (angleInDegrees <= 30) {
weapon.speed *= 1.3;
}
game.addChild(weapon);
LK.setTimeout(function () {
weapon.destroy();
}, 9000);
game.lastWeaponTime = Date.now();
}
}
player.jump();
};
// Oyunu Sahneye Ekle
LK.stage.addChild(game);
Single 2D Mario Character. In-Game asset. 2d. Blank background.
2D Single Monster. In-Game asset. 2d. Blank background. High contrast. No shadows.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
marionun ingiliz boru anahtarı aleti. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
red heart mario. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
completely black simple counter without sharp edges
sea and sky,pixel,realistic but detailles benzer renkler mavi ve mavi Single Game Texture. In-Game asset. 2d. Blank background. low contrast. No shadows