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