/****
* Classes
****/
//<Assets used in the game will automatically appear here>
// Class for a Tic Tac Toe cell
var Cell = Container.expand(function () {
var self = Container.call(this);
self.value = null; // 'X' or 'O'
self.graphics = self.attachAsset('cell', {
anchorX: 0.5,
anchorY: 0.5
});
self.setValue = function (value) {
self.value = value;
if (value === 'X') {
self.graphics.tint = 0xff0000; // Red for X
} else if (value === 'O') {
self.graphics.tint = 0x0000ff; // Blue for O
}
};
self.reset = function () {
self.value = null;
self.graphics.tint = 0xffffff; // Reset to white
};
self.isEmpty = function () {
return self.value === null;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000 //Init game with black background
});
/****
* Game Code
****/
// Initialize game variables
var board = [];
var currentPlayer = 'X';
var gameOver = false;
var boardSize = 3;
var cellSize = 200;
var boardOffsetX = (2048 - boardSize * cellSize) / 2;
var boardOffsetY = (2732 - boardSize * cellSize) / 2;
// Create the board
for (var i = 0; i < boardSize; i++) {
board[i] = [];
for (var j = 0; j < boardSize; j++) {
var cell = new Cell();
cell.x = boardOffsetX + j * cellSize + cellSize / 2;
cell.y = boardOffsetY + i * cellSize + cellSize / 2;
game.addChild(cell);
board[i][j] = cell;
}
}
// Check for a win or draw
function checkGameOver() {
// Check if a player has cleared three boxes
var xCount = 0;
var oCount = 0;
for (var i = 0; i < boardSize; i++) {
for (var j = 0; j < boardSize; j++) {
if (board[i][j].value === 'X') {
xCount++;
} else if (board[i][j].value === 'O') {
oCount++;
}
}
}
if (xCount >= 3) {
return 'X';
} else if (oCount >= 3) {
return 'O';
}
// Check for draw
var draw = true;
for (var i = 0; i < boardSize; i++) {
for (var j = 0; j < boardSize; j++) {
if (board[i][j].isEmpty()) {
draw = false;
break;
}
}
}
if (draw) {
return 'draw';
}
return null;
}
// Handle cell click
function handleCellClick(x, y, obj) {
if (gameOver) {
return;
}
var cell = obj.target;
if (cell.isEmpty()) {
cell.setValue(currentPlayer);
var result = checkGameOver();
if (result) {
gameOver = true;
if (result === 'draw') {
console.log("It's a draw!");
} else {
console.log(result + " wins!");
}
} else {
currentPlayer = currentPlayer === 'X' ? 'O' : 'X';
}
}
}
// Attach event listeners to cells
for (var i = 0; i < boardSize; i++) {
for (var j = 0; j < boardSize; j++) {
board[i][j].down = handleCellClick;
}
}
// Reset the game
function resetGame() {
for (var i = 0; i < boardSize; i++) {
for (var j = 0; j < boardSize; j++) {
board[i][j].reset();
}
}
currentPlayer = 'X';
gameOver = false;
}
// Add a reset button
var resetButton = new Text2('Reset', {
size: 100,
fill: "#ffffff"
});
resetButton.anchor.set(0.5, 0.5);
resetButton.x = 2048 / 2;
resetButton.y = 2732 - 200;
resetButton.down = resetGame;
LK.gui.bottom.addChild(resetButton);