-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.js
105 lines (95 loc) · 2.34 KB
/
main.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
let turn = true;
let lastPosition;
let isGameOver = false;
let gameData = Array(9).fill(1);
const cells = document.querySelectorAll('td');
const winner = document.querySelector('#win');
const undoButton = document.querySelector('#undo-btn');
const resetButton = document.querySelector('#reset-btn');
const success = new Audio('./static/click.wav');
const winStates = [[0, 3, 6], [1, 4, 7], [2, 5, 8], [0, 1, 2], [3, 4, 5], [6, 7, 8], [0, 4, 8], [2, 4, 6]];
function playAudio(audio) {
audio.currentTime = 0;
audio.play();
}
function togglePlayer() {
one.classList.toggle('highlight');
two.classList.toggle('highlight');
}
function undoMove() {
if (lastPosition) {
let [cell, index] = lastPosition;
turn = !turn;
gameData[index] = 1;
cell.textContent = "";
togglePlayer();
}
}
function getPlayer() {
let currentPlayer = turn ? "X" : "0";
turn = !turn;
togglePlayer();
return currentPlayer;
}
function resetBoard() {
togglePlayer();
isGameOver = false;
winner.textContent = "";
gameData = Array(9).fill(1);
undoButton.classList.remove('hidden');
resetButton.textContent = "Restart";
cells.forEach(function(cell) {
cell.textContent = "";
});
}
function playGame(event, index) {
if (gameData[index] === 1 && !isGameOver) {
playAudio(success);
let cell, currentPlayer;
cell = event.currentTarget;
currentPlayer = getPlayer();
lastPosition = [cell, index];
gameData[index] = currentPlayer;
cell.textContent = currentPlayer;
checkGameState(currentPlayer);
}
}
function checkGameState(currentPlayer) {
let isDraw = true;
winStates.forEach(function([i, j, k]) {
let A = gameData[i];
let B = gameData[j];
let C = gameData[k];
if (assertGameData(A, B, C, currentPlayer)) {
isDraw = false;
}
});
if (isDraw) {
if (!gameData.includes(1)) {
displayResults(!isDraw); // Draw
}
}
else {
displayResults(currentPlayer); // Win
}
}
function displayResults(win) {
if (win === false) {
winner.textContent = "⇔";
}
else {
//↻
winner.textContent = (win === "X") ? "⇐" : "⇒";
}
isGameOver = true;
undoButton.classList.add('hidden');
resetButton.innerHTML = "New Game";
}
function assertGameData(A, B, C, currentPlayer) {
if (A === B) {
if (B === C) {
return (C === currentPlayer);
}
}
return false;
}