User prompt
Oyuna bomba ekle 3x3 alan patlatsın
User prompt
Yeni gelen duvarların arkasında şeker kalmasın silinsin
User prompt
Her hamle yapdığımızda sedce 1 duvar gelsin
User prompt
Biz her hamle yaptığımızda duvarlar 1-1 çoğalsın
User prompt
Fişek ler duvarlarıda yıksın
User prompt
Oyunda kazanmak için skor olmasın. High score mantığıyla işlesin ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Kazanmak için 2000 puan olsun
User prompt
Kazanmak için 4000puana ihtiyacımız olsun
User prompt
Duvarlarda bir yerde toplu halde olaunlar
User prompt
Bombayı oyundan kaldır
User prompt
Fişek sadece 10 puan getirmesin
User prompt
Oyuna fişek ekle. Fişeğe dokunduğumuzda 1 sıra tamamen dağılsın. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Oyunda donma var onu düzelt
User prompt
Animasyon hızını 2x daha hızlandır ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Şekerler tatlı bir şekilde çok yavaş sallanma animayonu ekle ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Yüzde 5 ihtimalle oyuna başladığımızda 30 duvar olsun
User prompt
Son komutumu sil
User prompt
Oyunda her şeker patladığında duvar yeri değişsin
User prompt
Na ekrana reset tema butonu ekle
User prompt
Oyuna başladığımızda rastgele yerlerde duvar olsun maximum 8 duvar. İki tema içinde geçerli
User prompt
Fart Food temasını kilitli yap. Onun açılması için klasik tema oynayıb kazanmamız lazım ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Klasik temaya da bomba ekle ve onu assetlerden resmini değiştire bileyim. Bu bomba Fast Food teması daki ile aynı olsun
User prompt
Bomba asseti i klasik temaya ekle
User prompt
Assetlerde ismi Bimbao olan asseti klasik temayı ekle ve onu patlatdığımızda 3x3 alan patlasın
User prompt
Düzelt
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var Candy = Container.expand(function (candyType) {
var self = Container.call(this);
self.candyType = candyType;
self.gridX = 0;
self.gridY = 0;
self.isAnimating = false;
var candyAssets = [];
if (currentTheme === 'classic') {
candyAssets = ['classic_candy_red', 'classic_candy_blue', 'classic_candy_green', 'classic_candy_purple', 'classic_candy_orange'];
} else {
candyAssets = ['candy_red', 'candy_blue', 'candy_green', 'candy_yellow', 'candy_purple', 'candy_orange'];
}
var candyGraphics = self.attachAsset(candyAssets[candyType], {
anchorX: 0.5,
anchorY: 0.5
});
// Add gentle swaying animation
self.startSwayAnimation = function () {
var swayAmount = 0.05; // Small rotation amount
var swayDuration = 1000 + Math.random() * 500; // 1-1.5 seconds for variety (2x faster)
function swayLeft() {
tween(candyGraphics, {
rotation: -swayAmount
}, {
duration: swayDuration,
easing: tween.easeInOut,
onFinish: swayRight
});
}
function swayRight() {
tween(candyGraphics, {
rotation: swayAmount
}, {
duration: swayDuration,
easing: tween.easeInOut,
onFinish: swayLeft
});
}
// Start with random direction and slight delay for variety
LK.setTimeout(function () {
if (Math.random() > 0.5) {
swayLeft();
} else {
swayRight();
}
}, Math.random() * 250);
};
// Start swaying animation
self.startSwayAnimation();
self.setGridPosition = function (gridX, gridY) {
self.gridX = gridX;
self.gridY = gridY;
self.x = GRID_START_X + gridX * CELL_SIZE + CELL_SIZE / 2;
self.y = GRID_START_Y + gridY * CELL_SIZE + CELL_SIZE / 2;
};
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.explode = function () {
// Stop swaying animation
tween.stop(candyGraphics);
tween(self, {
scaleX: 1.5,
scaleY: 1.5,
alpha: 0
}, {
duration: 200,
easing: tween.easeOut,
onFinish: function onFinish() {
self.destroy();
}
});
};
return self;
});
var Firecracker = Container.expand(function () {
var self = Container.call(this);
self.gridX = 0;
self.gridY = 0;
self.isAnimating = false;
var firecrackerGraphics = self.attachAsset('firecracker', {
anchorX: 0.5,
anchorY: 0.5
});
// Add gentle swaying animation
self.startSwayAnimation = function () {
var swayAmount = 0.08; // Slightly more sway than candies
var swayDuration = 800 + Math.random() * 400; // Faster sway
function swayLeft() {
tween(firecrackerGraphics, {
rotation: -swayAmount
}, {
duration: swayDuration,
easing: tween.easeInOut,
onFinish: swayRight
});
}
function swayRight() {
tween(firecrackerGraphics, {
rotation: swayAmount
}, {
duration: swayDuration,
easing: tween.easeInOut,
onFinish: swayLeft
});
}
// Start with random direction and slight delay for variety
LK.setTimeout(function () {
if (Math.random() > 0.5) {
swayLeft();
} else {
swayRight();
}
}, Math.random() * 250);
};
// Start swaying animation
self.startSwayAnimation();
self.setGridPosition = function (gridX, gridY) {
self.gridX = gridX;
self.gridY = gridY;
self.x = GRID_START_X + gridX * CELL_SIZE + CELL_SIZE / 2;
self.y = GRID_START_Y + gridY * CELL_SIZE + CELL_SIZE / 2;
};
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.explode = function () {
// Stop swaying animation
tween.stop(firecrackerGraphics);
tween(self, {
scaleX: 2,
scaleY: 2,
alpha: 0
}, {
duration: 300,
easing: tween.easeOut,
onFinish: function onFinish() {
self.destroy();
}
});
};
return self;
});
var Grid = Container.expand(function () {
var self = Container.call(this);
self.cells = [];
self.candies = [];
self.walls = [];
// Create grid cells
for (var y = 0; y < GRID_SIZE; y++) {
self.cells[y] = [];
self.candies[y] = [];
self.walls[y] = [];
for (var x = 0; x < GRID_SIZE; x++) {
var cell = self.attachAsset('gridCell', {
anchorX: 0.5,
anchorY: 0.5,
x: GRID_START_X + x * CELL_SIZE + CELL_SIZE / 2,
y: GRID_START_Y + y * CELL_SIZE + CELL_SIZE / 2
});
self.cells[y][x] = cell;
self.candies[y][x] = null;
self.walls[y][x] = null;
}
}
// Place walls in clusters along borders
self.placeWalls = function () {
var wallCount;
if (Math.random() < 0.05) {
// 5% chance for 30 walls
wallCount = 30;
} else {
// 95% chance for 1-8 walls
wallCount = Math.floor(Math.random() * 8) + 1;
}
var placedWalls = 0;
var attempts = 0;
var maxAttempts = 500;
// Define border areas for wall placement
var borderAreas = [
// Top border
{
minX: 1,
maxX: GRID_SIZE - 2,
minY: 1,
maxY: 2
},
// Bottom border
{
minX: 1,
maxX: GRID_SIZE - 2,
minY: GRID_SIZE - 3,
maxY: GRID_SIZE - 2
},
// Left border
{
minX: 1,
maxX: 2,
minY: 1,
maxY: GRID_SIZE - 2
},
// Right border
{
minX: GRID_SIZE - 3,
maxX: GRID_SIZE - 2,
minY: 1,
maxY: GRID_SIZE - 2
}];
// Choose a random border area to place wall cluster
var chosenArea = borderAreas[Math.floor(Math.random() * borderAreas.length)];
while (placedWalls < wallCount && attempts < maxAttempts) {
var x = Math.floor(Math.random() * (chosenArea.maxX - chosenArea.minX + 1)) + chosenArea.minX;
var y = Math.floor(Math.random() * (chosenArea.maxY - chosenArea.minY + 1)) + chosenArea.minY;
attempts++;
// Don't place walls if already occupied
if (!self.walls[y][x]) {
var wall = new Wall();
wall.setGridPosition(x, y);
self.walls[y][x] = wall;
self.addChild(wall);
placedWalls++;
}
}
};
self.fillGrid = function () {
for (var y = 0; y < GRID_SIZE; y++) {
for (var x = 0; x < GRID_SIZE; x++) {
if (!self.candies[y][x] && !self.walls[y][x]) {
// 2% chance to spawn firecracker
if (Math.random() < 0.02) {
var firecracker = new Firecracker();
firecracker.setGridPosition(x, y);
self.candies[y][x] = firecracker;
self.addChild(firecracker);
} else {
var candyType;
var attempts = 0;
// Try to find a candy type that doesn't create immediate matches
do {
if (currentTheme === 'classic') {
candyType = Math.floor(Math.random() * 5);
} else {
candyType = Math.floor(Math.random() * 6);
}
attempts++;
} while (attempts < 10 && self.wouldCreateMatch(x, y, candyType));
var candy = new Candy(candyType);
candy.setGridPosition(x, y);
self.candies[y][x] = candy;
self.addChild(candy);
}
}
}
}
};
self.findMatches = function () {
var matches = [];
// Check horizontal matches
for (var y = 0; y < GRID_SIZE; y++) {
var count = 1;
var currentType = self.candies[y][0] ? self.candies[y][0].candyType : -1;
for (var x = 1; x < GRID_SIZE; x++) {
var candyType = self.candies[y][x] ? self.candies[y][x].candyType : -1;
if (candyType === currentType && candyType !== -1) {
count++;
} else {
if (count >= 3) {
for (var i = x - count; i < x; i++) {
matches.push({
x: i,
y: y
});
}
}
count = 1;
currentType = candyType;
}
}
if (count >= 3) {
for (var i = GRID_SIZE - count; i < GRID_SIZE; i++) {
matches.push({
x: i,
y: y
});
}
}
}
// Check vertical matches
for (var x = 0; x < GRID_SIZE; x++) {
var count = 1;
var currentType = self.candies[0][x] ? self.candies[0][x].candyType : -1;
for (var y = 1; y < GRID_SIZE; y++) {
var candyType = self.candies[y][x] ? self.candies[y][x].candyType : -1;
if (candyType === currentType && candyType !== -1) {
count++;
} else {
if (count >= 3) {
for (var i = y - count; i < y; i++) {
matches.push({
x: x,
y: i
});
}
}
count = 1;
currentType = candyType;
}
}
if (count >= 3) {
for (var i = GRID_SIZE - count; i < GRID_SIZE; i++) {
matches.push({
x: x,
y: i
});
}
}
}
return matches;
};
self.removeMatches = function (matches) {
var score = 0;
for (var i = 0; i < matches.length; i++) {
var match = matches[i];
if (self.candies[match.y][match.x]) {
self.candies[match.y][match.x].explode();
self.candies[match.y][match.x] = null;
score += 10;
}
}
return score;
};
self.explodeRow = function (rowY) {
var score = 0;
LK.getSound('firecracker_explode').play();
// Destroy entire row including walls
for (var x = 0; x < GRID_SIZE; x++) {
// Destroy candy if present
if (self.candies[rowY][x]) {
self.candies[rowY][x].explode();
self.candies[rowY][x] = null;
score += 25;
}
// Destroy wall if present
if (self.walls[rowY][x]) {
self.walls[rowY][x].destroy();
self.walls[rowY][x] = null;
score += 15; // Give points for destroying walls
}
}
return score;
};
self.applyGravity = function () {
var moved = false;
for (var x = 0; x < GRID_SIZE; x++) {
for (var y = GRID_SIZE - 1; y >= 0; y--) {
if (!self.candies[y][x] && !self.walls[y][x]) {
// Find candy above to fall down
for (var aboveY = y - 1; aboveY >= 0; aboveY--) {
if (self.candies[aboveY][x]) {
self.candies[y][x] = self.candies[aboveY][x];
self.candies[aboveY][x] = null;
self.candies[y][x].gridX = x;
self.candies[y][x].gridY = y;
var targetX = GRID_START_X + x * CELL_SIZE + CELL_SIZE / 2;
var targetY = GRID_START_Y + y * CELL_SIZE + CELL_SIZE / 2;
self.candies[y][x].animateToPosition(targetX, targetY, 300);
moved = true;
break;
}
}
}
}
}
return moved;
};
self.spawnNewCandies = function () {
for (var x = 0; x < GRID_SIZE; x++) {
for (var y = 0; y < GRID_SIZE; y++) {
if (!self.candies[y][x] && !self.walls[y][x]) {
// 2% chance to spawn firecracker
if (Math.random() < 0.02) {
var firecracker = new Firecracker();
firecracker.x = GRID_START_X + x * CELL_SIZE + CELL_SIZE / 2;
firecracker.y = GRID_START_Y - CELL_SIZE;
firecracker.gridX = x;
firecracker.gridY = y;
self.candies[y][x] = firecracker;
self.addChild(firecracker);
var targetY = GRID_START_Y + y * CELL_SIZE + CELL_SIZE / 2;
firecracker.animateToPosition(firecracker.x, targetY, 400);
} else {
var candyType;
if (currentTheme === 'classic') {
candyType = Math.floor(Math.random() * 5);
} else {
candyType = Math.floor(Math.random() * 6);
}
var candy = new Candy(candyType);
candy.x = GRID_START_X + x * CELL_SIZE + CELL_SIZE / 2;
candy.y = GRID_START_Y - CELL_SIZE;
candy.gridX = x;
candy.gridY = y;
self.candies[y][x] = candy;
self.addChild(candy);
var targetY = GRID_START_Y + y * CELL_SIZE + CELL_SIZE / 2;
candy.animateToPosition(candy.x, targetY, 400);
}
}
}
}
};
self.swapCandies = function (x1, y1, x2, y2) {
var candy1 = self.candies[y1][x1];
var candy2 = self.candies[y2][x2];
if (!candy1 || !candy2) return false;
// Swap in grid
self.candies[y1][x1] = candy2;
self.candies[y2][x2] = candy1;
// Update grid positions
candy1.gridX = x2;
candy1.gridY = y2;
candy2.gridX = x1;
candy2.gridY = y1;
// Animate to new positions
var pos1X = GRID_START_X + x2 * CELL_SIZE + CELL_SIZE / 2;
var pos1Y = GRID_START_Y + y2 * CELL_SIZE + CELL_SIZE / 2;
var pos2X = GRID_START_X + x1 * CELL_SIZE + CELL_SIZE / 2;
var pos2Y = GRID_START_Y + y1 * CELL_SIZE + CELL_SIZE / 2;
candy1.animateToPosition(pos1X, pos1Y, 200);
candy2.animateToPosition(pos2X, pos2Y, 200);
return true;
};
self.getCandyAt = function (x, y) {
var gridX = Math.floor((x - GRID_START_X) / CELL_SIZE);
var gridY = Math.floor((y - GRID_START_Y) / CELL_SIZE);
if (gridX >= 0 && gridX < GRID_SIZE && gridY >= 0 && gridY < GRID_SIZE) {
// Don't return candy info if there's a wall
if (self.walls[gridY][gridX]) return null;
return {
x: gridX,
y: gridY,
candy: self.candies[gridY][gridX]
};
}
return null;
};
self.wouldCreateMatch = function (x, y, candyType) {
// Check horizontal match potential
var horizontalCount = 1;
// Check left
for (var i = x - 1; i >= 0 && self.candies[y][i] && self.candies[y][i].candyType === candyType; i--) {
horizontalCount++;
}
// Check right
for (var i = x + 1; i < GRID_SIZE && self.candies[y][i] && self.candies[y][i].candyType === candyType; i++) {
horizontalCount++;
}
if (horizontalCount >= 3) return true;
// Check vertical match potential
var verticalCount = 1;
// Check up
for (var i = y - 1; i >= 0 && self.candies[i][x] && self.candies[i][x].candyType === candyType; i--) {
verticalCount++;
}
// Check down
for (var i = y + 1; i < GRID_SIZE && self.candies[i][x] && self.candies[i][x].candyType === candyType; i++) {
verticalCount++;
}
if (verticalCount >= 3) return true;
return false;
};
return self;
});
var MainMenu = Container.expand(function () {
var self = Container.call(this);
var title = new Text2('Guna Blast', {
size: 180,
fill: 0xFFFF00
});
title.anchor.set(0.5, 0.5);
title.x = 1024;
title.y = 400;
self.addChild(title);
var startButton = new MenuButton('BAŞLA', function () {
showThemeSelection();
});
startButton.x = 1024;
startButton.y = 800;
self.addChild(startButton);
var themeButton = new MenuButton('TEMA', function () {
showThemeSelection();
});
themeButton.x = 1024;
themeButton.y = 1200;
self.addChild(themeButton);
var resetThemeButton = new MenuButton('TEMA RESET', function () {
// Reset to classic theme
storage.theme = 'classic';
storage.unlockedThemes = ['classic'];
currentTheme = 'classic';
unlockedThemes = ['classic'];
});
resetThemeButton.x = 1024;
resetThemeButton.y = 1600;
self.addChild(resetThemeButton);
return self;
});
var MenuButton = Container.expand(function (text, onClick) {
var self = Container.call(this);
var background = self.attachAsset('button_bg', {
anchorX: 0.5,
anchorY: 0.5
});
var buttonText = new Text2(text, {
size: 80,
fill: 0x000000
});
buttonText.anchor.set(0.5, 0.5);
self.addChild(buttonText);
self.down = function (x, y, obj) {
if (onClick) onClick();
};
return self;
});
var ThemeSelection = Container.expand(function () {
var self = Container.call(this);
var title = new Text2('Tema Seç', {
size: 140,
fill: 0xFFFFFF
});
title.anchor.set(0.5, 0.5);
title.x = 1024;
title.y = 400;
self.addChild(title);
var classicButton = new MenuButton('KLASİK', function () {
setTheme('classic');
startGame();
});
classicButton.x = 1024;
classicButton.y = 700;
self.addChild(classicButton);
var darkButtonText = unlockedThemes.indexOf('dark') !== -1 ? 'Fast Food' : 'Fast Food (Kilitli)';
var darkButton = new MenuButton(darkButtonText, function () {
if (unlockedThemes.indexOf('dark') !== -1) {
setTheme('dark');
startGame();
} else {
// Show message that theme is locked
var lockedMessage = new Text2('Bu temayı açmak için klasik temayı kazanın!', {
size: 40,
fill: 0xFF0000
});
lockedMessage.anchor.set(0.5, 0.5);
lockedMessage.x = 1024;
lockedMessage.y = 1400;
self.addChild(lockedMessage);
LK.setTimeout(function () {
lockedMessage.destroy();
}, 2000);
}
});
darkButton.x = 1024;
darkButton.y = 1100;
self.addChild(darkButton);
return self;
});
var Wall = Container.expand(function () {
var self = Container.call(this);
self.gridX = 0;
self.gridY = 0;
var wallGraphics = self.attachAsset('wall', {
anchorX: 0.5,
anchorY: 0.5
});
self.setGridPosition = function (gridX, gridY) {
self.gridX = gridX;
self.gridY = gridY;
self.x = GRID_START_X + gridX * CELL_SIZE + CELL_SIZE / 2;
self.y = GRID_START_Y + gridY * CELL_SIZE + CELL_SIZE / 2;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x2c1810
});
/****
* Game Code
****/
var GRID_SIZE = 10;
var CELL_SIZE = 200;
var GRID_START_X = (2048 - GRID_SIZE * CELL_SIZE) / 2;
var GRID_START_Y = 600;
var MAX_MOVES = 30;
var currentScore = 0;
var movesLeft = MAX_MOVES;
var highScore = storage.highScore || 0;
var gameState = 'menu'; // 'menu', 'playing', 'processing', 'gameover'
var selectedCandy = null;
var grid = null;
var isProcessing = false;
var currentTheme = storage.theme || 'classic';
var unlockedThemes = storage.unlockedThemes || ['classic'];
var mainMenu = null;
var themeSelection = null;
var gameUI = null;
// UI Elements (will be created when game starts)
var scoreText = null;
var movesText = null;
// Show main menu on start
showMainMenu();
function processMatches() {
if (isProcessing) return; // Prevent multiple simultaneous processing
isProcessing = true;
var matches = grid.findMatches();
if (matches.length > 0) {
var points = grid.removeMatches(matches);
currentScore += points;
if (scoreText) scoreText.setText('Score: ' + currentScore);
LK.getSound('match').play();
LK.setTimeout(function () {
if (!grid || gameState !== 'playing') {
isProcessing = false;
return;
}
var moved = grid.applyGravity();
LK.setTimeout(function () {
if (!grid || gameState !== 'playing') {
isProcessing = false;
return;
}
grid.spawnNewCandies();
LK.setTimeout(function () {
if (!grid || gameState !== 'playing') {
isProcessing = false;
return;
}
isProcessing = false; // Reset before recursive call
processMatches(); // Check for chain reactions
}, 500);
}, 300);
}, 300);
} else {
isProcessing = false;
checkGameState();
}
}
function checkGameState() {
if (movesLeft <= 0) {
// Check if current score is a new high score
if (currentScore > highScore) {
highScore = currentScore;
storage.highScore = highScore;
}
// If player reaches 1000+ points with classic theme, unlock Fast Food theme
if (currentScore >= 1000 && currentTheme === 'classic' && unlockedThemes.indexOf('dark') === -1) {
unlockedThemes.push('dark');
storage.unlockedThemes = unlockedThemes;
}
LK.showGameOver();
}
}
function setTheme(theme) {
currentTheme = theme;
storage.theme = theme;
updateThemeColors();
}
function updateThemeColors() {
if (currentTheme === 'dark') {
game.setBackgroundColor(0x111111);
} else {
game.setBackgroundColor(0x2c1810);
}
}
function showMainMenu() {
gameState = 'menu';
if (grid) {
grid.destroy();
grid = null;
}
if (gameUI) {
gameUI.destroy();
gameUI = null;
}
if (themeSelection) {
themeSelection.destroy();
themeSelection = null;
}
mainMenu = game.addChild(new MainMenu());
}
function showThemeSelection() {
if (mainMenu) {
mainMenu.destroy();
mainMenu = null;
}
themeSelection = game.addChild(new ThemeSelection());
}
function startGame() {
gameState = 'playing';
currentScore = 0;
movesLeft = MAX_MOVES;
selectedCandy = null;
isProcessing = false;
if (mainMenu) {
mainMenu.destroy();
mainMenu = null;
}
if (themeSelection) {
themeSelection.destroy();
themeSelection = null;
}
updateThemeColors();
initializeGameUI();
grid = game.addChild(new Grid());
grid.placeWalls();
grid.fillGrid();
LK.setTimeout(function () {
processMatches();
}, 500);
}
function initializeGameUI() {
gameUI = new Container();
game.addChild(gameUI);
scoreText = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
movesText = new Text2('Moves: ' + MAX_MOVES, {
size: 60,
fill: 0xFFFFFF
});
movesText.anchor.set(0.5, 0);
movesText.y = 80;
LK.gui.top.addChild(movesText);
var highScoreText = new Text2('High Score: ' + highScore, {
size: 50,
fill: 0xFFFF00
});
highScoreText.anchor.set(0.5, 0);
highScoreText.y = 150;
LK.gui.top.addChild(highScoreText);
}
function isAdjacent(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;
}
game.down = function (x, y, obj) {
if (gameState !== 'playing' || isProcessing) return;
var candyInfo = grid.getCandyAt(x, y);
if (candyInfo && candyInfo.candy) {
// Check if it's a firecracker
if (candyInfo.candy.constructor === Firecracker) {
// Explode entire row
var firecrackerRow = candyInfo.y;
var points = grid.explodeRow(firecrackerRow);
currentScore += points;
if (scoreText) scoreText.setText('Score: ' + currentScore);
movesLeft--;
movesText.setText('Moves: ' + movesLeft);
// Clear selection if any
if (selectedCandy) {
selectedCandy.candy.scaleX = 1;
selectedCandy.candy.scaleY = 1;
selectedCandy = null;
}
// Process gravity and spawn new candies after explosion
LK.setTimeout(function () {
var moved = grid.applyGravity();
LK.setTimeout(function () {
grid.spawnNewCandies();
LK.setTimeout(function () {
processMatches();
}, 500);
}, 300);
}, 300);
return;
}
if (selectedCandy) {
if (selectedCandy.candy === candyInfo.candy) {
// Deselect
selectedCandy.candy.scaleX = 1;
selectedCandy.candy.scaleY = 1;
selectedCandy = null;
} else if (isAdjacent(selectedCandy.x, selectedCandy.y, candyInfo.x, candyInfo.y)) {
// Attempt swap
var oldSelected = selectedCandy;
selectedCandy.candy.scaleX = 1;
selectedCandy.candy.scaleY = 1;
selectedCandy = null;
// Try the swap
grid.swapCandies(oldSelected.x, oldSelected.y, candyInfo.x, candyInfo.y);
LK.getSound('swap').play();
// Check if swap creates matches
LK.setTimeout(function () {
var matches = grid.findMatches();
if (matches.length > 0) {
movesLeft--;
movesText.setText('Moves: ' + movesLeft);
processMatches();
} else {
// Swap back if no matches and deduct a move
grid.swapCandies(candyInfo.x, candyInfo.y, oldSelected.x, oldSelected.y);
movesLeft--;
movesText.setText('Moves: ' + movesLeft);
checkGameState();
}
}, 250);
} else {
// Select new candy
selectedCandy.candy.scaleX = 1;
selectedCandy.candy.scaleY = 1;
selectedCandy = candyInfo;
selectedCandy.candy.scaleX = 1.1;
selectedCandy.candy.scaleY = 1.1;
}
} else {
// Select candy
selectedCandy = candyInfo;
selectedCandy.candy.scaleX = 1.1;
selectedCandy.candy.scaleY = 1.1;
}
} else if (selectedCandy) {
// Deselect
selectedCandy.candy.scaleX = 1;
selectedCandy.candy.scaleY = 1;
selectedCandy = null;
}
};
game.update = function () {
// Game update logic handled by event system and timers
}; ===================================================================
--- original.js
+++ change.js
@@ -362,15 +362,22 @@
};
self.explodeRow = function (rowY) {
var score = 0;
LK.getSound('firecracker_explode').play();
- // Destroy entire row
+ // Destroy entire row including walls
for (var x = 0; x < GRID_SIZE; x++) {
- if (self.candies[rowY][x] && !self.walls[rowY][x]) {
+ // Destroy candy if present
+ if (self.candies[rowY][x]) {
self.candies[rowY][x].explode();
self.candies[rowY][x] = null;
score += 25;
}
+ // Destroy wall if present
+ if (self.walls[rowY][x]) {
+ self.walls[rowY][x].destroy();
+ self.walls[rowY][x] = null;
+ score += 15; // Give points for destroying walls
+ }
}
return score;
};
self.applyGravity = function () {
Boş renkli düğme. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Pizza. In-Game asset. 2d. High contrast. No shadows
Bomba . No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Hamburger. In-Game asset. 2d. High contrast. No shadows
Coca Cola. In-Game asset. 2d. High contrast. No shadows
Döner Shavurma. In-Game asset. 2d. High contrast. No shadows
Oatates kızartması Fast Food. In-Game asset. 2d. High contrast. No shadows
Lahmacun. In-Game asset. 2d. High contrast. No shadows
Basit mavi kare yüz. Burnu kocaman olsun. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Basit ağzı kocaman sarı renkde kare yüz. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Basit turuncu renkde kare yüz. In-Game asset. 2d. High contrast. No shadows
Basit mor renkde kare yüz. Burnu çok küçük, dişleri çok büyük. In-Game asset. 2d. High contrast. No shadows
İki gözü iki kaşı olsun
Düz sade kare duvar. In-Game asset. 2d. High contrast. No shadows
Hacvai Fişek. In-Game asset. 2d. High contrast. No shadows
Renkli süper bomba. In-Game asset. 2d. High contrast. No shadows
Elma. In-Game asset. 2d. High contrast. No shadows
Çiyelek. In-Game asset. 2d. High contrast. No shadows
Portakal. In-Game asset. 2d. High contrast. No shadows
Ananas. In-Game asset. 2d. High contrast. No shadows
Üzüm. In-Game asset. 2d. High contrast. No shadows
Muz. In-Game asset. 2d. High contrast. No shadows
Üzerinde soru işaresi olan renkli sandık. In-Game asset. 2d. High contrast. No shadows