52 lines
1.4 KiB
JavaScript
52 lines
1.4 KiB
JavaScript
const boardDiv = document.getElementById('board');
|
|
const statusDiv = document.getElementById('status');
|
|
const restartBtn = document.getElementById('restart-btn');
|
|
let board, currentPlayer, gameOver;
|
|
|
|
function initGame() {
|
|
board = Array(9).fill('');
|
|
currentPlayer = 'X';
|
|
gameOver = false;
|
|
statusDiv.textContent = "Turno de " + currentPlayer;
|
|
renderBoard();
|
|
}
|
|
|
|
function renderBoard() {
|
|
boardDiv.innerHTML = '';
|
|
board.forEach((cell, idx) => {
|
|
const cellDiv = document.createElement('div');
|
|
cellDiv.className = 'cell';
|
|
cellDiv.textContent = cell;
|
|
cellDiv.onclick = () => handleCellClick(idx);
|
|
boardDiv.appendChild(cellDiv);
|
|
});
|
|
}
|
|
|
|
function handleCellClick(idx) {
|
|
if (gameOver || board[idx] !== '') return;
|
|
board[idx] = currentPlayer;
|
|
renderBoard();
|
|
if (checkWinner(currentPlayer)) {
|
|
statusDiv.textContent = `¡${currentPlayer} gana! 🎉`;
|
|
gameOver = true;
|
|
} else if (board.every(cell => cell !== '')) {
|
|
statusDiv.textContent = "¡Empate!";
|
|
gameOver = true;
|
|
} else {
|
|
currentPlayer = currentPlayer === 'X' ? 'O' : 'X';
|
|
statusDiv.textContent = "Turno de " + currentPlayer;
|
|
}
|
|
}
|
|
|
|
function checkWinner(player) {
|
|
const winCases = [
|
|
[0,1,2],[3,4,5],[6,7,8], // Filas
|
|
[0,3,6],[1,4,7],[2,5,8], // Columnas
|
|
[0,4,8],[2,4,6] // Diagonales
|
|
];
|
|
return winCases.some(combo => combo.every(i => board[i] === player));
|
|
}
|
|
|
|
restartBtn.onclick = initGame;
|
|
|
|
initGame(); |