Skip to content

Commit d2a32c1

Browse files
committed
update script SkillfactoryCoding#8 fix maxValue input parsing on 0
1 parent 22f40dd commit d2a32c1

File tree

2 files changed

+195
-1
lines changed

2 files changed

+195
-1
lines changed

bjs/08_if_else/script.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ let firstRun = true;
4242
function Start()
4343
{
4444
minValue = parseInt(minValueField.value) || 0;
45-
maxValue = parseInt(maxValueField.value) || 100;
45+
maxValue = parseInt(maxValueField.value) !== 0 ? 0 : parseInt(maxValueField.value) || 100;
46+
4647

4748
if (minValue > maxValue)
4849
{

script.js

Lines changed: 193 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,193 @@
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

Comments
 (0)