-
Notifications
You must be signed in to change notification settings - Fork 128
/
Copy pathscript.js
129 lines (112 loc) · 4.26 KB
/
script.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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
document.addEventListener('DOMContentLoaded', () => {
const board = document.getElementById('board');
const cells = Array.from(document.querySelectorAll('.cell'));
const modal = document.getElementById('resultModal');
const resultMessage = document.getElementById('resultMessage');
const closeModal = document.getElementById('closeModal');
const newGameButton = document.getElementById('newGame');
const playerXWins = document.getElementById('playerXWins');
const playerOWins = document.getElementById('playerOWins');
const draws = document.getElementById('draws');
let currentPlayer = 'X';
let gameActive = true;
let boardState = Array(9).fill('');
let playerXScore = 0;
let playerOScore = 0;
let tieCount = 0;
const winningConditions = [
[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 updateScoreboard(winner) {
if (winner === 'X') {
playerXScore++;
playerXWins.textContent = `Player X Wins: ${playerXScore}`;
} else if (winner === 'O') {
playerOScore++;
playerOWins.textContent = `Player O Wins: ${playerOScore}`;
} else {
tieCount++;
draws.textContent = `Draws: ${tieCount}`;
}
}
function handleCellClick(e) {
const cell = e.target;
const index = cell.getAttribute('data-index');
if (boardState[index] !== '' || !gameActive) {
return;
}
cell.textContent = currentPlayer;
boardState[index] = currentPlayer;
if (checkWin()) {
gameActive = false;
updateScoreboard(currentPlayer); // Update scoreboard based on winner
showResult(`${currentPlayer} wins!`);
return;
}
if (boardState.every(cell => cell !== '')) {
gameActive = false;
updateScoreboard('draw'); // Update scoreboard for a draw
showResult('Draw!');
return;
}
currentPlayer = currentPlayer === 'X' ? 'O' : 'X';
}
function checkWin() {
return winningConditions.some(condition => {
return condition.every(index => boardState[index] === currentPlayer);
});
}
function showResult(message) {
resultMessage.textContent = message;
modal.style.display = 'block';
// Reset game state after displaying result
boardState = Array(9).fill('');
currentPlayer = 'X';
gameActive = true;
cells.forEach(cell => cell.textContent = '');
}
function determineOverallWinner() {
let winnerMessage;
if (playerXScore > playerOScore) {
winnerMessage = 'Player X Wins Overall!';
} else if (playerOScore > playerXScore) {
winnerMessage = 'Player O Wins Overall!';
} else if (playerXScore === playerOScore && (playerXScore > 0 || playerOScore > 0)) {
winnerMessage = 'It\'s a Tie between Player X and Player O!';
} else {
winnerMessage = 'It\'s a Draw Overall!';
}
alert(winnerMessage); // Show pop-up message with overall winner
}
// Event listeners
cells.forEach(cell => cell.addEventListener('click', handleCellClick));
closeModal.addEventListener('click', () => {
modal.style.display = 'none';
});
newGameButton.addEventListener('click', () => {
modal.style.display = 'none';
// Reset game state for a new game
boardState = Array(9).fill('');
currentPlayer = 'X';
gameActive = true;
cells.forEach(cell => cell.textContent = '');
});
const resetScoreboardButton = document.getElementById('resetScoreboard');
resetScoreboardButton.addEventListener('click', () => {
determineOverallWinner(); // Determine and show the overall winner before resetting
playerXScore = 0;
playerOScore = 0;
tieCount = 0;
// Update scoreboard elements directly after clicking "Reset Scoreboard"
playerXWins.textContent = `Player X Wins: ${playerXScore}`;
playerOWins.textContent = `Player O Wins: ${playerOScore}`;
draws.textContent = `Draws: ${tieCount}`;
});
});