/**** * Classes ****/ //<Assets used in the game will automatically appear here> // Tile class to represent each tile in the game var Tile = Container.expand(function () { var self = Container.call(this); self.value = 0; self.text = new Text2('0', { size: 100, fill: "#ffffff" }); self.text.anchor.set(0.5, 0.5); self.addChild(self.text); self.updateValue = function (newValue) { self.value = newValue; self.text.setText(newValue); }; self.merge = function (otherTile) { if (self.value === otherTile.value) { self.updateValue(self.value * 2); otherTile.updateValue(0); return true; } return false; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 //Init game with black background }); /**** * Game Code ****/ // Game variables var gridSize = 4; var tileSize = 200; var tilePadding = 20; var board = []; var score = 0; var scoreTxt = new Text2('0', { size: 150, fill: "#ffffff" }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Initialize board function initBoard() { for (var i = 0; i < gridSize; i++) { board[i] = []; for (var j = 0; j < gridSize; j++) { var tile = new Tile(); tile.x = j * (tileSize + tilePadding) + tilePadding; tile.y = i * (tileSize + tilePadding) + tilePadding; board[i][j] = tile; game.addChild(tile); } } addRandomTile(); addRandomTile(); } // Add a random tile to the board function addRandomTile() { var emptyTiles = []; for (var i = 0; i < gridSize; i++) { for (var j = 0; j < gridSize; j++) { if (board[i][j].value === 0) { emptyTiles.push(board[i][j]); } } } if (emptyTiles.length > 0) { var randomTile = emptyTiles[Math.floor(Math.random() * emptyTiles.length)]; randomTile.updateValue(Math.random() < 0.9 ? 2 : 4); } } // Handle swipe events function handleSwipe(direction) { var moved = false; if (direction === 'left' || direction === 'right') { for (var i = 0; i < gridSize; i++) { var row = board[i]; if (direction === 'right') row.reverse(); moved = mergeTiles(row) || moved; if (direction === 'right') row.reverse(); } } else if (direction === 'up' || direction === 'down') { for (var j = 0; j < gridSize; j++) { var column = []; for (var i = 0; i < gridSize; i++) { column.push(board[i][j]); } if (direction === 'down') column.reverse(); moved = mergeTiles(column) || moved; if (direction === 'down') column.reverse(); } } if (moved) { addRandomTile(); updateScore(); } } // Merge tiles in a row or column function mergeTiles(tiles) { var moved = false; for (var i = 0; i < tiles.length - 1; i++) { for (var j = i + 1; j < tiles.length; j++) { if (tiles[j].value === 0) continue; if (tiles[i].merge(tiles[j])) { moved = true; break; } else if (tiles[i].value === 0) { tiles[i].updateValue(tiles[j].value); tiles[j].updateValue(0); moved = true; } else { break; } } } return moved; } // Update score function updateScore() { score = 0; for (var i = 0; i < gridSize; i++) { for (var j = 0; j < gridSize; j++) { score += board[i][j].value; } } scoreTxt.setText(score); } // Initialize the game initBoard(); // Handle swipe events game.down = function (x, y, obj) { var startX = x; var startY = y; game.move = function (x, y, obj) { var deltaX = x - startX; var deltaY = y - startY; if (Math.abs(deltaX) > Math.abs(deltaY)) { if (deltaX > 50) { handleSwipe('right'); } else if (deltaX < -50) { handleSwipe('left'); } } else { if (deltaY > 50) { handleSwipe('down'); } else if (deltaY < -50) { handleSwipe('up'); } } game.move = null; }; }; game.up = function (x, y, obj) { game.move = null; }; // Update game state game.update = function () { // No continuous updates needed for this game };
/****
* Classes
****/
//<Assets used in the game will automatically appear here>
// Tile class to represent each tile in the game
var Tile = Container.expand(function () {
var self = Container.call(this);
self.value = 0;
self.text = new Text2('0', {
size: 100,
fill: "#ffffff"
});
self.text.anchor.set(0.5, 0.5);
self.addChild(self.text);
self.updateValue = function (newValue) {
self.value = newValue;
self.text.setText(newValue);
};
self.merge = function (otherTile) {
if (self.value === otherTile.value) {
self.updateValue(self.value * 2);
otherTile.updateValue(0);
return true;
}
return false;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000 //Init game with black background
});
/****
* Game Code
****/
// Game variables
var gridSize = 4;
var tileSize = 200;
var tilePadding = 20;
var board = [];
var score = 0;
var scoreTxt = new Text2('0', {
size: 150,
fill: "#ffffff"
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Initialize board
function initBoard() {
for (var i = 0; i < gridSize; i++) {
board[i] = [];
for (var j = 0; j < gridSize; j++) {
var tile = new Tile();
tile.x = j * (tileSize + tilePadding) + tilePadding;
tile.y = i * (tileSize + tilePadding) + tilePadding;
board[i][j] = tile;
game.addChild(tile);
}
}
addRandomTile();
addRandomTile();
}
// Add a random tile to the board
function addRandomTile() {
var emptyTiles = [];
for (var i = 0; i < gridSize; i++) {
for (var j = 0; j < gridSize; j++) {
if (board[i][j].value === 0) {
emptyTiles.push(board[i][j]);
}
}
}
if (emptyTiles.length > 0) {
var randomTile = emptyTiles[Math.floor(Math.random() * emptyTiles.length)];
randomTile.updateValue(Math.random() < 0.9 ? 2 : 4);
}
}
// Handle swipe events
function handleSwipe(direction) {
var moved = false;
if (direction === 'left' || direction === 'right') {
for (var i = 0; i < gridSize; i++) {
var row = board[i];
if (direction === 'right') row.reverse();
moved = mergeTiles(row) || moved;
if (direction === 'right') row.reverse();
}
} else if (direction === 'up' || direction === 'down') {
for (var j = 0; j < gridSize; j++) {
var column = [];
for (var i = 0; i < gridSize; i++) {
column.push(board[i][j]);
}
if (direction === 'down') column.reverse();
moved = mergeTiles(column) || moved;
if (direction === 'down') column.reverse();
}
}
if (moved) {
addRandomTile();
updateScore();
}
}
// Merge tiles in a row or column
function mergeTiles(tiles) {
var moved = false;
for (var i = 0; i < tiles.length - 1; i++) {
for (var j = i + 1; j < tiles.length; j++) {
if (tiles[j].value === 0) continue;
if (tiles[i].merge(tiles[j])) {
moved = true;
break;
} else if (tiles[i].value === 0) {
tiles[i].updateValue(tiles[j].value);
tiles[j].updateValue(0);
moved = true;
} else {
break;
}
}
}
return moved;
}
// Update score
function updateScore() {
score = 0;
for (var i = 0; i < gridSize; i++) {
for (var j = 0; j < gridSize; j++) {
score += board[i][j].value;
}
}
scoreTxt.setText(score);
}
// Initialize the game
initBoard();
// Handle swipe events
game.down = function (x, y, obj) {
var startX = x;
var startY = y;
game.move = function (x, y, obj) {
var deltaX = x - startX;
var deltaY = y - startY;
if (Math.abs(deltaX) > Math.abs(deltaY)) {
if (deltaX > 50) {
handleSwipe('right');
} else if (deltaX < -50) {
handleSwipe('left');
}
} else {
if (deltaY > 50) {
handleSwipe('down');
} else if (deltaY < -50) {
handleSwipe('up');
}
}
game.move = null;
};
};
game.up = function (x, y, obj) {
game.move = null;
};
// Update game state
game.update = function () {
// No continuous updates needed for this game
};