function drawBoard(canvas, cellSize) {
const ctx = canvas.getContext('2d');
ctx.strokeStyle = '#000';
// Vertical lines
ctx.beginPath();
ctx.moveTo(cellSize, 0);
ctx.lineTo(cellSize, canvas.height);
ctx.stroke();
ctx.beginPath();
ctx.moveTo(cellSize * 2, 0);
ctx.lineTo(cellSize * 2, canvas.height);
ctx.stroke();
// Horizontal lines
ctx.beginPath();
ctx.moveTo(0, cellSize);
ctx.lineTo(canvas.width, cellSize);
ctx.stroke();
ctx.beginPath();
ctx.moveTo(0, cellSize * 2);
ctx.lineTo(canvas.width, cellSize * 2);
ctx.stroke();
}
function drawSymbol(canvas, cellSize, row, col, symbol) {
const ctx = canvas.getContext('2d');
ctx.font = `${cellSize}px sans-serif`;
ctx.textAlign = 'center';
ctx.textBaseline = 'middle';
ctx.strokeText(symbol, (col + 0.5) * cellSize, (row + 0.5) * cellSize);
}
function handleClick(canvas, gameState) {
canvas.addEventListener('click', event => {
const rect = canvas.getBoundingClientRect();
const x = event.clientX - rect.left;
const y = event.clientY - rect.top;
const col = Math.floor(x / gameState.cellSize);
const row = Math.floor(y / gameState.cellSize);
if (gameState.board[row][col] !== null) {
// Cell is already occupied
return;
}
gameState.board[row][col] = gameState.