-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
98 lines (81 loc) · 2.57 KB
/
app.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
const elements = {
word: document.getElementById("word"),
textInput: document.getElementById("text"),
domScore: document.getElementById("score"),
domTime: document.getElementById("time"),
domEndgame: document.getElementById("end-game-container"),
settingsBtn: document.getElementById("settings-btn"),
settings: document.getElementById("settings"),
settingsForm: document.getElementById("settings-form"),
difficultySelect: document.getElementById("difficulty"),
};
const state = {
words: [
"sigh",
"tense",
"airplane",
"ball",
"pies",
"juice",
"warlike",
"bad",
"north",
"dependent",
"steer",
"silver",
"highfalutin",
"superficial",
"quince",
"eight",
"feeble",
"admit",
"drag",
"loving",
],
randomWord: "",
score: 0,
time: 10,
interval: null,
};
const setState = (newState = {}, prevState = state) => Object.assign(prevState, newState);
const getRandomWord = arr => arr[Math.floor(Math.random() * arr.length)];
const displayWord = () => {
setState({ randomWord: getRandomWord(state.words) });
elements.word.textContent = state.randomWord;
};
const updateScore = () => {
setState({ score: state.score + 1 });
elements.domScore.textContent = state.score;
};
const gameOver = score => {
elements.domEndgame.insertAdjacentHTML(
"afterbegin",
`
<span>Time ran out</span>
<p>Your final score is: <span>${score}</span></p>
<button onclick="location.reload()">play again</button>
`,
);
elements.domEndgame.classList.add("show");
};
const updateTime = (timeVal = 0) => {
timeVal && setState({ time: state.time + timeVal });
if (state.time <= 0) {
clearInterval(state.interval);
gameOver(state.score);
} else setState({ time: state.time - 1 });
elements.domTime.textContent = `${state.time}s`;
};
elements.textInput.addEventListener("input", ({ currentTarget: input }) => {
let enteredWord = input.value.trim().toLowerCase();
let { time: timeVal } = elements.difficultySelect[elements.difficultySelect.selectedIndex].dataset;
if (enteredWord === state.randomWord && state.time) {
updateTime(+timeVal + 1);
updateScore();
displayWord();
input.value = "";
}
});
elements.settingsBtn.addEventListener("click", () => elements.settings.classList.toggle("show-settings"));
displayWord();
setState({ interval: setInterval(updateTime, 1000) });