/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var GameGrid = Container.expand(function () {
var self = Container.call(this);
var bg = self.attachAsset('grid_bg', {
anchorX: 0.5,
anchorY: 0.5
});
self.grid = [];
self.tiles = [];
self.emptyCells = [];
// Initialize 8x8 grid with empty cell visualization
for (var row = 0; row < 8; row++) {
self.grid[row] = [];
for (var col = 0; col < 8; col++) {
self.grid[row][col] = null;
// Add empty cell background
var emptyCell = self.attachAsset('empty_cell', {
anchorX: 0.5,
anchorY: 0.5
});
var cellX = (col - 3.5) * 140;
var cellY = (row - 3.5) * 140;
emptyCell.x = cellX;
emptyCell.y = cellY;
self.emptyCells.push(emptyCell);
}
}
self.addRandomTile = function () {
var emptyCells = [];
for (var row = 0; row < 8; row++) {
for (var col = 0; col < 8; col++) {
if (!self.grid[row][col]) {
emptyCells.push({
row: row,
col: col
});
}
}
}
if (emptyCells.length > 0) {
var randomCell = emptyCells[Math.floor(Math.random() * emptyCells.length)];
var value = Math.random() < 0.9 ? -2 : -4;
self.addTile(randomCell.row, randomCell.col, value);
}
};
self.addTile = function (row, col, value) {
var tile = new Tile(value);
tile.gridX = col;
tile.gridY = row;
var tileX = (col - 3.5) * 140;
var tileY = (row - 3.5) * 140;
tile.x = tileX;
tile.y = tileY;
self.grid[row][col] = tile;
self.tiles.push(tile);
self.addChild(tile);
};
self.canMove = function () {
// Check for empty cells
for (var row = 0; row < 8; row++) {
for (var col = 0; col < 8; col++) {
if (!self.grid[row][col]) {
return true;
}
}
}
// Check for possible merges
for (var row = 0; row < 8; row++) {
for (var col = 0; col < 8; col++) {
var current = self.grid[row][col];
if (current) {
// Check right
if (col < 7 && self.grid[row][col + 1] && self.grid[row][col + 1].value === current.value) {
return true;
}
// Check down
if (row < 7 && self.grid[row + 1][col] && self.grid[row + 1][col].value === current.value) {
return true;
}
}
}
}
return false;
};
self.move = function (direction) {
var moved = false;
var newGrid = [];
for (var row = 0; row < 8; row++) {
newGrid[row] = [];
for (var col = 0; col < 8; col++) {
newGrid[row][col] = null;
}
}
if (direction === 'left') {
for (var row = 0; row < 8; row++) {
var line = [];
for (var col = 0; col < 8; col++) {
if (self.grid[row][col]) {
line.push(self.grid[row][col]);
}
}
var merged = self.mergeLine(line);
for (var i = 0; i < merged.length; i++) {
newGrid[row][i] = merged[i];
if (!moved && (merged[i].gridX !== i || merged[i].gridY !== row)) {
moved = true;
}
merged[i].gridX = i;
merged[i].gridY = row;
}
}
} else if (direction === 'right') {
for (var row = 0; row < 8; row++) {
var line = [];
for (var col = 7; col >= 0; col--) {
if (self.grid[row][col]) {
line.push(self.grid[row][col]);
}
}
var merged = self.mergeLine(line);
for (var i = 0; i < merged.length; i++) {
newGrid[row][7 - i] = merged[i];
if (!moved && (merged[i].gridX !== 7 - i || merged[i].gridY !== row)) {
moved = true;
}
merged[i].gridX = 7 - i;
merged[i].gridY = row;
}
}
} else if (direction === 'up') {
for (var col = 0; col < 8; col++) {
var line = [];
for (var row = 0; row < 8; row++) {
if (self.grid[row][col]) {
line.push(self.grid[row][col]);
}
}
var merged = self.mergeLine(line);
for (var i = 0; i < merged.length; i++) {
newGrid[i][col] = merged[i];
if (!moved && (merged[i].gridX !== col || merged[i].gridY !== i)) {
moved = true;
}
merged[i].gridX = col;
merged[i].gridY = i;
}
}
} else if (direction === 'down') {
for (var col = 0; col < 8; col++) {
var line = [];
for (var row = 7; row >= 0; row--) {
if (self.grid[row][col]) {
line.push(self.grid[row][col]);
}
}
var merged = self.mergeLine(line);
for (var i = 0; i < merged.length; i++) {
newGrid[7 - i][col] = merged[i];
if (!moved && (merged[i].gridX !== col || merged[i].gridY !== 7 - i)) {
moved = true;
}
merged[i].gridX = col;
merged[i].gridY = 7 - i;
}
}
}
if (moved) {
self.grid = newGrid;
self.animateTiles();
LK.getSound('tile_move').play();
LK.setTimeout(function () {
self.addRandomTile();
if (!self.canMove()) {
LK.showGameOver();
}
}, 200);
}
return moved;
};
self.mergeLine = function (line) {
var result = [];
var i = 0;
while (i < line.length) {
if (i < line.length - 1 && line[i].value === line[i + 1].value) {
// Merge tiles - in reverse 2048, we go towards negative numbers
var newValue;
if (line[i].value === -2) {
newValue = -4;
} else if (line[i].value === -4) {
newValue = -8;
} else if (line[i].value < 0) {
newValue = line[i].value * 2;
} else if (line[i].value === 2) {
newValue = 1;
} else if (line[i].value === 1) {
newValue = 0;
} else if (line[i].value === 0) {
newValue = -1;
} else if (line[i].value > 0) {
newValue = line[i].value / 2;
} else {
newValue = line[i].value * 2;
}
line[i].setValue(newValue);
result.push(line[i]);
// Remove the merged tile
line[i + 1].destroy();
var index = gameGrid.tiles.indexOf(line[i + 1]);
if (index > -1) {
gameGrid.tiles.splice(index, 1);
}
LK.getSound('tile_merge').play();
// Check for win condition
if (newValue <= -2048) {
LK.setTimeout(function () {
LK.showYouWin();
}, 300);
}
i += 2;
} else {
result.push(line[i]);
i++;
}
}
return result;
};
self.animateTiles = function () {
for (var i = 0; i < self.tiles.length; i++) {
var tile = self.tiles[i];
var targetX = (tile.gridX - 3.5) * 140;
var targetY = (tile.gridY - 3.5) * 140;
tween(tile, {
x: targetX,
y: targetY
}, {
duration: 200
});
}
};
return self;
});
var MenuButton = Container.expand(function (text, action) {
var self = Container.call(this);
var bg = self.attachAsset('button', {
anchorX: 0.5,
anchorY: 0.5
});
var buttonText = new Text2(text, {
size: 60,
fill: 0xFFFFFF
});
buttonText.anchor.set(0.5, 0.5);
self.addChild(buttonText);
self.action = action;
self.down = function () {
tween(self, {
scaleX: 0.95,
scaleY: 0.95
}, {
duration: 100
});
};
self.up = function () {
tween(self, {
scaleX: 1,
scaleY: 1
}, {
duration: 100
});
if (self.action) {
self.action();
}
};
return self;
});
var Tile = Container.expand(function (value) {
var self = Container.call(this);
var bg = self.attachAsset('tile', {
anchorX: 0.5,
anchorY: 0.5
});
self.value = value || -2;
self.gridX = 0;
self.gridY = 0;
var text = new Text2(self.value.toString(), {
size: 48,
fill: 0xFFFFFF
});
text.anchor.set(0.5, 0.5);
self.addChild(text);
self.setValue = function (newValue) {
self.value = newValue;
text.setText(newValue.toString());
// Color tiles based on value with vibrant, realistic colors
if (newValue <= -1024) {
bg.tint = 0x8e44ad; // Deep purple for highest negative values
} else if (newValue <= -512) {
bg.tint = 0x9b59b6; // Purple
} else if (newValue <= -256) {
bg.tint = 0xe74c3c; // Vibrant red
} else if (newValue <= -128) {
bg.tint = 0xf39c12; // Bright orange
} else if (newValue <= -64) {
bg.tint = 0xf1c40f; // Golden yellow
} else if (newValue <= -32) {
bg.tint = 0x2ecc71; // Emerald green
} else if (newValue <= -16) {
bg.tint = 0x1abc9c; // Turquoise
} else if (newValue <= -8) {
bg.tint = 0x3498db; // Bright blue
} else if (newValue <= -4) {
bg.tint = 0x9b59b6; // Light purple
} else if (newValue <= -2) {
bg.tint = 0xe67e22; // Vibrant orange
} else if (newValue >= 16) {
bg.tint = 0xc0392b; // Dark red for high positive values
} else if (newValue >= 8) {
bg.tint = 0x16a085; // Dark turquoise
} else if (newValue >= 4) {
bg.tint = 0x2980b9; // Strong blue
} else if (newValue >= 2) {
bg.tint = 0x27ae60; // Fresh green
} else if (newValue >= 0) {
bg.tint = 0xf39c12; // Bright orange for zero
} else {
bg.tint = 0x3498db; // Default bright blue
}
};
self.setValue(self.value);
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a252f
});
/****
* Game Code
****/
var gameState = 'menu'; // 'menu', 'instructions', 'playing'
var gameGrid;
var swipeStartX = 0;
var swipeStartY = 0;
var isSweping = false;
// Menu elements
var menuContainer = new Container();
var menuBg = menuContainer.attachAsset('menu_bg', {
anchorX: 0.5,
anchorY: 0.5
});
var titleText = new Text2('Eğlenceli -2048 Oyunu', {
size: 80,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 0;
titleText.y = -200;
menuContainer.addChild(titleText);
var playButton = new MenuButton('Oyna', function () {
startGame();
});
playButton.x = 0;
playButton.y = 0;
menuContainer.addChild(playButton);
var instructionsButton = new MenuButton('Nasıl Oynanır', function () {
showInstructions();
});
instructionsButton.x = 0;
instructionsButton.y = 250;
menuContainer.addChild(instructionsButton);
menuContainer.x = 2048 / 2;
menuContainer.y = 2732 / 2;
game.addChild(menuContainer);
// Instructions container
var instructionsContainer = new Container();
var instructionsBg = instructionsContainer.attachAsset('menu_bg', {
anchorX: 0.5,
anchorY: 0.5
});
var instructionsTitle = new Text2('Nasıl Oynanır', {
size: 60,
fill: 0xFFFFFF
});
instructionsTitle.anchor.set(0.5, 0.5);
instructionsTitle.x = 0;
instructionsTitle.y = -300;
instructionsContainer.addChild(instructionsTitle);
var instructionsText = new Text2('• -2 den başlayıp -2048 yapsan kazanırsın\n• Aynı sayıları birleştirerek\n daha küçük sayılar elde edin\n• Kaydırarak taşları hareket ettirin\n• -2+-2=-4, -4+-4=-8, vs.', {
size: 36,
fill: 0xFFFFFF
});
instructionsText.anchor.set(0.5, 0.5);
instructionsText.x = 0;
instructionsText.y = -50;
instructionsContainer.addChild(instructionsText);
var backButton = new MenuButton('Geri', function () {
showMenu();
});
backButton.x = 0;
backButton.y = 250;
instructionsContainer.addChild(backButton);
instructionsContainer.x = 2048 / 2;
instructionsContainer.y = 2732 / 2;
instructionsContainer.visible = false;
game.addChild(instructionsContainer);
// Score display
var scoreText = new Text2('Skor: 0', {
size: 48,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
scoreText.x = 0;
scoreText.y = 50;
LK.gui.top.addChild(scoreText);
scoreText.visible = false;
function showMenu() {
gameState = 'menu';
menuContainer.visible = true;
instructionsContainer.visible = false;
if (gameGrid) {
gameGrid.visible = false;
}
scoreText.visible = false;
LK.stopMusic();
}
function showInstructions() {
gameState = 'instructions';
menuContainer.visible = false;
instructionsContainer.visible = true;
}
function startGame() {
gameState = 'playing';
menuContainer.visible = false;
instructionsContainer.visible = false;
scoreText.visible = true;
if (gameGrid) {
gameGrid.destroy();
}
gameGrid = new GameGrid();
gameGrid.x = 2048 / 2;
gameGrid.y = 2732 / 2;
game.addChild(gameGrid);
// Add initial tiles
gameGrid.addRandomTile();
gameGrid.addRandomTile();
LK.setScore(0);
scoreText.setText('Skor: 0');
LK.playMusic('bgmusic', {
loop: true
});
}
game.down = function (x, y, obj) {
if (gameState === 'playing') {
swipeStartX = x;
swipeStartY = y;
isSweping = true;
}
};
game.up = function (x, y, obj) {
if (gameState === 'playing' && isSweping) {
var deltaX = x - swipeStartX;
var deltaY = y - swipeStartY;
var minSwipeDistance = 50;
if (Math.abs(deltaX) > minSwipeDistance || Math.abs(deltaY) > minSwipeDistance) {
var direction;
if (Math.abs(deltaX) > Math.abs(deltaY)) {
direction = deltaX > 0 ? 'right' : 'left';
} else {
direction = deltaY > 0 ? 'down' : 'up';
}
if (gameGrid.move(direction)) {
LK.setScore(LK.getScore() + 10);
scoreText.setText('Skor: ' + LK.getScore());
}
}
isSweping = false;
}
};
game.update = function () {
// Game loop logic if needed
}; /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var GameGrid = Container.expand(function () {
var self = Container.call(this);
var bg = self.attachAsset('grid_bg', {
anchorX: 0.5,
anchorY: 0.5
});
self.grid = [];
self.tiles = [];
self.emptyCells = [];
// Initialize 8x8 grid with empty cell visualization
for (var row = 0; row < 8; row++) {
self.grid[row] = [];
for (var col = 0; col < 8; col++) {
self.grid[row][col] = null;
// Add empty cell background
var emptyCell = self.attachAsset('empty_cell', {
anchorX: 0.5,
anchorY: 0.5
});
var cellX = (col - 3.5) * 140;
var cellY = (row - 3.5) * 140;
emptyCell.x = cellX;
emptyCell.y = cellY;
self.emptyCells.push(emptyCell);
}
}
self.addRandomTile = function () {
var emptyCells = [];
for (var row = 0; row < 8; row++) {
for (var col = 0; col < 8; col++) {
if (!self.grid[row][col]) {
emptyCells.push({
row: row,
col: col
});
}
}
}
if (emptyCells.length > 0) {
var randomCell = emptyCells[Math.floor(Math.random() * emptyCells.length)];
var value = Math.random() < 0.9 ? -2 : -4;
self.addTile(randomCell.row, randomCell.col, value);
}
};
self.addTile = function (row, col, value) {
var tile = new Tile(value);
tile.gridX = col;
tile.gridY = row;
var tileX = (col - 3.5) * 140;
var tileY = (row - 3.5) * 140;
tile.x = tileX;
tile.y = tileY;
self.grid[row][col] = tile;
self.tiles.push(tile);
self.addChild(tile);
};
self.canMove = function () {
// Check for empty cells
for (var row = 0; row < 8; row++) {
for (var col = 0; col < 8; col++) {
if (!self.grid[row][col]) {
return true;
}
}
}
// Check for possible merges
for (var row = 0; row < 8; row++) {
for (var col = 0; col < 8; col++) {
var current = self.grid[row][col];
if (current) {
// Check right
if (col < 7 && self.grid[row][col + 1] && self.grid[row][col + 1].value === current.value) {
return true;
}
// Check down
if (row < 7 && self.grid[row + 1][col] && self.grid[row + 1][col].value === current.value) {
return true;
}
}
}
}
return false;
};
self.move = function (direction) {
var moved = false;
var newGrid = [];
for (var row = 0; row < 8; row++) {
newGrid[row] = [];
for (var col = 0; col < 8; col++) {
newGrid[row][col] = null;
}
}
if (direction === 'left') {
for (var row = 0; row < 8; row++) {
var line = [];
for (var col = 0; col < 8; col++) {
if (self.grid[row][col]) {
line.push(self.grid[row][col]);
}
}
var merged = self.mergeLine(line);
for (var i = 0; i < merged.length; i++) {
newGrid[row][i] = merged[i];
if (!moved && (merged[i].gridX !== i || merged[i].gridY !== row)) {
moved = true;
}
merged[i].gridX = i;
merged[i].gridY = row;
}
}
} else if (direction === 'right') {
for (var row = 0; row < 8; row++) {
var line = [];
for (var col = 7; col >= 0; col--) {
if (self.grid[row][col]) {
line.push(self.grid[row][col]);
}
}
var merged = self.mergeLine(line);
for (var i = 0; i < merged.length; i++) {
newGrid[row][7 - i] = merged[i];
if (!moved && (merged[i].gridX !== 7 - i || merged[i].gridY !== row)) {
moved = true;
}
merged[i].gridX = 7 - i;
merged[i].gridY = row;
}
}
} else if (direction === 'up') {
for (var col = 0; col < 8; col++) {
var line = [];
for (var row = 0; row < 8; row++) {
if (self.grid[row][col]) {
line.push(self.grid[row][col]);
}
}
var merged = self.mergeLine(line);
for (var i = 0; i < merged.length; i++) {
newGrid[i][col] = merged[i];
if (!moved && (merged[i].gridX !== col || merged[i].gridY !== i)) {
moved = true;
}
merged[i].gridX = col;
merged[i].gridY = i;
}
}
} else if (direction === 'down') {
for (var col = 0; col < 8; col++) {
var line = [];
for (var row = 7; row >= 0; row--) {
if (self.grid[row][col]) {
line.push(self.grid[row][col]);
}
}
var merged = self.mergeLine(line);
for (var i = 0; i < merged.length; i++) {
newGrid[7 - i][col] = merged[i];
if (!moved && (merged[i].gridX !== col || merged[i].gridY !== 7 - i)) {
moved = true;
}
merged[i].gridX = col;
merged[i].gridY = 7 - i;
}
}
}
if (moved) {
self.grid = newGrid;
self.animateTiles();
LK.getSound('tile_move').play();
LK.setTimeout(function () {
self.addRandomTile();
if (!self.canMove()) {
LK.showGameOver();
}
}, 200);
}
return moved;
};
self.mergeLine = function (line) {
var result = [];
var i = 0;
while (i < line.length) {
if (i < line.length - 1 && line[i].value === line[i + 1].value) {
// Merge tiles - in reverse 2048, we go towards negative numbers
var newValue;
if (line[i].value === -2) {
newValue = -4;
} else if (line[i].value === -4) {
newValue = -8;
} else if (line[i].value < 0) {
newValue = line[i].value * 2;
} else if (line[i].value === 2) {
newValue = 1;
} else if (line[i].value === 1) {
newValue = 0;
} else if (line[i].value === 0) {
newValue = -1;
} else if (line[i].value > 0) {
newValue = line[i].value / 2;
} else {
newValue = line[i].value * 2;
}
line[i].setValue(newValue);
result.push(line[i]);
// Remove the merged tile
line[i + 1].destroy();
var index = gameGrid.tiles.indexOf(line[i + 1]);
if (index > -1) {
gameGrid.tiles.splice(index, 1);
}
LK.getSound('tile_merge').play();
// Check for win condition
if (newValue <= -2048) {
LK.setTimeout(function () {
LK.showYouWin();
}, 300);
}
i += 2;
} else {
result.push(line[i]);
i++;
}
}
return result;
};
self.animateTiles = function () {
for (var i = 0; i < self.tiles.length; i++) {
var tile = self.tiles[i];
var targetX = (tile.gridX - 3.5) * 140;
var targetY = (tile.gridY - 3.5) * 140;
tween(tile, {
x: targetX,
y: targetY
}, {
duration: 200
});
}
};
return self;
});
var MenuButton = Container.expand(function (text, action) {
var self = Container.call(this);
var bg = self.attachAsset('button', {
anchorX: 0.5,
anchorY: 0.5
});
var buttonText = new Text2(text, {
size: 60,
fill: 0xFFFFFF
});
buttonText.anchor.set(0.5, 0.5);
self.addChild(buttonText);
self.action = action;
self.down = function () {
tween(self, {
scaleX: 0.95,
scaleY: 0.95
}, {
duration: 100
});
};
self.up = function () {
tween(self, {
scaleX: 1,
scaleY: 1
}, {
duration: 100
});
if (self.action) {
self.action();
}
};
return self;
});
var Tile = Container.expand(function (value) {
var self = Container.call(this);
var bg = self.attachAsset('tile', {
anchorX: 0.5,
anchorY: 0.5
});
self.value = value || -2;
self.gridX = 0;
self.gridY = 0;
var text = new Text2(self.value.toString(), {
size: 48,
fill: 0xFFFFFF
});
text.anchor.set(0.5, 0.5);
self.addChild(text);
self.setValue = function (newValue) {
self.value = newValue;
text.setText(newValue.toString());
// Color tiles based on value with vibrant, realistic colors
if (newValue <= -1024) {
bg.tint = 0x8e44ad; // Deep purple for highest negative values
} else if (newValue <= -512) {
bg.tint = 0x9b59b6; // Purple
} else if (newValue <= -256) {
bg.tint = 0xe74c3c; // Vibrant red
} else if (newValue <= -128) {
bg.tint = 0xf39c12; // Bright orange
} else if (newValue <= -64) {
bg.tint = 0xf1c40f; // Golden yellow
} else if (newValue <= -32) {
bg.tint = 0x2ecc71; // Emerald green
} else if (newValue <= -16) {
bg.tint = 0x1abc9c; // Turquoise
} else if (newValue <= -8) {
bg.tint = 0x3498db; // Bright blue
} else if (newValue <= -4) {
bg.tint = 0x9b59b6; // Light purple
} else if (newValue <= -2) {
bg.tint = 0xe67e22; // Vibrant orange
} else if (newValue >= 16) {
bg.tint = 0xc0392b; // Dark red for high positive values
} else if (newValue >= 8) {
bg.tint = 0x16a085; // Dark turquoise
} else if (newValue >= 4) {
bg.tint = 0x2980b9; // Strong blue
} else if (newValue >= 2) {
bg.tint = 0x27ae60; // Fresh green
} else if (newValue >= 0) {
bg.tint = 0xf39c12; // Bright orange for zero
} else {
bg.tint = 0x3498db; // Default bright blue
}
};
self.setValue(self.value);
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a252f
});
/****
* Game Code
****/
var gameState = 'menu'; // 'menu', 'instructions', 'playing'
var gameGrid;
var swipeStartX = 0;
var swipeStartY = 0;
var isSweping = false;
// Menu elements
var menuContainer = new Container();
var menuBg = menuContainer.attachAsset('menu_bg', {
anchorX: 0.5,
anchorY: 0.5
});
var titleText = new Text2('Eğlenceli -2048 Oyunu', {
size: 80,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 0;
titleText.y = -200;
menuContainer.addChild(titleText);
var playButton = new MenuButton('Oyna', function () {
startGame();
});
playButton.x = 0;
playButton.y = 0;
menuContainer.addChild(playButton);
var instructionsButton = new MenuButton('Nasıl Oynanır', function () {
showInstructions();
});
instructionsButton.x = 0;
instructionsButton.y = 250;
menuContainer.addChild(instructionsButton);
menuContainer.x = 2048 / 2;
menuContainer.y = 2732 / 2;
game.addChild(menuContainer);
// Instructions container
var instructionsContainer = new Container();
var instructionsBg = instructionsContainer.attachAsset('menu_bg', {
anchorX: 0.5,
anchorY: 0.5
});
var instructionsTitle = new Text2('Nasıl Oynanır', {
size: 60,
fill: 0xFFFFFF
});
instructionsTitle.anchor.set(0.5, 0.5);
instructionsTitle.x = 0;
instructionsTitle.y = -300;
instructionsContainer.addChild(instructionsTitle);
var instructionsText = new Text2('• -2 den başlayıp -2048 yapsan kazanırsın\n• Aynı sayıları birleştirerek\n daha küçük sayılar elde edin\n• Kaydırarak taşları hareket ettirin\n• -2+-2=-4, -4+-4=-8, vs.', {
size: 36,
fill: 0xFFFFFF
});
instructionsText.anchor.set(0.5, 0.5);
instructionsText.x = 0;
instructionsText.y = -50;
instructionsContainer.addChild(instructionsText);
var backButton = new MenuButton('Geri', function () {
showMenu();
});
backButton.x = 0;
backButton.y = 250;
instructionsContainer.addChild(backButton);
instructionsContainer.x = 2048 / 2;
instructionsContainer.y = 2732 / 2;
instructionsContainer.visible = false;
game.addChild(instructionsContainer);
// Score display
var scoreText = new Text2('Skor: 0', {
size: 48,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
scoreText.x = 0;
scoreText.y = 50;
LK.gui.top.addChild(scoreText);
scoreText.visible = false;
function showMenu() {
gameState = 'menu';
menuContainer.visible = true;
instructionsContainer.visible = false;
if (gameGrid) {
gameGrid.visible = false;
}
scoreText.visible = false;
LK.stopMusic();
}
function showInstructions() {
gameState = 'instructions';
menuContainer.visible = false;
instructionsContainer.visible = true;
}
function startGame() {
gameState = 'playing';
menuContainer.visible = false;
instructionsContainer.visible = false;
scoreText.visible = true;
if (gameGrid) {
gameGrid.destroy();
}
gameGrid = new GameGrid();
gameGrid.x = 2048 / 2;
gameGrid.y = 2732 / 2;
game.addChild(gameGrid);
// Add initial tiles
gameGrid.addRandomTile();
gameGrid.addRandomTile();
LK.setScore(0);
scoreText.setText('Skor: 0');
LK.playMusic('bgmusic', {
loop: true
});
}
game.down = function (x, y, obj) {
if (gameState === 'playing') {
swipeStartX = x;
swipeStartY = y;
isSweping = true;
}
};
game.up = function (x, y, obj) {
if (gameState === 'playing' && isSweping) {
var deltaX = x - swipeStartX;
var deltaY = y - swipeStartY;
var minSwipeDistance = 50;
if (Math.abs(deltaX) > minSwipeDistance || Math.abs(deltaY) > minSwipeDistance) {
var direction;
if (Math.abs(deltaX) > Math.abs(deltaY)) {
direction = deltaX > 0 ? 'right' : 'left';
} else {
direction = deltaY > 0 ? 'down' : 'up';
}
if (gameGrid.move(direction)) {
LK.setScore(LK.getScore() + 10);
scoreText.setText('Skor: ' + LK.getScore());
}
}
isSweping = false;
}
};
game.update = function () {
// Game loop logic if needed
};