/**** * 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 rows and columns for (var i = 0; i < boardSize; i++) { if (board[i][0].value && board[i][0].value === board[i][1].value && board[i][1].value === board[i][2].value) { return board[i][0].value; } if (board[0][i].value && board[0][i].value === board[1][i].value && board[1][i].value === board[2][i].value) { return board[0][i].value; } } // Check diagonals if (board[0][0].value && board[0][0].value === board[1][1].value && board[1][1].value === board[2][2].value) { return board[0][0].value; } if (board[0][2].value && board[0][2].value === board[1][1].value && board[1][1].value === board[2][0].value) { return board[0][2].value; } // 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);
/****
* 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 rows and columns
for (var i = 0; i < boardSize; i++) {
if (board[i][0].value && board[i][0].value === board[i][1].value && board[i][1].value === board[i][2].value) {
return board[i][0].value;
}
if (board[0][i].value && board[0][i].value === board[1][i].value && board[1][i].value === board[2][i].value) {
return board[0][i].value;
}
}
// Check diagonals
if (board[0][0].value && board[0][0].value === board[1][1].value && board[1][1].value === board[2][2].value) {
return board[0][0].value;
}
if (board[0][2].value && board[0][2].value === board[1][1].value && board[1][1].value === board[2][0].value) {
return board[0][2].value;
}
// 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);