1
+ const failAnswerPhrases = [
2
+ "Вы загадали неправильное число!\n\u{1F914}" ,
3
+ "Я сдаюсь..\n\u{1F92F}" ,
4
+ "\u{1F92C}...\nНе угадал." ,
5
+ "Не повезло, не угадал\n\u{1F622}" ,
6
+ "Там же не было неправльных ответов?\n\u{1F612}"
7
+ ] ;
8
+
9
+ const nextAnswerPhrases = [
10
+ "Вы загадали число " ,
11
+ "Вы загадали число " ,
12
+ "Может, ваше число " ,
13
+ "И ваше число... " ,
14
+ "Это число "
15
+ ] ;
16
+
17
+ const successAnswerPhrases = [
18
+ "Я всегда угадываю\n\u{1F60E}" ,
19
+ "Это было легко\u{1F61D}" ,
20
+ "Я выиграл\u{1F607}" ,
21
+ "Победа за мной\n\u{1F973}" ,
22
+ "Victory!\n\u{1F638}"
23
+ ] ;
24
+
25
+ //UI links
26
+ const orderNumberField = document . querySelector ( '#orderNumberField' ) ;
27
+ const answerField = document . querySelector ( '#answerField' ) ;
28
+
29
+ const modalInputValues = $ ( '#modalInputValues' ) ;
30
+ const minValueField = document . querySelector ( '#minValueInput' ) ;
31
+ const maxValueField = document . querySelector ( '#maxValueInput' ) ;
32
+
33
+ const modalStartAlert = $ ( '#modalStartAlert' ) ;
34
+ const modalStartAlertText = document . querySelector ( "#modalStartAlert h5" ) ;
35
+
36
+ //vars
37
+ let minValue , maxValue , answerNumber , orderNumber ;
38
+ let gameRun ;
39
+ let firstRun = true ;
40
+
41
+ //Старт/рестарт игры
42
+ function Start ( )
43
+ {
44
+ minValue = parseInt ( minValueField . value ) || 0 ;
45
+ maxValue = parseInt ( maxValueField . value ) === 0 ? 0 : parseInt ( maxValueField . value ) || 100 ;
46
+
47
+
48
+ if ( minValue > maxValue )
49
+ {
50
+ let b = minValue ;
51
+ minValue = maxValue ;
52
+ maxValue = b ;
53
+ }
54
+
55
+ minValue = minValue < - 999 ? - 999 : minValue ;
56
+ maxValue = maxValue > 999 ? 999 : maxValue ;
57
+
58
+ answerNumber = Math . floor ( ( minValue + maxValue ) / 2 ) ;
59
+ orderNumber = 1 ;
60
+ gameRun = true ;
61
+
62
+ orderNumberField . innerText = orderNumber ++ ;
63
+ answerField . innerText = `${ nextAnswerPhrases [ 0 ] } ${ IntToText ( answerNumber ) } ?` ;
64
+
65
+ modalStartAlertText . innerText = `Загадайте любое целое число от ${ minValue } до ${ maxValue } , а я его угадаю` ;
66
+ modalStartAlert . modal ( "show" ) ;
67
+ firstRun = false ;
68
+ }
69
+
70
+ // Перевод числовой записи в пропись
71
+ function IntToText ( n )
72
+ {
73
+ const maxLength = 20 ;
74
+ let result = "" ;
75
+ let sign = ( Math . abs ( n ) != n ) ? "минус " : "" ;
76
+ let workNuber = Math . abs ( n ) ;
77
+
78
+ if ( n == 0 )
79
+ {
80
+ result = 'ноль' ;
81
+ }
82
+ else
83
+ {
84
+ const textValues =
85
+ [
86
+ [ "" , "один" , "два" , "три" , "четыре" , "пять" , "шесть" , "семь" , "восемь" , "девять" ] ,
87
+ [ "" , "десять" , "двадцать" , "тридцать" , "сорок" , "пятьдесят" , "шестьдесят" , "семьдесят" , "восемьдесят" , "девяносто" ] ,
88
+ [ "" , "сто" , "двести" , "тристо" , "четыресто" , "пятьсот" , "шестьсот" , "семьсот" , "восемьсот" , "девятьсот" ] ,
89
+ ] ;
90
+
91
+ let i = 0 ;
92
+
93
+ if ( ( workNuber % 100 > 10 ) && ( workNuber % 100 < 20 ) )
94
+ {
95
+ switch ( workNuber % 100 )
96
+ {
97
+ case 11 : result = "одинадцать" ; break ;
98
+ case 12 : result = "двенадцать" ; break ;
99
+ case 13 : result = "тринадцать" ; break ;
100
+ case 14 : result = "четырнадцать" ; break ;
101
+ case 15 : result = "пятнадцать" ; break ;
102
+ case 16 : result = "шестнадцать" ; break ;
103
+ case 17 : result = "семнадцать" ; break ;
104
+ case 18 : result = "восемнадцать" ; break ;
105
+ case 19 : result = "девятнадцать" ; break ;
106
+ }
107
+ workNuber = Math . floor ( workNuber / 100 ) ;
108
+ i = 2 ;
109
+ }
110
+
111
+ while ( workNuber != 0 )
112
+ {
113
+ let curDigit = workNuber % 10 ;
114
+
115
+ if ( curDigit != 0 )
116
+ result = textValues [ i ] [ curDigit ] + ( result . length > 0 ? " " : "" ) + result ;
117
+
118
+ workNuber = Math . floor ( workNuber / 10 ) ;
119
+ i ++ ;
120
+ }
121
+
122
+ result = sign + result ;
123
+ }
124
+
125
+ return ( result . length < maxLength ) ? result : n ;
126
+ }
127
+
128
+ // Стартовая форма закрыта
129
+ modalInputValues . on ( 'hidden.bs.modal' , Start ) ;
130
+
131
+ // Рестарт программы
132
+ document . querySelector ( '#btnRetry' ) . addEventListener ( 'click' , function ( ) {
133
+ modalInputValues . modal ( "show" ) ;
134
+ } ) ;
135
+
136
+ // Кнопка больше
137
+ document . querySelector ( '#btnOver' ) . addEventListener ( 'click' , function ( ) {
138
+ if ( gameRun ) {
139
+ if ( minValue === maxValue ) { // Игрок сжулничал и давал не правильные ответы
140
+
141
+ // Я так понимаю, надо было сделать установить значение answerPhrase через switch
142
+ // Например:
143
+ // switch (phraseRandom) {case 1: "фраза 1" break; case 2: "фраза 2" break; и т.д.}
144
+ // Но я так делать не буду. Кроме того как уметь использовать разничние конструкции,
145
+ // нужно еще, знать где их нужно использовать.
146
+ // Я использовать массив со строками, и работал с ним самым оптимальным способом.
147
+
148
+ const phraseRandom = Math . round ( Math . random ( ) * ( failAnswerPhrases . length - 1 ) ) ;
149
+ const answerPhrase = failAnswerPhrases [ phraseRandom ] ;
150
+ answerField . innerText = answerPhrase ;
151
+ gameRun = false ;
152
+ } else { //Продолжить поиск выше
153
+ minValue = answerNumber + 1 ;
154
+ answerNumber = Math . floor ( ( minValue + maxValue ) / 2 ) ;
155
+ orderNumberField . innerText = orderNumber ++ ;
156
+
157
+ const phraseRandom = Math . round ( Math . random ( ) * ( nextAnswerPhrases . length - 1 ) ) ;
158
+ answerField . innerText = `${ nextAnswerPhrases [ phraseRandom ] } ${ IntToText ( answerNumber ) } ?` ;
159
+ }
160
+ }
161
+ } ) ;
162
+
163
+ // Кнопка меньше
164
+ document . querySelector ( '#btnLess' ) . addEventListener ( 'click' , function ( ) {
165
+ if ( gameRun ) {
166
+ if ( minValue === maxValue ) { // Игрок сжулничал и давал не правильные ответы
167
+ const phraseRandom = Math . round ( Math . random ( ) * ( failAnswerPhrases . length - 1 ) ) ;
168
+ const answerPhrase = failAnswerPhrases [ phraseRandom ] ;
169
+ answerField . innerText = answerPhrase ;
170
+ gameRun = false ;
171
+ } else { //Продолжить поиск ниже
172
+ maxValue = answerNumber - 1 ;
173
+ answerNumber = Math . ceil ( ( minValue + maxValue ) / 2 ) ;
174
+ orderNumberField . innerText = orderNumber ++ ;
175
+
176
+ const phraseRandom = Math . round ( Math . random ( ) * ( nextAnswerPhrases . length - 1 ) ) ;
177
+ answerField . innerText = `${ nextAnswerPhrases [ phraseRandom ] } ${ IntToText ( answerNumber ) } ?` ;
178
+ }
179
+ }
180
+ } ) ;
181
+
182
+ // Кнопка Верно!
183
+ document . querySelector ( '#btnEqual' ) . addEventListener ( 'click' , function ( ) {
184
+ if ( gameRun ) {
185
+ const phraseRandom = Math . round ( Math . random ( ) * ( successAnswerPhrases . length - 1 ) ) ;
186
+ answerField . innerText = successAnswerPhrases [ phraseRandom ] ;
187
+
188
+ gameRun = false ;
189
+ }
190
+ } ) ;
191
+
192
+ // Открыть стартовую форму
193
+ modalInputValues . modal ( "show" ) ;
0 commit comments