-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathScriptTwo.js
115 lines (99 loc) · 2.98 KB
/
ScriptTwo.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
const wordContainer = document.getElementById('wordContainer');
const startButton = document.getElementById('startButton');
const usedLettersElement = document.getElementById('usedLetters');
let canvas = document.getElementById('canvas');
let ctx = canvas.getContext('2d');
ctx.canvas.width = 0;
ctx.canvas.height = 0;
const bodyParts = [
[4,2,1,1],
[4,3,1,2],
[3,5,1,1],
[5,5,1,1],
[3,3,1,1],
[5,3,1,1]
];
let selectedWord;
let usedLetters;
let mistakes;
let hits;
const addLetter = letter => {
const letterElement = document.createElement('hidden');
letterElement.innerHTML = letter.toUpperCase();
usedLettersElement.appendChild(letterElement);
}
const addBodyPart = bodyPart => {
ctx.fillStyle = 'rgb(240, 0, 0)';
ctx.fillRect(...bodyPart);
};
const wrongLetter = () => {
addBodyPart(bodyParts[mistakes]);
mistakes++;
if(mistakes === bodyParts.length) endGame();
}
const endGame = () => {
document.removeEventListener('keydown', letterEvent);
startButton.style.display = 'inline';
}
const correctLetter = letter => {
const { children } = wordContainer;
for(let i = 0; i < children.length; i++) {
if(children[i].innerHTML === letter) {
children[i].classList.toggle('hidden');
hits++;
}
}
if(hits === selectedWord.length) endGame();
}
const letterInput = letter => {
if(selectedWord.includes(letter)) {
correctLetter(letter);
} else {
wrongLetter();
}
addLetter(letter);
usedLetters.push(letter);
};
const letterEvent = event => {
let newLetter = event.key.toUpperCase();
if(newLetter.match(/^[a-zñ]$/i) && !usedLetters.includes(newLetter)) {
letterInput(newLetter);
};
};
const drawWord = () => {
selectedWord.forEach(letter => {
const letterElement = document.createElement('span');
letterElement.innerHTML = letter.toUpperCase();
letterElement.classList.add('letter');
letterElement.classList.add('hidden');
wordContainer.appendChild(letterElement);
});
};
const selectRandomWord = () => {
let word = words[Math.floor((Math.random() * words.length))].toUpperCase();
selectedWord = word.split('');
};
const drawHangMan = () => {
ctx.canvas.width = 220;
ctx.canvas.height = 160;
ctx.scale(20, 20);
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = 'rgb(0, 255, 191)';
ctx.fillRect(0, 7, 4, 1);
ctx.fillRect(1, 0, 1, 8);
ctx.fillRect(2, 0, 3, 1);
ctx.fillRect(4, 1, 1, 1);
};
const startGame = () => {
usedLetters = [];
mistakes = 0;
hits = 0;
wordContainer.innerHTML = '';
usedLettersElement.innerHTML = '';
startButton.style.display = 'none';
drawHangMan();
selectRandomWord();
drawWord();
document.addEventListener('keydown', letterEvent);
};
startButton.addEventListener('click', startGame);