-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
123 lines (100 loc) · 3 KB
/
Copy pathscript.js
File metadata and controls
123 lines (100 loc) · 3 KB
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
let board = ['', '', '', '', '', '', '', '', ''];
let currentPlayer = 'X';
let gameStatus = '';
let gameOver = false;
// Skor pemain
let scoreX = 0;
let scoreO = 0;
// Suara
const clickSound = new Audio('sound/click.mp3');
const winSound = new Audio('sound/win.mp3');
const drawSound = new Audio('sound/draw.mp3');
// Fungsi memainkan suara
function playClickSound() {
clickSound.play();
}
function playWinSound() {
winSound.play();
}
function playDrawSound() {
drawSound.play();
}
// Fungsi update skor ke tampilan
function updateScore() {
document.getElementById('scoreX').textContent = scoreX;
document.getElementById('scoreO').textContent = scoreO;
}
// Fungsi reset board (tanpa reset skor)
function resetBoard() {
board = ['', '', '', '', '', '', '', '', ''];
currentPlayer = 'X';
gameStatus = '';
gameOver = false;
renderBoard();
}
// Fungsi cek pemenang
function checkWinner() {
const winningCombinations = [
[0, 1, 2], [3, 4, 5], [6, 7, 8],
[0, 3, 6], [1, 4, 7], [2, 5, 8],
[0, 4, 8], [2, 4, 6]
];
for (let combination of winningCombinations) {
const [a, b, c] = combination;
if (board[a] && board[a] === board[b] && board[a] === board[c]) {
gameStatus = `Player ${board[a]} wins!`;
if (board[a] === 'X') {
scoreX++;
} else {
scoreO++;
}
playWinSound();
updateScore();
gameOver = true;
// Auto-reset setelah 2 detik
setTimeout(resetBoard, 2000);
return true;
}
}
if (!board.includes('')) {
gameStatus = "It's a draw!";
playDrawSound();
gameOver = true;
// Auto-reset setelah 2 detik
setTimeout(resetBoard, 2000);
return true;
}
return false;
}
// Render papan dan status
function renderBoard() {
const boardElement = document.getElementById('board');
boardElement.innerHTML = '';
board.forEach((cell, index) => {
const cellElement = document.createElement('div');
cellElement.classList.add('cell');
cellElement.textContent = cell;
cellElement.addEventListener('click', () => handleClick(index));
boardElement.appendChild(cellElement);
});
const statusElement = document.getElementById('status');
statusElement.textContent = gameStatus || `Current player: ${currentPlayer}`;
updateScore();
}
// Handle klik
function handleClick(index) {
if (gameOver || board[index] !== '') return;
board[index] = currentPlayer;
playClickSound();
renderBoard();
if (checkWinner()) {
return;
}
currentPlayer = currentPlayer === 'X' ? 'O' : 'X';
}
// Restart manual (jika user klik tombol)
document.getElementById('restartBtn').addEventListener('click', () => {
resetBoard();
});
// Render awal
renderBoard();