User prompt
bir yerden sonra oyunu bitir dediğim yerden ötürü şekerler hareket etmiyo şekerleri hareket ettirebilmemi sağla
User prompt
mavi hareket ettirilemeyen şeyleri kaldır ve onlar geldiğinde şekerleri hareket ettiremiyorum yinede hareket edirebilmeyi sağla
User prompt
a hemen çalıp duruyo 15 saniye çalsın sonra dursun
User prompt
a müziğini sadece 1 kez çal
User prompt
a müziği çaldıktan sonra dursun
User prompt
when disco ball clicked play music a
User prompt
eğer hareket ettiricek bişey kalmazsa oyunu bitir
User prompt
disco topuna tıklandığında disco sesini çal
User prompt
disco topunun süresini 15 saniye yap ve disco topuna tıklandığında disco sesini çal ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Please fix the bug: 'Uncaught ReferenceError: startDiscoBallEffect is not defined' in or related to this line: 'startDiscoBallEffect();' Line Number: 173
User prompt
Please fix the bug: 'Uncaught ReferenceError: startDiscoBallEffect is not defined' in or related to this line: 'startDiscoBallEffect();' Line Number: 173
User prompt
disco topu ekle buna tıklandığında 4 saniye boyunca alandaki rastgele şekerleri yok etsin disco topuna tıklanıldığında 3500 puan kazanılsın ama nadir birşey olduğu için çıkma olasılığını %0.6 yap ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
oyunun bitebilmesini sağla oyun ilk başta çok kolay olsun score arttıkça zorlaşsın oyuncu zorlansın en sonunda 36000 score civarlarında çok zorla ve 55000 le 36000 arasında bir score da rastgele bir sayı seç o skorda yeri değiştirilebilecek şeker bırakma ve oyunu bitir
User prompt
bombanında score la birlikte düşen ihtimalini kısıtlayalım %0.7 nin altına düşmesin
User prompt
ya da %0.8 yap
User prompt
firework gelme olasılığı hiç bir zaman düşmesin ve %1.4 olsun
User prompt
arada bir gelen fişekler ekle buna da tıkladığımızda kendi yükseklik ve yatay eksenini yok etsin
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading '11')' in or related to this line: 'if (grid[x][y] && grid[x + 1][y + 1] && grid[x + 2][y + 2] && grid[x][y].type === grid[x + 1][y + 1].type && grid[x][y].type === grid[x + 2][y + 2].type) {' Line Number: 296
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading '1')' in or related to this line: 'if (y - 2 >= 0 && grid[x][y] && grid[x + 1][y - 1] && grid[x + 2][y - 2] && grid[x][y].type === grid[x + 1][y - 1].type && grid[x][y].type === grid[x + 2][y - 2].type) {' Line Number: 323
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading '6')' in or related to this line: 'if (grid[x][y] && grid[x + 1][y - 1] && grid[x + 2][y - 2] && grid[x][y].type === grid[x + 1][y - 1].type && grid[x][y].type === grid[x + 2][y - 2].type) {' Line Number: 323
User prompt
şekerlerin çaprazlama kırılmasını da sağla
User prompt
bomba çıkma olasılığını score arttıkça azalt ama %1.3 den başlat
User prompt
çok az daha
User prompt
Score yazısını biraz daha yukarı taşı high score un üstüne
User prompt
score görünmüyor
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Bomb = Container.expand(function () { var self = Container.call(this); var bombGraphics = self.attachAsset('bomb', { anchorX: 0.5, anchorY: 0.5 }); self.gridX = 0; self.gridY = 0; self.setGridPosition = function (gridX, gridY) { self.gridX = gridX; self.gridY = gridY; var targetX = gridStartX + gridX * cellSize + cellSize / 2; var targetY = gridStartY + gridY * cellSize + cellSize / 2; self.x = targetX; self.y = targetY; }; self.animateToGridPosition = function (gridX, gridY, duration, onComplete) { self.gridX = gridX; self.gridY = gridY; var targetX = gridStartX + gridX * cellSize + cellSize / 2; var targetY = gridStartY + gridY * cellSize + cellSize / 2; self.animateToPosition(targetX, targetY, duration, onComplete); }; self.animateToPosition = function (targetX, targetY, duration, onComplete) { tween(self, { x: targetX, y: targetY }, { duration: duration || 300, easing: tween.easeOut, onFinish: function onFinish() { if (onComplete) { onComplete(); } } }); }; self.down = function () { explodeBomb(self.gridX, self.gridY); self.destroy(); grid[self.gridX][self.gridY] = null; LK.setTimeout(function () { applyGravity(); LK.setTimeout(function () { fillEmptySpaces(); LK.setTimeout(function () { processMatches(); }, 500); }, 400); }, 200); }; return self; }); var Candy = Container.expand(function (type) { var self = Container.call(this); self.type = type; self.gridX = 0; self.gridY = 0; self.isAnimating = false; var candyGraphics = self.attachAsset('candy_' + type, { anchorX: 0.5, anchorY: 0.5 }); self.setGridPosition = function (gridX, gridY) { self.gridX = gridX; self.gridY = gridY; var targetX = gridStartX + gridX * cellSize + cellSize / 2; var targetY = gridStartY + gridY * cellSize + cellSize / 2; self.x = targetX; self.y = targetY; }; self.animateToPosition = function (targetX, targetY, duration, onComplete) { self.isAnimating = true; tween(self, { x: targetX, y: targetY }, { duration: duration || 300, easing: tween.easeOut, onFinish: function onFinish() { self.isAnimating = false; if (onComplete) { onComplete(); } } }); }; self.animateToGridPosition = function (gridX, gridY, duration, onComplete) { self.gridX = gridX; self.gridY = gridY; var targetX = gridStartX + gridX * cellSize + cellSize / 2; var targetY = gridStartY + gridY * cellSize + cellSize / 2; self.animateToPosition(targetX, targetY, duration, onComplete); }; return self; }); var DiscoBall = Container.expand(function () { var self = Container.call(this); var discoBallGraphics = self.attachAsset('disco_ball', { anchorX: 0.5, anchorY: 0.5 }); self.gridX = 0; self.gridY = 0; self.setGridPosition = function (gridX, gridY) { self.gridX = gridX; self.gridY = gridY; var targetX = gridStartX + gridX * cellSize + cellSize / 2; var targetY = gridStartY + gridY * cellSize + cellSize / 2; self.x = targetX; self.y = targetY; }; self.animateToGridPosition = function (gridX, gridY, duration, onComplete) { self.gridX = gridX; self.gridY = gridY; var targetX = gridStartX + gridX * cellSize + cellSize / 2; var targetY = gridStartY + gridY * cellSize + cellSize / 2; self.animateToPosition(targetX, targetY, duration, onComplete); }; self.animateToPosition = function (targetX, targetY, duration, onComplete) { tween(self, { x: targetX, y: targetY }, { duration: duration || 300, easing: tween.easeOut, onFinish: function onFinish() { if (onComplete) { onComplete(); } } }); }; self.down = function () { // Play disco sound LK.getSound('Disco').play(); // Play music 'a' only once if (!self.musicAPlayed) { LK.playMusic('a'); self.musicAPlayed = true; } // Stop music 'a' after 15 seconds LK.setTimeout(function () { LK.stopMusic(); }, 15000); // Play for 15 seconds // Award 3500 points immediately LK.setScore(LK.getScore() + 3500); scoreText.setText('Score: ' + LK.getScore()); // Update high score if current score is higher if (LK.getScore() > (storage.highScore || 0)) { storage.highScore = LK.getScore(); highScoreText.setText('High Score: ' + LK.getScore()); } // Start disco ball effect for 15 seconds startDiscoBallEffect(); // Remove disco ball from grid self.destroy(); grid[self.gridX][self.gridY] = null; LK.setTimeout(function () { applyGravity(); LK.setTimeout(function () { fillEmptySpaces(); LK.setTimeout(function () { processMatches(); }, 500); }, 400); }, 200); }; return self; }); var Firework = Container.expand(function () { var self = Container.call(this); var fireworkGraphics = self.attachAsset('firework', { anchorX: 0.5, anchorY: 0.5 }); self.gridX = 0; self.gridY = 0; self.setGridPosition = function (gridX, gridY) { self.gridX = gridX; self.gridY = gridY; var targetX = gridStartX + gridX * cellSize + cellSize / 2; var targetY = gridStartY + gridY * cellSize + cellSize / 2; self.x = targetX; self.y = targetY; }; self.animateToGridPosition = function (gridX, gridY, duration, onComplete) { self.gridX = gridX; self.gridY = gridY; var targetX = gridStartX + gridX * cellSize + cellSize / 2; var targetY = gridStartY + gridY * cellSize + cellSize / 2; self.animateToPosition(targetX, targetY, duration, onComplete); }; self.animateToPosition = function (targetX, targetY, duration, onComplete) { tween(self, { x: targetX, y: targetY }, { duration: duration || 300, easing: tween.easeOut, onFinish: function onFinish() { if (onComplete) { onComplete(); } } }); }; self.down = function () { explodeFirework(self.gridX, self.gridY); self.destroy(); grid[self.gridX][self.gridY] = null; LK.setTimeout(function () { applyGravity(); LK.setTimeout(function () { fillEmptySpaces(); LK.setTimeout(function () { processMatches(); }, 500); }, 400); }, 200); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x2E8B57 }); /**** * Game Code ****/ function startDiscoBallEffect() { discoEffectActive = true; var effectDuration = 15000; // 15 seconds var destroyInterval = 150; // Destroy candies every 150ms var destroyTimer = LK.setInterval(function () { if (!discoEffectActive) return; // Find all regular candies (not bombs, fireworks, or disco balls) var regularCandies = []; for (var x = 0; x < GRID_SIZE; x++) { for (var y = 0; y < GRID_SIZE; y++) { if (grid[x][y] && grid[x][y].type && grid[x][y].type !== 'bomb' && grid[x][y].type !== 'firework' && grid[x][y].type !== 'disco_ball') { regularCandies.push({ x: x, y: y }); } } } // Destroy 1-3 random candies var numToDestroy = Math.min(Math.floor(Math.random() * 3) + 1, regularCandies.length); for (var i = 0; i < numToDestroy; i++) { if (regularCandies.length > 0) { var randomIndex = Math.floor(Math.random() * regularCandies.length); var pos = regularCandies[randomIndex]; if (grid[pos.x][pos.y]) { grid[pos.x][pos.y].destroy(); grid[pos.x][pos.y] = null; // Add visual effect LK.effects.flashObject(game, 0xFFFF00, 100); } regularCandies.splice(randomIndex, 1); } } // Apply gravity and fill after destroying candies LK.setTimeout(function () { applyGravity(); LK.setTimeout(function () { fillEmptySpaces(); }, 200); }, 50); }, destroyInterval); // Stop effect after 15 seconds LK.setTimeout(function () { discoEffectActive = false; LK.clearInterval(destroyTimer); }, effectDuration); } var GRID_SIZE = 15; var candyTypes = ['red', 'blue', 'green', 'yellow', 'purple', 'orange']; var BOMB_SPAWN_CHANCE = 0.013; // 1.3% initial chance to spawn a bomb var DISCO_BALL_SPAWN_CHANCE = 0.006; // 0.6% chance to spawn a disco ball var discoEffectActive = false; var cellSize = 130; var gridStartX = (2048 - GRID_SIZE * cellSize) / 2; var gridStartY = (2732 - GRID_SIZE * cellSize) / 2; var grid = []; var selectedCandy = null; var isProcessing = false; var animatingCandies = 0; var gameEnded = false; var noMovesLeft = false; // Play background music LK.playMusic('Happymusic'); // Initialize the game var _loop = function _loop() { grid[i] = []; for (j = 0; j < GRID_SIZE; j++) { grid[i][j] = null; } ; }, j; for (var i = 0; i < GRID_SIZE; i++) { _loop(); } // UI Elements - Scoreboard var highScoreText = new Text2('High Score: 0', { size: 80, fill: 0x000000 }); highScoreText.anchor.set(0.5, 0); var scoreText = new Text2('Score: 0', { size: 80, fill: 0x000000 }); scoreText.anchor.set(0.5, 0); scoreText.x = 0; highScoreText.y = 150; LK.gui.top.addChild(highScoreText); scoreText.y = 90; LK.gui.top.addChild(scoreText); // Create grid background var gridBg = game.attachAsset('grid_bg', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 / 2 }); // Create cell backgrounds for (var i = 0; i < GRID_SIZE; i++) { for (var j = 0; j < GRID_SIZE; j++) { var cellBg = game.attachAsset('cell_bg', { anchorX: 0.5, anchorY: 0.5, x: gridStartX + i * cellSize + cellSize / 2, y: gridStartY + j * cellSize + cellSize / 2 }); } } function getRandomCandyType() { var score = LK.getScore(); var dynamicBombSpawnChance = Math.max(0.013 - score * 0.0001, 0.007); // Decrease chance as score increases, but not below 0.7% var fireworkSpawnChance = 0.008; // 0.8% chance to spawn a firework var randomValue = Math.random(); // Game ending logic - between 36000 and 55000 score, randomly end the game if (score >= 36000 && score <= 55000) { var endGameScore = 36000 + Math.random() * 19000; // Random score between 36000-55000 if (score >= endGameScore && !gameEnded) { noMovesLeft = true; // Allow candies to be moved even when the game is supposed to end return 'red'; // Return a default candy type to ensure candies can still be moved } } if (randomValue < dynamicBombSpawnChance) { return 'bomb'; } else if (randomValue < dynamicBombSpawnChance + fireworkSpawnChance) { return 'firework'; } else if (randomValue < dynamicBombSpawnChance + fireworkSpawnChance + DISCO_BALL_SPAWN_CHANCE) { return 'disco_ball'; } // Progressive difficulty - reduce candy variety as score increases var availableCandyTypes = candyTypes.slice(); if (score >= 10000) { availableCandyTypes = candyTypes.slice(0, 5); // Remove one candy type } if (score >= 20000) { availableCandyTypes = candyTypes.slice(0, 4); // Remove two candy types } if (score >= 30000) { availableCandyTypes = candyTypes.slice(0, 3); // Remove three candy types } return availableCandyTypes[Math.floor(Math.random() * availableCandyTypes.length)]; } function createCandy(type, gridX, gridY) { var candy; if (type === 'bomb') { candy = new Bomb(); } else if (type === 'firework') { candy = new Firework(); } else if (type === 'disco_ball') { candy = new DiscoBall(); } else { candy = new Candy(type); } candy.setGridPosition(gridX, gridY); game.addChild(candy); return candy; } function fillGrid() { for (var x = 0; x < GRID_SIZE; x++) { for (var y = 0; y < GRID_SIZE; y++) { if (!grid[x][y]) { var type = getRandomCandyType(); if (type !== 'blue') { // Remove blue candies grid[x][y] = createCandy(type, x, y); } } } } } function isValidPosition(x, y) { return x >= 0 && x < GRID_SIZE && y >= 0 && y < GRID_SIZE; } function areAdjacent(x1, y1, x2, y2) { var dx = Math.abs(x1 - x2); var dy = Math.abs(y1 - y2); return dx === 1 && dy === 0 || dx === 0 && dy === 1; } function swapCandies(x1, y1, x2, y2) { var candy1 = grid[x1][y1]; var candy2 = grid[x2][y2]; grid[x1][y1] = candy2; grid[x2][y2] = candy1; animatingCandies += 2; candy1.animateToGridPosition(x2, y2, 200, function () { animatingCandies--; }); candy2.animateToGridPosition(x1, y1, 200, function () { animatingCandies--; }); } function findMatches() { var matches = []; var visited = []; for (var i = 0; i < GRID_SIZE; i++) { visited[i] = []; for (var j = 0; j < GRID_SIZE; j++) { visited[i][j] = false; } } // Check horizontal matches for (var y = 0; y < GRID_SIZE; y++) { for (var x = 0; x < GRID_SIZE - 2; x++) { if (grid[x][y] && grid[x + 1][y] && grid[x + 2][y] && grid[x][y].type === grid[x + 1][y].type && grid[x][y].type === grid[x + 2][y].type) { var match = []; var type = grid[x][y].type; var startX = x; while (x < GRID_SIZE && grid[x][y] && grid[x][y].type === type) { if (!visited[x][y]) { match.push({ x: x, y: y }); visited[x][y] = true; } x++; } x--; if (match.length >= 3) { matches.push(match); } } } } // Check vertical matches for (var x = 0; x < GRID_SIZE; x++) { for (var y = 0; y < GRID_SIZE - 2; y++) { if (grid[x][y] && grid[x][y + 1] && grid[x][y + 2] && grid[x][y].type === grid[x][y + 1].type && grid[x][y].type === grid[x][y + 2].type) { var match = []; var type = grid[x][y].type; var startY = y; while (y < GRID_SIZE && grid[x][y] && grid[x][y].type === type) { if (!visited[x][y]) { match.push({ x: x, y: y }); visited[x][y] = true; } y++; } y--; if (match.length >= 3) { matches.push(match); } } } } // Check diagonal matches (top-left to bottom-right) for (var x = 0; x < GRID_SIZE - 2; x++) { for (var y = 0; y < GRID_SIZE - 2; y++) { if (x + 2 < GRID_SIZE && y + 2 < GRID_SIZE && grid[x][y] && grid[x + 1][y + 1] && grid[x + 2][y + 2] && grid[x][y].type === grid[x + 1][y + 1].type && grid[x][y].type === grid[x + 2][y + 2].type) { var match = []; var type = grid[x][y].type; var startX = x; var startY = y; while (x < GRID_SIZE && y < GRID_SIZE && grid[x][y] && grid[x][y].type === type) { if (!visited[x][y]) { match.push({ x: x, y: y }); visited[x][y] = true; } x++; y++; } x--; y--; if (match.length >= 3) { matches.push(match); } } } } // Check diagonal matches (bottom-left to top-right) for (var x = 0; x < GRID_SIZE - 2; x++) { for (var y = 2; y < GRID_SIZE; y++) { if (y - 2 >= 0 && x + 2 < GRID_SIZE && grid[x][y] && grid[x + 1][y - 1] && grid[x + 2][y - 2] && grid[x][y].type === grid[x + 1][y - 1].type && grid[x][y].type === grid[x + 2][y - 2].type) { var match = []; var type = grid[x][y].type; var startX = x; var startY = y; while (x < GRID_SIZE && y >= 0 && grid[x][y] && grid[x][y].type === type) { if (!visited[x][y]) { match.push({ x: x, y: y }); visited[x][y] = true; } x++; y--; } x--; y++; if (match.length >= 3) { matches.push(match); } } } } return matches; } function clearMatches(matches) { var totalCleared = 0; for (var i = 0; i < matches.length; i++) { var match = matches[i]; for (var j = 0; j < match.length; j++) { var pos = match[j]; if (grid[pos.x][pos.y]) { grid[pos.x][pos.y].destroy(); grid[pos.x][pos.y] = null; totalCleared++; } } } if (totalCleared > 0) { LK.getSound('match').play(); LK.setScore(LK.getScore() + totalCleared * 10); scoreText.setText('Score: ' + LK.getScore()); // Update high score if current score is higher if (LK.getScore() > (storage.highScore || 0)) { storage.highScore = LK.getScore(); highScoreText.setText('High Score: ' + LK.getScore()); } } return totalCleared; } function applyGravity() { var moved = false; for (var x = 0; x < GRID_SIZE; x++) { for (var y = GRID_SIZE - 1; y >= 0; y--) { if (!grid[x][y]) { // Find candy above to fall down for (var above = y - 1; above >= 0; above--) { if (grid[x][above]) { grid[x][y] = grid[x][above]; grid[x][above] = null; animatingCandies++; grid[x][y].animateToGridPosition(x, y, 300, function () { animatingCandies--; }); moved = true; break; } } } } } return moved; } function fillEmptySpaces() { for (var x = 0; x < GRID_SIZE; x++) { for (var y = 0; y < GRID_SIZE; y++) { if (!grid[x][y]) { var type = getRandomCandyType(); grid[x][y] = createCandy(type, x, y - GRID_SIZE); animatingCandies++; grid[x][y].animateToGridPosition(x, y, 400, function () { animatingCandies--; }); } } } } function processMatches() { if (isProcessing || animatingCandies > 0) { return; } var matches = findMatches(); if (matches.length > 0) { isProcessing = true; clearMatches(matches); LK.setTimeout(function () { applyGravity(); LK.setTimeout(function () { fillEmptySpaces(); LK.setTimeout(function () { isProcessing = false; }, 500); }, 400); }, 200); } } function getCandyAtPosition(x, y) { var localX = x - gridStartX; var localY = y - gridStartY; if (localX < 0 || localY < 0 || localX >= GRID_SIZE * cellSize || localY >= GRID_SIZE * cellSize) { return null; } var gridX = Math.floor(localX / cellSize); var gridY = Math.floor(localY / cellSize); return grid[gridX][gridY]; } function getGridPosition(x, y) { var localX = x - gridStartX; var localY = y - gridStartY; if (localX < 0 || localY < 0 || localX >= GRID_SIZE * cellSize || localY >= GRID_SIZE * cellSize) { return null; } var gridX = Math.floor(localX / cellSize); var gridY = Math.floor(localY / cellSize); return { x: gridX, y: gridY }; } function explodeBomb(centerX, centerY) { var exploded = 0; // Explode 3x3 area around the bomb for (var dx = -1; dx <= 1; dx++) { for (var dy = -1; dy <= 1; dy++) { var x = centerX + dx; var y = centerY + dy; if (isValidPosition(x, y) && grid[x][y]) { grid[x][y].destroy(); grid[x][y] = null; exploded++; } } } if (exploded > 0) { LK.getSound('explode').play(); LK.setScore(LK.getScore() + exploded * 15); scoreText.setText('Score: ' + LK.getScore()); // Update high score if current score is higher if (LK.getScore() > (storage.highScore || 0)) { storage.highScore = LK.getScore(); highScoreText.setText('High Score: ' + LK.getScore()); } } } game.down = function (x, y, obj) { if (isProcessing || animatingCandies > 0 || gameEnded) { return; } var candy = getCandyAtPosition(x, y); if (candy) { // Check if clicked candy is a bomb if (candy.type === 'bomb') { explodeBomb(candy.gridX, candy.gridY); candy.destroy(); grid[candy.gridX][candy.gridY] = null; LK.setTimeout(function () { applyGravity(); LK.setTimeout(function () { fillEmptySpaces(); LK.setTimeout(function () { processMatches(); }, 500); }, 400); }, 200); return; } if (selectedCandy) { selectedCandy.alpha = 1.0; } selectedCandy = candy; selectedCandy.alpha = 0.7; LK.getSound('swap').play(); } }; game.up = function (x, y, obj) { if (isProcessing || animatingCandies > 0 || gameEnded) { return; } var candy = getCandyAtPosition(x, y); if (selectedCandy && candy && selectedCandy !== candy) { // Don't allow swapping with bombs if (selectedCandy.type === 'bomb' || candy.type === 'bomb') { selectedCandy.alpha = 1.0; selectedCandy = null; return; } var pos1 = { x: selectedCandy.gridX, y: selectedCandy.gridY }; var pos2 = { x: candy.gridX, y: candy.gridY }; if (areAdjacent(pos1.x, pos1.y, pos2.x, pos2.y)) { // Test swap var temp = grid[pos1.x][pos1.y]; grid[pos1.x][pos1.y] = grid[pos2.x][pos2.y]; grid[pos2.x][pos2.y] = temp; var matches = findMatches(); // Revert test swap grid[pos2.x][pos2.y] = grid[pos1.x][pos1.y]; grid[pos1.x][pos1.y] = temp; if (matches.length > 0) { swapCandies(pos1.x, pos1.y, pos2.x, pos2.y); LK.setTimeout(function () { processMatches(); }, 250); } } selectedCandy.alpha = 1.0; selectedCandy = null; } else if (selectedCandy) { selectedCandy.alpha = 1.0; selectedCandy = null; } }; game.update = function () { if (gameEnded) { return; } if (animatingCandies === 0 && !isProcessing) { processMatches(); // Check if game should end due to no moves left or score threshold if (noMovesLeft || !hasValidMoves()) { gameEnded = true; LK.setTimeout(function () { LK.showGameOver(); }, 1000); } } }; // Initialize high score from storage var savedHighScore = storage.highScore || 0; highScoreText.setText('High Score: ' + savedHighScore); // Initialize the game fillGrid(); ; function hasValidMoves() { // Check all possible swaps between adjacent candies for (var x = 0; x < GRID_SIZE; x++) { for (var y = 0; y < GRID_SIZE; y++) { if (grid[x][y] && grid[x][y].type !== 'bomb' && grid[x][y].type !== 'firework' && grid[x][y].type !== 'blue') { // Check right neighbor if (x + 1 < GRID_SIZE && grid[x + 1][y] && grid[x + 1][y].type !== 'bomb' && grid[x + 1][y].type !== 'firework') { // Test swap var temp = grid[x][y]; grid[x][y] = grid[x + 1][y]; grid[x + 1][y] = temp; var matches = findMatches(); // Revert swap grid[x + 1][y] = grid[x][y]; grid[x][y] = temp; if (matches.length > 0) { return true; } } // Check bottom neighbor if (y + 1 < GRID_SIZE && grid[x][y + 1] && grid[x][y + 1].type !== 'bomb' && grid[x][y + 1].type !== 'firework') { // Test swap var temp = grid[x][y]; grid[x][y] = grid[x][y + 1]; grid[x][y + 1] = temp; var matches = findMatches(); // Revert swap grid[x][y + 1] = grid[x][y]; grid[x][y] = temp; if (matches.length > 0) { return true; } } } } } return false; } function explodeFirework(centerX, centerY) { var exploded = 0; // Explode entire row and column for (var x = 0; x < GRID_SIZE; x++) { if (isValidPosition(x, centerY) && grid[x][centerY]) { grid[x][centerY].destroy(); grid[x][centerY] = null; exploded++; } } for (var y = 0; y < GRID_SIZE; y++) { if (isValidPosition(centerX, y) && grid[centerX][y]) { grid[centerX][y].destroy(); grid[centerX][y] = null; exploded++; } } if (exploded > 0) { LK.getSound('explode').play(); LK.setScore(LK.getScore() + exploded * 15); scoreText.setText('Score: ' + LK.getScore()); // Update high score if current score is higher if (LK.getScore() > (storage.highScore || 0)) { storage.highScore = LK.getScore(); highScoreText.setText('High Score: ' + LK.getScore()); } } }
===================================================================
--- original.js
+++ change.js
@@ -359,9 +359,10 @@
if (score >= 36000 && score <= 55000) {
var endGameScore = 36000 + Math.random() * 19000; // Random score between 36000-55000
if (score >= endGameScore && !gameEnded) {
noMovesLeft = true;
- return null; // This will trigger game end check
+ // Allow candies to be moved even when the game is supposed to end
+ return 'red'; // Return a default candy type to ensure candies can still be moved
}
}
if (randomValue < dynamicBombSpawnChance) {
return 'bomb';