Skip to content

Commit 3676287

Browse files
feat: solved 7th stage of the Hyperskill project "Hangman"
1 parent 8733b32 commit 3676287

File tree

2 files changed

+79
-0
lines changed

2 files changed

+79
-0
lines changed

hyperskill/09_hangman/07/.gitkeep

Whitespace-only changes.

hyperskill/09_hangman/07/main.js

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
const input = require('sync-input');
2+
3+
const readLetter = (revealedWord) => {
4+
let letter;
5+
while (true) {
6+
console.log(revealedWord)
7+
letter = input("Input a letter: ");
8+
if (letter.length !== 1) {
9+
console.log("Please, input a single letter.");
10+
} else if (!letter.match(/[a-z]/)) {
11+
console.log("Please, enter a lowercase letter from the English alphabet.");
12+
} else {
13+
break;
14+
}
15+
}
16+
17+
return letter;
18+
}
19+
20+
const showBanner = () => {
21+
console.log("H A N G M A N");
22+
console.log();
23+
}
24+
25+
const chooseWord = () => {
26+
const words = ["python", "java", "swift", "javascript"];
27+
return words[Math.floor(Math.random() * words.length)];
28+
}
29+
30+
const revealWord = (word, guessedLetters) => {
31+
let revealedWord = "";
32+
for (let i = 0; i < word.length; i++) {
33+
if (guessedLetters.has(word[i])) {
34+
revealedWord += word[i];
35+
} else {
36+
revealedWord += "-";
37+
}
38+
}
39+
40+
return revealedWord;
41+
}
42+
43+
const showResult = (revealedWord, word) => {
44+
if (revealedWord === word) {
45+
console.log(`You guessed the word ${word}!`);
46+
console.log("You survived!");
47+
} else {
48+
console.log("You lost!");
49+
}
50+
}
51+
52+
const game = () => {
53+
showBanner();
54+
55+
const word = chooseWord();
56+
57+
let revealedWord = "-".repeat(word.length);
58+
let alreadyGuessed = new Set();
59+
60+
let lives = 8;
61+
while (lives > 0 && revealedWord !== word) {
62+
const letter = readLetter(revealedWord);
63+
64+
if (alreadyGuessed.has(letter)) {
65+
console.log("You've already guessed this letter.");
66+
} else if (word.includes(letter)) {
67+
alreadyGuessed.add(letter);
68+
revealedWord = revealWord(word, alreadyGuessed);
69+
} else {
70+
console.log("That letter doesn't appear in the word");
71+
alreadyGuessed.add(letter);
72+
lives--;
73+
}
74+
}
75+
76+
showResult(revealedWord, word);
77+
}
78+
79+
game();

0 commit comments

Comments
 (0)