|
const $ = e =>document.querySelector(e); |
|
let board = Array(9).fill(0); |
|
let step = []; |
|
let fitstMove = true; |
|
|
|
const winPatterns = [ |
|
[0, 1, 2], [3, 4, 5], [6, 7, 8], |
|
[0, 3, 6], [1, 4, 7], [2, 5, 8], |
|
[0, 4, 8], [2, 4, 6] |
|
]; |
|
|
|
|
|
|
|
function restart(){ |
|
board = Array(9).fill(0); |
|
step = []; |
|
fitstMove = !fitstMove; |
|
|
|
initializeBoard(); |
|
} |
|
|
|
function checkWin(board) { |
|
for (let pattern of winPatterns) { |
|
const [a, b, c] = pattern; |
|
if (board[a] !== 0 && board[a] === board[b] && board[a] === board[c]) { |
|
return board[a]; |
|
} |
|
} |
|
return 0; |
|
} |
|
|
|
function initializeBoard() { |
|
const boardElement =$('.board'); |
|
boardElement.innerHTML = ''; |
|
|
|
for(let i = 0; i < 9; i++) { |
|
const div = document.createElement('div'); |
|
div.className = 'cell'; |
|
div.id = 'cell-' + i; |
|
div.addEventListener('click', () => handleMove(i)); |
|
boardElement.appendChild(div); |
|
} |
|
if(!fitstMove){ |
|
apiStep(); |
|
} |
|
updateBoardDisplay(); |
|
} |
|
|
|
function updateBoardDisplay() { |
|
board.forEach((value, index) => { |
|
const cell = $('#cell-' + index); |
|
cell.className = 'cell'; |
|
if (value === 1) { |
|
cell.classList.add('o'); |
|
} else if (value === -1) { |
|
cell.classList.add('x'); |
|
} |
|
}); |
|
|
|
const winner = checkWin(board); |
|
const messageElement =$('.message'); |
|
if (winner === 1) { |
|
messageElement.textContent = 'Komputer wygrał!'; |
|
} else if (winner === -1) { |
|
messageElement.textContent = 'Wygrałeś!'; |
|
let newBoard = [] |
|
for (let i = 0; i <= 9 - 1; i++) { |
|
let value = 0; |
|
if(board[i]!=0) |
|
value = board[i]==1?-1:1; |
|
newBoard.push(value); |
|
} |
|
fetch('/savegame', { |
|
method: 'POST', |
|
headers: { |
|
'Content-Type': 'application/json' |
|
}, |
|
body: JSON.stringify({ final_board: newBoard, sequence:step }) |
|
}).then(res => res.json()); |
|
|
|
|
|
} else if (!board.includes(0)) { |
|
messageElement.textContent = 'Remis!'; |
|
} else { |
|
messageElement.textContent = ''; |
|
} |
|
} |
|
|
|
async function apiStep() { |
|
try { |
|
|
|
const response = await fetch('/move', { |
|
method: 'POST', |
|
headers: { |
|
'Content-Type': 'application/json' |
|
}, |
|
body: JSON.stringify({ board: board }) |
|
}); |
|
|
|
const data = await response.json(); |
|
|
|
if (data.status === 'success' && data.move >= 0 && data.move < 9) { |
|
|
|
board[data.move] = 1; |
|
updateBoardDisplay(); |
|
} |
|
} catch (error) { |
|
console.error('Błąd podczas komunikacji z API:', error); |
|
} |
|
} |
|
|
|
async function handleMove(index) { |
|
if (board[index] !== 0 || checkWin(board)) return; |
|
|
|
|
|
board[index] = -1; |
|
|
|
step.push(index); |
|
updateBoardDisplay(); |
|
|
|
|
|
if (checkWin(board)) return; |
|
|
|
apiStep(); |
|
} |
|
|
|
|
|
async function initGame() { |
|
|
|
$('.restart').addEventListener('click', (e)=>{ |
|
console.log('add event restart'); |
|
restart(); |
|
}); |
|
|
|
try { |
|
const response = await fetch('/status'); |
|
const data = await response.json(); |
|
|
|
console.log(data); |
|
} catch (error) { |
|
console.error('Błąd podczas pobierania stanu gry:', error); |
|
} |
|
initializeBoard(); |
|
} |
|
|
|
|
|
|
|
initGame(); |