1
1
import { getRandomInt , playAudio } from './utils.js' ;
2
2
import winSound from '../../assets/audio/guessanumber_win.mp3' ;
3
3
import uncorrectSound from '../../assets/audio/guessanumber_wrong_answer.mp3' ;
4
+ import { GameTimer } from './timer.js' ;
5
+ import { createTimerView } from './timer_view.js' ;
6
+ import { getRoomState } from './room_state.js' ;
7
+ import { definitionCodeWord } from './game-over.js' ;
4
8
5
9
let randomNumber : number = 0 ;
6
10
let numberOfGuesses : number = 0 ;
11
+ const gameName = 'guess-a-number' ;
7
12
const userGuess : any = 'userGuess' ;
8
13
const statusArea : string = 'statusArea' ;
9
14
const historyList : string = 'historyList' ;
10
15
const maxValue : number = 100 ;
16
+ const maxGuesses : number = 9 ;
11
17
const buttonArea : string = 'buttonArea' ;
18
+ const codeWord : string = 'codeguess-a-number' ;
19
+ const timerguessanumber : string = '#timer-guess-a-number' ;
20
+ const stateTimer = new GameTimer ( gameName , getRoomState ( ) ) ;
21
+ const secretWord = definitionCodeWord ( ) ;
12
22
13
23
function writeMessage ( elementId : any , message : string , appendMessage : any ) {
14
24
const elemToUpdate = document . getElementById ( elementId ) ;
@@ -19,11 +29,23 @@ function writeMessage(elementId: any, message: string, appendMessage: any) {
19
29
}
20
30
}
21
31
32
+ function setHiddenWordVisibility ( visible ) {
33
+ document . getElementById ( codeWord ) . innerHTML = ( visible ? secretWord : '' ) ;
34
+ }
35
+
22
36
function newGame ( ) {
23
37
randomNumber = getRandomInt ( maxValue ) + 1 ;
24
38
numberOfGuesses = 0 ;
25
39
writeMessage ( 'historyList' , '' , '' ) ;
40
+ const timerContainer = document . querySelector ( timerguessanumber ) ;
41
+ timerContainer . innerHTML = '' ;
42
+ createTimerView ( timerContainer , stateTimer ) ;
43
+ stateTimer . gameOpened ( ) ;
44
+ document . getElementById ( userGuess ) . removeAttribute ( 'disabled' ) ;
45
+ document . getElementById ( buttonArea ) . removeAttribute ( 'disabled' ) ;
26
46
document . getElementById ( userGuess ) . focus ( ) ;
47
+ const gameFinished = getRoomState ( ) . isGameFinished ( gameName ) ;
48
+ setHiddenWordVisibility ( gameFinished ) ;
27
49
}
28
50
29
51
function guessInRange ( guess : number ) {
@@ -40,12 +62,16 @@ function userGuessed() {
40
62
} else {
41
63
numberOfGuesses += 1 ;
42
64
43
- if ( Number ( userGuessednumber ) === randomNumber ) {
65
+ if ( Number ( userGuessednumber ) === randomNumber && numberOfGuesses < maxGuesses ) {
44
66
// Got it
45
67
writeMessage ( statusArea , `<p style='color:rgb(245, 0, 6)'><span>You got me in</span> ${ numberOfGuesses } <span>guesses</span>, <span>I was thinking</span> ${ randomNumber } . <span>You won</span>!</p>` , '' ) ;
46
68
const audioWin = new Audio ( winSound ) ;
47
69
playAudio ( audioWin ) ;
48
- newGame ( ) ;
70
+ stateTimer . gameFinished ( ) ;
71
+ numberOfGuesses = 0 ;
72
+ document . getElementById ( userGuess ) . setAttribute ( 'disabled' , 'disabled' ) ;
73
+ document . getElementById ( buttonArea ) . setAttribute ( 'disabled' , 'disabled' ) ;
74
+ setHiddenWordVisibility ( true ) ;
49
75
} else if ( Number ( userGuessednumber ) < randomNumber ) {
50
76
// User needs to guess higher
51
77
writeMessage ( statusArea , `<p><span>You need to guess higher than</span> ${ userGuessednumber } , <span>try again</span>...</p>` , '' ) ;
@@ -59,8 +85,15 @@ function userGuessed() {
59
85
const audioUncorrect = new Audio ( uncorrectSound ) ;
60
86
playAudio ( audioUncorrect ) ;
61
87
}
62
- }
63
88
89
+ if ( numberOfGuesses >= maxGuesses ) {
90
+ writeMessage ( statusArea , '<p><span>Game over! Try new game.</span><span>Please enter a number</span> 1-100 <span>and press the Guess button</span></p>' , '' ) ;
91
+ document . getElementById ( historyList ) . innerHTML = '' ;
92
+ randomNumber = getRandomInt ( maxValue ) + 1 ;
93
+ numberOfGuesses = 0 ;
94
+ writeMessage ( 'historyList' , '' , '' ) ;
95
+ }
96
+ }
64
97
document . getElementById ( userGuess ) . value = '' ;
65
98
document . getElementById ( userGuess ) . focus ( ) ;
66
99
}
@@ -77,6 +110,7 @@ function resetGame() {
77
110
document . getElementById ( statusArea ) . innerHTML = '<p><span>Please enter a number</span> 1-100 <span>and press the Guess button</span>.</p>' ;
78
111
document . getElementById ( userGuess ) . value = '' ;
79
112
document . getElementById ( userGuess ) . focus ( ) ;
113
+ document . getElementById ( userGuess ) . setAttribute ( 'active' , 'active' ) ;
80
114
}
81
115
82
116
document . getElementById ( buttonArea ) . addEventListener ( 'click' , ( ) => {
0 commit comments