-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
121 lines (101 loc) · 3.5 KB
/
script.js
File metadata and controls
121 lines (101 loc) · 3.5 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
'use strict';
const SimonGame = (() => {
let sequence = [], playerSequence = [], level = 0;
let gameActive = false, highScore = localStorage.getItem('highScore') || 0, isMuted = false;
const colors = ['green', 'red', 'yellow', 'blue'];
const colorElements = colors.reduce((acc, color) => {
acc[color] = document.getElementById(`color-${color}`);
return acc;
}, {});
const soundCache = colors.reduce((acc, color) => {
acc[color] = new Audio(`sounds/${color}.wav`);
return acc;
}, {});
const playSound = (color) => {
if (!isMuted) {
soundCache[color].currentTime = 0;
soundCache[color].play();
}
};
const flashColor = (color) => {
const element = colorElements[color];
element.classList.add('active');
playSound(color);
setTimeout(() => {
element.classList.remove('active');
}, 500);
};
const nextSequence = () => {
const randomColor = colors[Math.floor(Math.random() * colors.length)];
sequence.push(randomColor);
level++;
playerSequence = [];
displayMessage(`Level ${level}`);
playSequence();
};
const playSequence = () => {
sequence.forEach((color, index) => {
setTimeout(() => flashColor(color), 950 * (index + 1));
});
};
const playerTurn = (color) => {
playerSequence.push(color);
flashColor(color);
if (playerSequence[playerSequence.length - 1] !== sequence[playerSequence.length - 1]) {
gameOver();
return;
}
if (playerSequence.length === sequence.length) {
setTimeout(nextSequence, 1500);
}
};
const gameOver = () => {
displayMessage('Game Over! Press Start to try again.');
sequence = [];
if (level > highScore) {
highScore = level;
localStorage.setItem('highScore', highScore);
document.getElementById('high-score').textContent = `High Score: ${highScore}`;
}
level = 0;
gameActive = false;
const startButton = document.getElementById('start-button');
startButton.disabled = false;
startButton.textContent = 'Start Game';
};
const displayMessage = (message) => {
document.getElementById('message').textContent = message;
};
const startGame = () => {
if (gameActive) return;
const startButton = document.getElementById('start-button');
startButton.textContent = 'Playing...';
displayMessage('Get ready!');
gameActive = true;
startButton.disabled = true;
setTimeout(nextSequence, 1000);
};
document.getElementById('sound').addEventListener('click', () => {
isMuted = !isMuted;
const muteControl = document.getElementById('sound');
if (isMuted) {
muteControl.classList.add('muted');
} else {
muteControl.classList.remove('muted');
}
});
document.getElementById('high-score').textContent = `High Score: ${highScore}`;
return {
startGame,
playerTurn,
};
})();
document.getElementById('start-button').addEventListener('click', SimonGame.startGame);
document.querySelectorAll('.color').forEach(button => {
button.addEventListener('click', (event) => {
const color = event.target.id.replace('color-', '');
if (SimonGame.playerTurn) {
SimonGame.playerTurn(color);
}
});
});