-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgame.js
More file actions
135 lines (105 loc) · 3.59 KB
/
Copy pathgame.js
File metadata and controls
135 lines (105 loc) · 3.59 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
124
125
126
127
128
129
130
131
132
133
134
135
let buttonColours = ["red", "blue", "green", "yellow"];
let gamePattern = [];
let userClickedPattern = [];
let gameStarted = false;
let levelCount = 1;
// Event listener for a keypress to start a game.
document.addEventListener("keypress", () => {
if (!gameStarted) {
gameStarted = true;
nextSequence();
}
});
// Event listener for buttons keypress.
document.querySelectorAll(".btn").forEach((item) => {
item.addEventListener("click", (event) => {
let userChosenColour = event.target.id;
userClickedPattern.push(userChosenColour);
userButtonAnimation(userChosenColour);
playAudio(userChosenColour);
let currentLevel = userClickedPattern.length - 1;
checkAnswer(currentLevel);
});
});
// Function to add next element to the game sequence.
function nextSequence() {
userClickedPattern = [];
let randomNumber = Math.floor(Math.random() * 4);
let randomChosenColour = buttonColours[randomNumber];
gamePattern.push(randomChosenColour);
setTimeout(() => {
if (gamePattern.length < 2) {
computerButtonAnimation(randomChosenColour);
playAudio(randomChosenColour);
}
}, 200);
document.querySelector("#level-title").innerHTML = "Level " + levelCount;
levelCount++;
}
// Recursvie function to loop through the existing game sequence on every level.
function loopThroughGamePattern(gamePattern) {
for (let i = 0; i < gamePattern.length; i++) {
((i) => {
setTimeout(() => {
computerButtonAnimation(gamePattern[i]);
playAudio(gamePattern[i]);
}, 500 * i);
})(i);
}
}
// Function to check the user's answer against the game sequence.
function checkAnswer(currentLevel) {
if (gamePattern[currentLevel] === userClickedPattern[currentLevel]) {
if (userClickedPattern.length === gamePattern.length) {
setTimeout(() => {
nextSequence();
loopThroughGamePattern(gamePattern);
}, 1000);
}
} else {
let wrong = new Audio("sounds/wrong.mp3");
wrong.play();
document.body.classList.add("game-over");
setTimeout(() => {
document.body.classList.remove("game-over");
}, 200);
gameStarted = false;
levelCount = 1;
document.querySelector("#level-title").innerHTML =
"Game Over, Press Any Key to Restart";
}
}
function userButtonAnimation(object) {
let pushedButton = document.querySelector("#" + object);
pushedButton.classList.add("pressed-by-user");
setTimeout(() => {
pushedButton.classList.remove("pressed-by-user");
}, 100);
}
function computerButtonAnimation(object) {
let pushedButton = document.querySelector("#" + object);
pushedButton.classList.add("pressed-by-pc");
setTimeout(() => {
pushedButton.classList.remove("pressed-by-pc");
}, 100);
}
function playAudio(object) {
switch (object) {
case "blue":
let blue = new Audio("sounds/blue.mp3");
blue.play();
break;
case "green":
let green = new Audio("sounds/green.mp3");
green.play();
break;
case "red":
let red = new Audio("sounds/red.mp3");
red.play();
break;
case "yellow":
let yellow = new Audio("sounds/yellow.mp3");
yellow.play();
break;
}
}