User prompt
2 bölümü hazırla ilk bölüm bittiğinde level2 yazısı ve tekrar ready yazısı gelsin ( level 1 i de böle yap). bu sefer paket sıralarının yanında gelme sürelerini de ayarla levelin kodlarında sabit olsun yine. tek seferlik rasgele aralıklar ekle çoğunlukla 1,72 saniye biraz 2,15 saniye çok az da 1,29 saniye aralıklarla paketler gelsin
User prompt
hazır demeden geri sayım başlamasın
User prompt
oyun başı bir hazır butonu koy ve basınca oyunu başlat. level 1 arkaplanını da buna göre baştan ayarla butona basınca balşasın sadece
User prompt
level 1 sesi çalmıyor tekrar ekle arkaplan müziği
User prompt
ilk bölümde level1 sesi çalsın
User prompt
paket ve hedef boyutlarını %10 daha arttır
User prompt
paket texturelerini değiştir. mavi bluepacket, sarı yellowpacket, kırmızı redpacket, turuncu orangepacket
User prompt
konfeti efektini büyüt ve çok az da olsa diğer renklerin konfeti parçaları da patlayan kofetide gözüksün ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
hedef kutucukları ve gelen paketleri %20 daha büyüt
User prompt
tuttuğumuz paketler de imlece göre hareket etmeli karakterimizin tam ortasında değil dana ön kısmında durmalı ve dönme senkronizasyonları konumları yönleri iyi ayarlanmalı önünde tutuyormuş gibi ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
çok zor oldu 2 saniyede bir gelsin paketler. karakterimizi %30 büyüt, gelen paketleri %10 büyüt ve hedef kutucukları %20 büyüt.ve çok az bize doğru yaklaştır ekrandan çıkmasın kutucukların görüntüsü
User prompt
çok güzel. paketleri sadece karakterimizin üst hizasından aşşağı doğru indir ve hızlarını %15 arttır
Code edit (1 edits merged)
Please save this source code
User prompt
Color Box Rhythm
Initial prompt
hayali bir kare düşün oyunun tam ortasında karakterimiz de bu karenin ortasında bir daire. karakterimiz sürekli imlecimize bakmalı, sabit duruyor ve imlecimize doğru dönüyor olmalı. karenin köşelerine denk gelen yerlerde 4 farklı renkte hedef kutucuk var sarı mavi kırmızı turuncu. üstümüzden bize doğru yavaşca bu renklerde paketler düşecek. bu paketleri kucağımızda tuttuğumuzda imlecimizle tıkladığımızda elindeki paketi imlecimize doğru fırlatıcak. paketimiz kendi rengindeki kutucuğa değdığınde renkli konfetilerle patlamalı. bu bir ritim oyunu ilk bölümde sabit her saniye elimize bir kutu gelecek. elimize geldiği zaman önemli çünkü sonraki bölümlerde özel ritimler yazacağım sana ona göre tam ritme göre yukardan elimize paket gelmeli (yukarda doğması değil elimize geldiği an çök önemli ritim için nunu asla unutma) şimdilik 1 bölüm yapıyoruz ama. bölümler ve ritim altyapısını iyi hazırla. her bölümde üsten gelen paketlerin renklerinin sırası sabit olmalı hiç bir oyunda herkese aynı sabit bölümü oynat. bölümü oluştururken sen seç renklerin sırasını bölümün kodunda kayıtlı olsun herkes aynı sıralamayı oynamalı . ,ilk bölüm basit 30 saniye sürecek ve elimizde her saniye bir paket olacak şekilde yukardan yavaşca paketler inecek ve bizim imlecimize doğru direk olarak fırlatacak karakterimiz zaten sürekli bize dönük olacak sabit yerinde kucağındaki paketle birlikte dönecek. puan sistemi: doğru renkte kutucuğu vurduğumuzda 100 puan. attığımız paket ekran dışına çıkarsa yani doğru rengi vuramadığımız için konfetilerle patlamazsa -60 puan. kucağımızda kutu yokken tıklama yaparsak -15 puan. elimizde paket varken tekrar üstümüze paket gelirse üstümüze gelen paket yokolur ve -150 puan.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Character = Container.expand(function () { var self = Container.call(this); var characterGraphics = self.attachAsset('character', { anchorX: 0.5, anchorY: 0.5 }); self.heldPackage = null; self.targetRotation = 0; self.update = function () { var rotationDiff = self.targetRotation - self.rotation; while (rotationDiff > Math.PI) rotationDiff -= 2 * Math.PI; while (rotationDiff < -Math.PI) rotationDiff += 2 * Math.PI; self.rotation += rotationDiff * 0.1; if (self.heldPackage) { // Position package in front of character based on rotation var packageDistance = 60; // Distance in front of character var packageX = self.x + Math.cos(self.rotation) * packageDistance; var packageY = self.y + Math.sin(self.rotation) * packageDistance; // Smoothly tween package to new position for better visual flow tween(self.heldPackage, { x: packageX, y: packageY, rotation: self.rotation }, { duration: 100, easing: tween.easeOut }); } }; return self; }); var Confetti = Container.expand(function (colorValue) { var self = Container.call(this); var confettiGraphics = self.attachAsset('confetti', { anchorX: 0.5, anchorY: 0.5 }); confettiGraphics.tint = colorValue; self.velocityX = (Math.random() - 0.5) * 400; self.velocityY = (Math.random() - 0.5) * 400; self.life = 60; self.update = function () { self.x += self.velocityX * (1 / 60); self.y += self.velocityY * (1 / 60); self.velocityY += 300 * (1 / 60); self.life--; if (self.life <= 0) { self.alpha = 0; } }; return self; }); var Package = Container.expand(function (colorValue) { var self = Container.call(this); var assetName = 'yellowpacket'; if (colorValue === 0x0066ff) assetName = 'bluepacket';else if (colorValue === 0xff0000) assetName = 'redpacket';else if (colorValue === 0xff8800) assetName = 'orangepacket'; var packageGraphics = self.attachAsset(assetName, { anchorX: 0.5, anchorY: 0.5 }); self.colorValue = colorValue || 0xffffff; self.speed = 172.5; // 150 * 1.15 = 15% increase self.caught = false; self.thrown = false; self.throwVelocityX = 0; self.throwVelocityY = 0; self.update = function () { if (self.thrown) { self.x += self.throwVelocityX; self.y += self.throwVelocityY; } else if (!self.caught) { self.y += self.speed * (1 / 60); } }; return self; }); var TargetBox = Container.expand(function (colorValue) { var self = Container.call(this); var assetName = 'targetYellow'; if (colorValue === 0x0066ff) assetName = 'targetBlue';else if (colorValue === 0xff0000) assetName = 'targetRed';else if (colorValue === 0xff8800) assetName = 'targetOrange'; var targetGraphics = self.attachAsset(assetName, { anchorX: 0.5, anchorY: 0.5 }); self.colorValue = colorValue; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x1a1a1a }); /**** * Game Code ****/ var gameWidth = 2048; var gameHeight = 2732; var arenaSize = 1200; var arenaX = gameWidth / 2; var arenaY = gameHeight / 2; // Game arena var arena = game.addChild(LK.getAsset('arena', { anchorX: 0.5, anchorY: 0.5, x: arenaX, y: arenaY })); // Character var character = game.addChild(new Character()); character.x = arenaX; character.y = arenaY; // Target boxes at corners var targets = []; var targetColors = [0xffff00, 0x0066ff, 0xff0000, 0xff8800]; // yellow, blue, red, orange var targetPositions = [{ x: arenaX - arenaSize / 2 + 120, y: arenaY - arenaSize / 2 + 120 }, // top-left { x: arenaX + arenaSize / 2 - 120, y: arenaY - arenaSize / 2 + 120 }, // top-right { x: arenaX - arenaSize / 2 + 120, y: arenaY + arenaSize / 2 - 120 }, // bottom-left { x: arenaX + arenaSize / 2 - 120, y: arenaY + arenaSize / 2 - 120 } // bottom-right ]; for (var i = 0; i < 4; i++) { var target = game.addChild(new TargetBox(targetColors[i])); target.x = targetPositions[i].x; target.y = targetPositions[i].y; targets.push(target); } // Game state var packages = []; var confettiParticles = []; var gameTime = 0; var gameDuration = 30000; // 30 seconds var packageSpawnInterval = 2000; // 2 seconds var lastPackageSpawn = 0; var gameStarted = false; var gameEnded = false; var gameReady = false; // Level system var currentLevel = 1; var maxLevel = 2; // Level 1 data var level1ColorSequence = [0xffff00, 0x0066ff, 0xff0000, 0xff8800, 0xffff00, 0xff0000, 0x0066ff, 0xff8800, 0xff0000, 0xffff00, 0x0066ff, 0xff8800, 0xffff00, 0xff8800, 0x0066ff, 0xff0000, 0xffff00, 0x0066ff, 0xff8800, 0xff0000, 0x0066ff, 0xffff00, 0xff0000, 0xff8800, 0xffff00, 0x0066ff, 0xff8800, 0xff0000, 0xffff00, 0x0066ff]; var level1SpawnIntervals = [1720, 1720, 2150, 1720, 1290, 1720, 1720, 2150, 1720, 1720, 1290, 1720, 2150, 1720, 1720, 1290, 1720, 1720, 2150, 1720, 1290, 1720, 1720, 2150, 1720, 1720, 1290, 1720, 1720, 2150]; // Level 2 data var level2ColorSequence = [0xff0000, 0x0066ff, 0xffff00, 0xff8800, 0xff0000, 0xffff00, 0x0066ff, 0xff8800, 0xff0000, 0xff8800, 0x0066ff, 0xffff00, 0xff0000, 0x0066ff, 0xff8800, 0xffff00, 0xff0000, 0xffff00, 0x0066ff, 0xff8800, 0xff0000, 0xff8800, 0xffff00, 0x0066ff, 0xff0000, 0x0066ff, 0xff8800, 0xffff00, 0xff0000, 0xffff00]; var level2SpawnIntervals = [1290, 1720, 1720, 2150, 1290, 1720, 1290, 1720, 2150, 1720, 1290, 1720, 1720, 2150, 1290, 1720, 1720, 1290, 2150, 1720, 1290, 1720, 1720, 2150, 1290, 1720, 1290, 1720, 2150, 1720]; // Current level data var colorSequence = level1ColorSequence; var spawnIntervals = level1SpawnIntervals; var currentSequenceIndex = 0; // UI var scoreTxt = new Text2('Score: 0', { size: 80, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); var timeTxt = new Text2('Time: 30', { size: 60, fill: 0xFFFFFF }); timeTxt.anchor.set(1, 0); LK.gui.topRight.addChild(timeTxt); // Ready button var readyButton = new Text2('READY', { size: 120, fill: 0x00FF00 }); readyButton.anchor.set(0.5, 0.5); readyButton.x = gameWidth / 2; readyButton.y = gameHeight / 2; game.addChild(readyButton); // Ready button background var readyButtonBg = LK.getAsset('package', { anchorX: 0.5, anchorY: 0.5, x: gameWidth / 2, y: gameHeight / 2, scaleX: 3, scaleY: 1.5 }); readyButtonBg.tint = 0x333333; game.addChild(readyButtonBg); readyButton.parent.setChildIndex(readyButton, readyButton.parent.children.length - 1); // Level text var levelTxt = new Text2('LEVEL 1', { size: 100, fill: 0xFFFF00 }); levelTxt.anchor.set(0.5, 0.5); levelTxt.x = gameWidth / 2; levelTxt.y = gameHeight / 2 - 150; game.addChild(levelTxt); // Helper functions function getColorName(colorValue) { switch (colorValue) { case 0xffff00: return 'Yellow'; case 0x0066ff: return 'Blue'; case 0xff0000: return 'Red'; case 0xff8800: return 'Orange'; default: return 'Unknown'; } } function spawnPackage() { if (currentSequenceIndex >= colorSequence.length) return; var packageColor = colorSequence[currentSequenceIndex]; currentSequenceIndex++; var newPackage = new Package(packageColor); newPackage.x = character.x; // Spawn directly above character newPackage.y = arenaY - arenaSize / 2 - 50; packages.push(newPackage); game.addChild(newPackage); } function getNextSpawnInterval() { if (currentSequenceIndex >= spawnIntervals.length) return 1720; // Default interval return spawnIntervals[currentSequenceIndex]; } function switchToLevel2() { currentLevel = 2; colorSequence = level2ColorSequence; spawnIntervals = level2SpawnIntervals; currentSequenceIndex = 0; gameTime = 0; lastPackageSpawn = 0; gameStarted = false; gameEnded = false; gameReady = false; levelTxt.setText('LEVEL 2'); // Show ready button again readyButton = new Text2('READY', { size: 120, fill: 0x00FF00 }); readyButton.anchor.set(0.5, 0.5); readyButton.x = gameWidth / 2; readyButton.y = gameHeight / 2; game.addChild(readyButton); readyButtonBg = LK.getAsset('package', { anchorX: 0.5, anchorY: 0.5, x: gameWidth / 2, y: gameHeight / 2, scaleX: 3, scaleY: 1.5 }); readyButtonBg.tint = 0x333333; game.addChild(readyButtonBg); readyButton.parent.setChildIndex(readyButton, readyButton.parent.children.length - 1); } function createConfettiExplosion(x, y, color) { var allColors = [0xffff00, 0x0066ff, 0xff0000, 0xff8800]; // yellow, blue, red, orange // Create more particles for bigger explosion (25 instead of 15) for (var i = 0; i < 25; i++) { var confettiColor; if (i < 18) { // Most particles (72%) use the main color confettiColor = color; } else { // Some particles (28%) use random other colors confettiColor = allColors[Math.floor(Math.random() * allColors.length)]; } var confetti = new Confetti(confettiColor); confetti.x = x; confetti.y = y; // Scale up confetti particles by 1.5x for bigger effect tween(confetti, { scaleX: 1.5, scaleY: 1.5 }, { duration: 50, easing: tween.easeOut }); confettiParticles.push(confetti); game.addChild(confetti); } } function checkPackageTargetCollision(packageObj, target) { var dx = packageObj.x - target.x; var dy = packageObj.y - target.y; var distance = Math.sqrt(dx * dx + dy * dy); return distance < 80; } function throwPackage(targetX, targetY) { if (!character.heldPackage) { // Empty click penalty LK.setScore(LK.getScore() - 15); LK.getSound('miss').play(); return; } var packageToThrow = character.heldPackage; character.heldPackage = null; var dx = targetX - packageToThrow.x; var dy = targetY - packageToThrow.y; var distance = Math.sqrt(dx * dx + dy * dy); var speed = 800; packageToThrow.throwVelocityX = dx / distance * speed * (1 / 60); packageToThrow.throwVelocityY = dy / distance * speed * (1 / 60); packageToThrow.thrown = true; LK.getSound('throw').play(); } // Event handlers game.move = function (x, y, obj) { var dx = x - character.x; var dy = y - character.y; character.targetRotation = Math.atan2(dy, dx); }; game.down = function (x, y, obj) { if (!gameReady) { // Check if clicked on ready button area var buttonX = gameWidth / 2; var buttonY = gameHeight / 2; var buttonWidth = 200; var buttonHeight = 100; if (x >= buttonX - buttonWidth && x <= buttonX + buttonWidth && y >= buttonY - buttonHeight && y <= buttonY + buttonHeight) { gameReady = true; readyButton.destroy(); readyButtonBg.destroy(); if (currentLevel > 1) { levelTxt.destroy(); } } return; } if (gameEnded) return; throwPackage(x, y); }; // Main game update game.update = function () { if (!gameReady) return; if (!gameStarted) { gameStarted = true; gameTime = 0; // Reset game time when starting lastPackageSpawn = 0; // Reset package spawn timer LK.getSound('level1').play(); LK.playMusic('bgmusic'); } if (gameEnded) return; gameTime += 1000 / 60; // Increment game time only after ready var remainingTime = Math.max(0, Math.ceil((gameDuration - gameTime) / 1000)); timeTxt.setText('Time: ' + remainingTime); // Check for level completion if (currentSequenceIndex >= colorSequence.length && packages.length === 0) { if (currentLevel < maxLevel) { switchToLevel2(); return; } else { gameEnded = true; if (LK.getScore() >= 1500) { LK.showYouWin(); } else { LK.showGameOver(); } return; } } // Check for game end by time if (gameTime >= gameDuration) { gameEnded = true; if (LK.getScore() >= 1500) { LK.showYouWin(); } else { LK.showGameOver(); } return; } // Spawn packages with dynamic intervals var nextInterval = getNextSpawnInterval(); if (gameTime - lastPackageSpawn >= nextInterval && currentSequenceIndex < colorSequence.length) { spawnPackage(); lastPackageSpawn = gameTime; } // Update packages for (var i = packages.length - 1; i >= 0; i--) { var pkg = packages[i]; if (pkg.lastY === undefined) pkg.lastY = pkg.y; if (pkg.lastCaught === undefined) pkg.lastCaught = false; if (pkg.lastThrown === undefined) pkg.lastThrown = false; // Check if package reached character (catch) if (!pkg.caught && !pkg.thrown) { var distanceToCharacter = Math.sqrt(Math.pow(pkg.x - character.x, 2) + Math.pow(pkg.y - character.y, 2)); if (distanceToCharacter < 50) { if (!character.heldPackage) { pkg.caught = true; character.heldPackage = pkg; LK.getSound('catch').play(); } } } // Check if package fell off screen (drop penalty) if (!pkg.caught && !pkg.thrown && pkg.y > arenaY + arenaSize / 2 + 100) { LK.setScore(LK.getScore() - 150); pkg.destroy(); packages.splice(i, 1); continue; } // Check thrown package collisions with targets if (pkg.thrown) { var hitTarget = false; for (var j = 0; j < targets.length; j++) { var target = targets[j]; if (checkPackageTargetCollision(pkg, target)) { if (pkg.colorValue === target.colorValue) { // Correct color match LK.setScore(LK.getScore() + 100); createConfettiExplosion(target.x, target.y, pkg.colorValue); LK.getSound('hit').play(); } else { // Wrong color penalty LK.setScore(LK.getScore() - 60); LK.getSound('miss').play(); } hitTarget = true; break; } } if (hitTarget || pkg.x < 0 || pkg.x > gameWidth || pkg.y < 0 || pkg.y > gameHeight) { if (!hitTarget) { // Missed throw penalty LK.setScore(LK.getScore() - 60); LK.getSound('miss').play(); } pkg.destroy(); packages.splice(i, 1); continue; } } pkg.lastY = pkg.y; pkg.lastCaught = pkg.caught; pkg.lastThrown = pkg.thrown; } // Update confetti for (var i = confettiParticles.length - 1; i >= 0; i--) { var confetti = confettiParticles[i]; if (confetti.alpha <= 0) { confetti.destroy(); confettiParticles.splice(i, 1); } } // Update score display scoreTxt.setText('Score: ' + LK.getScore()); };
===================================================================
--- original.js
+++ change.js
@@ -158,10 +158,20 @@
var lastPackageSpawn = 0;
var gameStarted = false;
var gameEnded = false;
var gameReady = false;
-// Predetermined color sequence for level 1
-var colorSequence = [0xffff00, 0x0066ff, 0xff0000, 0xff8800, 0xffff00, 0xff0000, 0x0066ff, 0xff8800, 0xff0000, 0xffff00, 0x0066ff, 0xff8800, 0xffff00, 0xff8800, 0x0066ff, 0xff0000, 0xffff00, 0x0066ff, 0xff8800, 0xff0000, 0x0066ff, 0xffff00, 0xff0000, 0xff8800, 0xffff00, 0x0066ff, 0xff8800, 0xff0000, 0xffff00, 0x0066ff];
+// Level system
+var currentLevel = 1;
+var maxLevel = 2;
+// Level 1 data
+var level1ColorSequence = [0xffff00, 0x0066ff, 0xff0000, 0xff8800, 0xffff00, 0xff0000, 0x0066ff, 0xff8800, 0xff0000, 0xffff00, 0x0066ff, 0xff8800, 0xffff00, 0xff8800, 0x0066ff, 0xff0000, 0xffff00, 0x0066ff, 0xff8800, 0xff0000, 0x0066ff, 0xffff00, 0xff0000, 0xff8800, 0xffff00, 0x0066ff, 0xff8800, 0xff0000, 0xffff00, 0x0066ff];
+var level1SpawnIntervals = [1720, 1720, 2150, 1720, 1290, 1720, 1720, 2150, 1720, 1720, 1290, 1720, 2150, 1720, 1720, 1290, 1720, 1720, 2150, 1720, 1290, 1720, 1720, 2150, 1720, 1720, 1290, 1720, 1720, 2150];
+// Level 2 data
+var level2ColorSequence = [0xff0000, 0x0066ff, 0xffff00, 0xff8800, 0xff0000, 0xffff00, 0x0066ff, 0xff8800, 0xff0000, 0xff8800, 0x0066ff, 0xffff00, 0xff0000, 0x0066ff, 0xff8800, 0xffff00, 0xff0000, 0xffff00, 0x0066ff, 0xff8800, 0xff0000, 0xff8800, 0xffff00, 0x0066ff, 0xff0000, 0x0066ff, 0xff8800, 0xffff00, 0xff0000, 0xffff00];
+var level2SpawnIntervals = [1290, 1720, 1720, 2150, 1290, 1720, 1290, 1720, 2150, 1720, 1290, 1720, 1720, 2150, 1290, 1720, 1720, 1290, 2150, 1720, 1290, 1720, 1720, 2150, 1290, 1720, 1290, 1720, 2150, 1720];
+// Current level data
+var colorSequence = level1ColorSequence;
+var spawnIntervals = level1SpawnIntervals;
var currentSequenceIndex = 0;
// UI
var scoreTxt = new Text2('Score: 0', {
size: 80,
@@ -195,8 +205,17 @@
});
readyButtonBg.tint = 0x333333;
game.addChild(readyButtonBg);
readyButton.parent.setChildIndex(readyButton, readyButton.parent.children.length - 1);
+// Level text
+var levelTxt = new Text2('LEVEL 1', {
+ size: 100,
+ fill: 0xFFFF00
+});
+levelTxt.anchor.set(0.5, 0.5);
+levelTxt.x = gameWidth / 2;
+levelTxt.y = gameHeight / 2 - 150;
+game.addChild(levelTxt);
// Helper functions
function getColorName(colorValue) {
switch (colorValue) {
case 0xffff00:
@@ -220,8 +239,44 @@
newPackage.y = arenaY - arenaSize / 2 - 50;
packages.push(newPackage);
game.addChild(newPackage);
}
+function getNextSpawnInterval() {
+ if (currentSequenceIndex >= spawnIntervals.length) return 1720; // Default interval
+ return spawnIntervals[currentSequenceIndex];
+}
+function switchToLevel2() {
+ currentLevel = 2;
+ colorSequence = level2ColorSequence;
+ spawnIntervals = level2SpawnIntervals;
+ currentSequenceIndex = 0;
+ gameTime = 0;
+ lastPackageSpawn = 0;
+ gameStarted = false;
+ gameEnded = false;
+ gameReady = false;
+ levelTxt.setText('LEVEL 2');
+ // Show ready button again
+ readyButton = new Text2('READY', {
+ size: 120,
+ fill: 0x00FF00
+ });
+ readyButton.anchor.set(0.5, 0.5);
+ readyButton.x = gameWidth / 2;
+ readyButton.y = gameHeight / 2;
+ game.addChild(readyButton);
+ readyButtonBg = LK.getAsset('package', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: gameWidth / 2,
+ y: gameHeight / 2,
+ scaleX: 3,
+ scaleY: 1.5
+ });
+ readyButtonBg.tint = 0x333333;
+ game.addChild(readyButtonBg);
+ readyButton.parent.setChildIndex(readyButton, readyButton.parent.children.length - 1);
+}
function createConfettiExplosion(x, y, color) {
var allColors = [0xffff00, 0x0066ff, 0xff0000, 0xff8800]; // yellow, blue, red, orange
// Create more particles for bigger explosion (25 instead of 15)
for (var i = 0; i < 25; i++) {
@@ -288,8 +343,11 @@
if (x >= buttonX - buttonWidth && x <= buttonX + buttonWidth && y >= buttonY - buttonHeight && y <= buttonY + buttonHeight) {
gameReady = true;
readyButton.destroy();
readyButtonBg.destroy();
+ if (currentLevel > 1) {
+ levelTxt.destroy();
+ }
}
return;
}
if (gameEnded) return;
@@ -308,9 +366,24 @@
if (gameEnded) return;
gameTime += 1000 / 60; // Increment game time only after ready
var remainingTime = Math.max(0, Math.ceil((gameDuration - gameTime) / 1000));
timeTxt.setText('Time: ' + remainingTime);
- // Check for game end
+ // Check for level completion
+ if (currentSequenceIndex >= colorSequence.length && packages.length === 0) {
+ if (currentLevel < maxLevel) {
+ switchToLevel2();
+ return;
+ } else {
+ gameEnded = true;
+ if (LK.getScore() >= 1500) {
+ LK.showYouWin();
+ } else {
+ LK.showGameOver();
+ }
+ return;
+ }
+ }
+ // Check for game end by time
if (gameTime >= gameDuration) {
gameEnded = true;
if (LK.getScore() >= 1500) {
LK.showYouWin();
@@ -318,10 +391,11 @@
LK.showGameOver();
}
return;
}
- // Spawn packages
- if (gameTime - lastPackageSpawn >= packageSpawnInterval && currentSequenceIndex < colorSequence.length) {
+ // Spawn packages with dynamic intervals
+ var nextInterval = getNextSpawnInterval();
+ if (gameTime - lastPackageSpawn >= nextInterval && currentSequenceIndex < colorSequence.length) {
spawnPackage();
lastPackageSpawn = gameTime;
}
// Update packages
bire bir aynı daha açık parlak sarı
birebir aynısı sarı-gri renkleri biraz daha koyu gri ile karıştır mavi-gri renklerin maviliğini biraz arttır. biraz da kırmızı-gri kareleri düzel
birebir aynısı. karelerin yerlerini değiştir dizilimi bozmadan
fitili ateşlenmiş parlak üzerinde yeşil tehlike işareti olan siyah bomba. In-Game asset. 2d. High contrast. No shadows
müzik temalı cool ready yazısı biraz da sprey boya punk tarzı. In-Game asset. 2d. High contrast. No shadows
dehşet saçan bir hell mode yazısı tek line olsun geniş kısa. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
açık mavi dj masası ekipmanı. In-Game asset. 2d. High contrast. No shadows
aynı stil daha parlak ve altınımsı mikrofon ve kulaklığı kaldır
orange cool dj keyboard rgb keys. In-Game asset. 2d. High contrast. No shadows
red cool dj headset rgp neon. In-Game asset. 2d. High contrast. No shadows