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