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', 'candy_bomb', 'classic_candy_purple', 'classic_candy_orange', 'candy_bomb'];
} else {
candyAssets = ['candy_red', 'candy_blue', 'candy_green', 'candy_yellow', 'candy_purple', 'candy_orange', 'candy_bomb'];
}
var candyGraphics = self.attachAsset(candyAssets[candyType], {
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;
};
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 () {
tween(self, {
scaleX: 1.5,
scaleY: 1.5,
alpha: 0
}, {
duration: 200,
easing: tween.easeOut,
onFinish: function onFinish() {
self.destroy();
}
});
};
self.bombExplode = function () {
tween(self, {
scaleX: 3,
scaleY: 3,
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 = [];
// Create grid cells
for (var y = 0; y < GRID_SIZE; y++) {
self.cells[y] = [];
self.candies[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.fillGrid = function () {
for (var y = 0; y < GRID_SIZE; y++) {
for (var x = 0; x < GRID_SIZE; x++) {
if (!self.candies[y][x]) {
var candyType;
var attempts = 0;
// Try to find a candy type that doesn't create immediate matches
do {
if (currentTheme === 'classic') {
candyType = Math.random() < 0.05 ? 3 : Math.floor(Math.random() * 5);
if (candyType >= 3) candyType++; // Skip index 3 for normal candies, bomb stays at 3
} else {
candyType = Math.random() < 0.05 ? 6 : 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;
var bombsToExplode = [];
for (var i = 0; i < matches.length; i++) {
var match = matches[i];
if (self.candies[match.y][match.x]) {
if (self.candies[match.y][match.x].candyType === 6 || currentTheme === 'classic' && self.candies[match.y][match.x].candyType === 3) {
bombsToExplode.push({
x: match.x,
y: match.y
});
}
self.candies[match.y][match.x].explode();
self.candies[match.y][match.x] = null;
score += 10;
}
}
// Handle bomb explosions
for (var b = 0; b < bombsToExplode.length; b++) {
var bomb = bombsToExplode[b];
score += self.explodeBomb(bomb.x, bomb.y);
}
return score;
};
self.explodeBomb = function (bombX, bombY) {
var score = 0;
LK.getSound('bomb_explode').play();
// Create 3x3 explosion around bomb
for (var dy = -1; dy <= 1; dy++) {
for (var dx = -1; dx <= 1; dx++) {
var x = bombX + dx;
var y = bombY + dy;
if (x >= 0 && x < GRID_SIZE && y >= 0 && y < GRID_SIZE) {
if (self.candies[y][x]) {
self.candies[y][x].bombExplode();
self.candies[y][x] = null;
score += 20;
}
}
}
}
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]) {
// 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]) {
var candyType;
if (currentTheme === 'classic') {
candyType = Math.random() < 0.05 ? 3 : Math.floor(Math.random() * 5);
if (candyType >= 3) candyType++; // Skip index 3 for normal candies, bomb stays at 3
} else {
candyType = Math.random() < 0.05 ? 6 : 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) {
return {
x: gridX,
y: gridY,
candy: self.candies[gridY][gridX]
};
}
return null;
};
self.wouldCreateMatch = function (x, y, candyType) {
// Skip bomb type as it doesn't create matches
if (candyType === 6 || currentTheme === 'classic' && candyType === 3) return false;
// 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);
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;
});
/****
* 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 TARGET_SCORE = 1000;
var MAX_MOVES = 30;
var currentScore = 0;
var movesLeft = MAX_MOVES;
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;
var targetText = null;
// Show main menu on start
showMainMenu();
function processMatches() {
isProcessing = true;
var matches = grid.findMatches();
if (matches.length > 0) {
var points = grid.removeMatches(matches);
currentScore += points;
scoreText.setText('Score: ' + currentScore);
LK.getSound('match').play();
LK.setTimeout(function () {
var moved = grid.applyGravity();
LK.setTimeout(function () {
grid.spawnNewCandies();
LK.setTimeout(function () {
processMatches(); // Check for chain reactions
}, 500);
}, 300);
}, 300);
} else {
isProcessing = false;
checkGameState();
}
}
function checkGameState() {
if (currentScore >= TARGET_SCORE) {
// If player wins with classic theme, unlock Fast Food theme
if (currentTheme === 'classic' && unlockedThemes.indexOf('dark') === -1) {
unlockedThemes.push('dark');
storage.unlockedThemes = unlockedThemes;
}
LK.showYouWin();
} else if (movesLeft <= 0) {
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.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);
targetText = new Text2('Target: ' + TARGET_SCORE, {
size: 50,
fill: 0xFFFF00
});
targetText.anchor.set(0.5, 0);
targetText.y = 150;
LK.gui.top.addChild(targetText);
}
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) {
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
@@ -388,11 +388,27 @@
});
classicButton.x = 1024;
classicButton.y = 700;
self.addChild(classicButton);
- var darkButton = new MenuButton('Fast Food', function () {
- setTheme('dark');
- startGame();
+ 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);
@@ -421,8 +437,9 @@
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)
@@ -454,8 +471,13 @@
}
}
function checkGameState() {
if (currentScore >= TARGET_SCORE) {
+ // If player wins with classic theme, unlock Fast Food theme
+ if (currentTheme === 'classic' && unlockedThemes.indexOf('dark') === -1) {
+ unlockedThemes.push('dark');
+ storage.unlockedThemes = unlockedThemes;
+ }
LK.showYouWin();
} else if (movesLeft <= 0) {
LK.showGameOver();
}
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