С Новым годом! Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
 Аватар для zhibirc
651 / 236 / 77
Регистрация: 18.02.2013
Сообщений: 784

"Холодно - тепло" с компом

25.02.2013, 01:16. Показов 1354. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, пишу с виду простенькую игру в "тепло-холодно", числа в диапазоне от 0 до 100 включительно. Пояснения дал в коде, чтобы было удобнее.

Вопрос в том, что я на данный момент не знаю, как сделать так, чтобы перебор условий шел не только "вниз", но и "вверх". Допустим, комп "задумал" число 78. Я ввожу, скажем, 2 и у меня "холодно", я ввожу 33 - уже "теплее", 56 еще "теплее". Довольно естественно двигаться и дальше на увеличение, но если пользователь после этого по разным причинам введет, скажем, 20, программа вылетает. Оно понятно, идет проверка всех нижележащий условий и не находит совпадений... Как это побороть?

И второй вопрос, более общий. Как иначе можно реализовать требуемую задачу и есть ли более лаконичные, элегантные алгоритмы? Спасибо большое заранее.

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/* c_n (computer number) - число, "задуманное" компьютером
   u_n (user number) - число, вводимое пользователем
   в каждом while проверяется вхождение введенного пользователем числа в определенный диапазон относительно задуманного компом */
function gameColdWarm() {
// для сокращения кода забиваю используемые текстовые шаблоны в массив, потом к ним обращаюсь по индексу
var a = ['Очень холодно, я мерзну :( !', 'Прохладно, прохладно...', 'Уже теплее...', 'Довольно тепло, Вы где-то рядом!', 'Победа! Я таки задумал '],
    c_n = Math.round(Math.random() * 100),
    u_n = prompt('Ну что, какое у Вас число?', '');
if (u_n == '' || u_n < 0 || u_n > 100 || u_n == null) { alert('Я так не играю!'); }
else if (u_n != c_n) {
if (c_n > u_n) {
while (u_n >= 0 && u_n <= c_n/3) {
u_n = prompt(a[0], '');
if (u_n == c_n) { alert(a[4] + c_n + '!'); break; }
}
while (u_n > c_n/3 && u_n <= c_n/2) {
u_n = prompt(a[1], '');
if (u_n == c_n) { alert(a[4] + c_n + '!'); break; }
}
while (u_n > c_n/2 && u_n <= c_n/1.5) {
u_n = prompt(a[2], '');
if (u_n == c_n) { alert(a[4] + c_n + '!'); break; }
}
while (u_n > c_n/1.5 && u_n < c_n) {
u_n = prompt(a[3], '');
if (u_n == c_n) { alert(a[4] + c_n + '!'); break; }
} }
if (c_n < u_n) {
while (u_n <= 100 && u_n >= c_n*3) {
u_n = prompt(a[0], '');
if (u_n == c_n) { alert(a[4] + c_n + '!'); break; }
}
while (u_n < c_n*3 && u_n >= c_n*2) {
u_n = prompt(a[1], '');
if (u_n == c_n) { alert(a[4] + c_n + '!'); break; }
}
while (u_n < c_n*2 && u_n >= c_n*1.5) {
u_n = prompt(a[2], '');
if (u_n == c_n) { alert(a[4] + c_n + '!'); break; }
}
while (u_n < c_n*1.5 && u_n > c_n) {
u_n = prompt(a[3], '');
if (u_n == c_n) { alert(a[4] + c_n + '!'); break; }
} } }
else { alert(a[4] + c_n + '!'); }
}
Добавлено через 19 часов 30 минут
Загнал собственно саму проверку в while, теперь вроде в норме. Вот последний вариант. Если кому не лень оцените его корректность и предложите варианты улучшения (см. второй вопрос первого поста). Спасибо.

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
function gameColdWarm() {
var a = ['Очень холодно, я мерзну :( !', 'Прохладно, прохладно...', 'Уже теплее...', 'Довольно тепло, Вы где-то рядом!', 'Победа! Я таки задумал '],
    c_n = Math.round(Math.random() * 100),
    u_n = prompt('Ну что, какое у Вас число (0 - 100) ?', '');
if (u_n == '' || u_n < 0 || u_n > 100 || u_n == null) { alert('Я так не играю!'); }
else if (u_n != c_n) {
while (u_n != c_n) {
if (c_n > u_n) {
while (u_n >= 0 && u_n <= c_n/3) {
u_n = prompt(a[0], '');
if (u_n == c_n) { alert(a[4] + c_n + '!'); break; }
}
while (u_n > c_n/3 && u_n <= c_n/2) {
u_n = prompt(a[1], '');
if (u_n == c_n) { alert(a[4] + c_n + '!'); break; }
}
while (u_n > c_n/2 && u_n <= c_n/1.5) {
u_n = prompt(a[2], '');
if (u_n == c_n) { alert(a[4] + c_n + '!'); break; }
}
while (u_n > c_n/1.5 && u_n < c_n) {
u_n = prompt(a[3], '');
if (u_n == c_n) { alert(a[4] + c_n + '!'); break; }
} }
if (c_n < u_n) {
while (u_n <= 100 && u_n >= c_n*3) {
u_n = prompt(a[0], '');
if (u_n == c_n) { alert(a[4] + c_n + '!'); break; }
}
while (u_n < c_n*3 && u_n >= c_n*2) {
u_n = prompt(a[1], '');
if (u_n == c_n) { alert(a[4] + c_n + '!'); break; }
}
while (u_n < c_n*2 && u_n >= c_n*1.5) {
u_n = prompt(a[2], '');
if (u_n == c_n) { alert(a[4] + c_n + '!'); break; }
}
while (u_n < c_n*1.5 && u_n > c_n) {
u_n = prompt(a[3], '');
if (u_n == c_n) { alert(a[4] + c_n + '!'); break; }
} } } }
else { alert(a[4] + c_n + '!'); }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.02.2013, 01:16
Ответы с готовыми решениями:

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно"
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;,...

Ввести температуру в помещении. Вывести комментарий: жарко тепло прохладно и холодно. Шкала определяется самостоятельно
Написать программу с интерфейсом вести температуру в помещении. Вывести комментарий: жарко тепло прохладно и холодно. Шкала определяется...

Ввести температуру в помещении. Вывести комментарий: жарко тепло прохладно и холодно. Шкала определяется самостоятельно
Ввести температуру в помещении. Вывести комментарий: жарко тепло прохладно и холодно. Шкала определяется самостоятельно. Напишите программу.

5
Эксперт JSЭксперт HTML/CSS
2436 / 1115 / 312
Регистрация: 23.06.2011
Сообщений: 3,529
25.02.2013, 11:02
Использовать промпт, плохая идея, много повторяющихся кусков кода, тоже не фонтан, ввод не проверяется.
Цитата Сообщение от !i Посмотреть сообщение
предложите варианты улучшения
типа так
HTML5
1
2
3
4
5
6
7
8
9
10
<br><br><br><br><br>
<div style="text-align:center;">
Ну что, какое у Вас число?<br>
<input type="text" value="" name="num1" id="num1" style="width:200px; margin:5px 0;"><br>
<input type="button" value="Ход" id="num2" style="width:200px;"><br>
<input type="button" value="Новая игра" id="num3" style="width:200px; margin:5px 0;"><br>
<div id="vict1" style="height:35px;">&nbsp;</div>
<div id="mnb1">0</div>
 
</div>
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
(function(){
var Q, d;
Q={};
Q.cold1='Очень холодно, я мерзну <img src="data:image/gif;base64,'+smail()+'">';
Q.cold2='Прохладно, прохладно...';
Q.heat1='Уже теплее...';
Q.heat2='Довольно тепло, Вы где-то рядом!';
Q.vict='Победа! Я таки задумал ';
Q.noNo='Я так не играю!\nМожно только числа в диапазоне 0-100';
d=document;
 
onload=function(){
Q.val1=d.getElementById("num1");
Q.val1.onclick=function(){Q.val1.select();};
d.getElementById("num2").onclick=gameColdWarm;
d.getElementById("num3").onclick=newGame;
 };
 
function gameColdWarm(){
var un, s;
un=Q.val1.value;
if(/[^0-9]/.test(un)){cursor(); return;};
if(un==""||un>100){cursor(); return;};
if(un>=0&&un<=Q.cn30[0]){s=Q.cold1;};
if(un>Q.cn30[0]&&un<=Q.cn20[0]){s=Q.cold2;};
if(un>Q.cn20[0]&&un<=Q.cn15[0]){s=Q.heat1;};
if(un>Q.cn15[0]&&un<Q.cn){s=Q.heat2;};
if(un<=100&&un>=Q.cn30[1]){s=Q.cold1;};
if(un<Q.cn30[1]&&un>=Q.cn20[1]){s=Q.cold2;};
if(un<Q.cn20[1]&&un>=Q.cn15[1]){s=Q.heat1;};
if(un<Q.cn15[1]&&un>Q.cn){s=Q.heat2;};
if(un==Q.cn){s=Q.vict;};
 
d.getElementById("vict1").innerHTML=s;
 };
 
function newGame(){
Q.cn=Math.round(Math.random()*100);
Q.cn30=[parseInt(Q.cn/3), parseInt(Q.cn*3)];
Q.cn20=[parseInt(Q.cn/2), parseInt(Q.cn*2)];
Q.cn15=[parseInt(Q.cn/1.5), parseInt(Q.cn*1.5)];
d.getElementById("vict1").innerHTML="&nbsp;"
d.getElementById("mnb1").innerHTML=Q.cn+' '+Q.cn15+' '+Q.cn20+' '+Q.cn30;
 };
 
function cursor(){
alert(Q.noNo);
Q.val1.value="";
Q.val1.focus();
 };
 
function smail(){
return'R0lGODlhGgAgAPc/ADJaGlqaMsqaCnJaClJ6MvLSGhpqiiqawiKCotqiCjqy5KqCCtq6GtrSxTKq\
2SqSvBp6mkIyEiKKsv7y8ppyClKKMjKi0dKyEpqKaurKGmKqMnpqOhpyl8KSCjqq3mJKEqKaehJK\
YnJiMuLi2v7iIrqKCurCEv7+8v7aGmJSGuKyEmKiMlqSMtqqEjq66qqKElKCMjKaxuK6EiJ6nyqK\
syJymmpKCnpiOmKaMiKCslqKMtqyEvLKGv7+/iKCqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEA\
AAAh+QQJCgA/ACwAAAAAGgAgAAAI/wB/CBz4A4BBgggTJjRYoUKAgwojDgRAoAKAACsASJRIEUAF\
FiwAaNC4cSGBihczkixJsGPDiw9XshRI0SKOjDMVGtyZ02RDjDJzUqzIAkeAkT0Lnqzo8ChSljuj\
SuW5sSMBlxdFai1pFQAMj1lHPhwhcYLUCBEAoJWK4UTEBgNMoCgQ4cSJunfnykhgo0FEEAtQkKjb\
o0eEwncLmFBBAUREERdQoDhM2bBhvSU2RPyQQfDhwp8vm5Ah4IPAEAg/yCUxGa3rCJJNtBCQ4kcI\
A6gHQi4gmHUB1sAVX8gcgoMB3AMBdybBvDlzFKMThAghwQcE5AIbTN/Ovfv0Bw9oIHmYwSF3CAUK\
HHhwwN6CgwMh2Md3YCHGAwk5IJS33d5C/RgHwMeefAqsByANOcyAWgj2HQAeDRJIEIJ/FHq33WkS\
iOeDdTXUEAJ4Dzh4ngu5JWThdyBKOF1S1PmAX4Ql5hRCDTNAUGON+7HIQQ0Q1MABBD3GONOJEgUE\
ACH5BAUKAD8ALAAAAAAaACAAAAj/AH8IHCgQgEGCCBMmNFihQoCDCiMOBECgAoAAKwBIlEgRQAUW\
LABo0LhxIYGKFzOSLEmwY8OLD1eyLIgSR8aZCg3qxGmyIUaZOClWZIEjwEieP4RWdGj0KEudUKPu\
3NiRgMuLIrOWrAoAhkesIx+OkDghaoQIAM5GxXAiYoMBJlAUiHDiBF27cmUksNEgIogFKEjQ7dEj\
AmG7BUyooAAioogLKFAYnly4cN4SGyJ+yBDYMGHPlk3IEPBBYAiEmwNLPss6QmQTLQSk+BHCwOmB\
jwsEJiGXt+/EFzCH4GDA9sC/cUkoX64chegEIUJI8AHBuMAG0bNr3x79wQMaCGZwergdQoECDw7Q\
O7Dg4EAIBw7er4/xQEIOCONpw7fAP0aMA+7BB1956P1HQw4znBbCfwfUR4MEEoTA34TcZWdaDhIg\
4AOCM9QQgncPNFieC7clVGF3IEYYHVIh+DAdhhEiRRsEM8wAAQIQ4FciTiHUwAEEPtKYH4sVRhQQ\
ADs=';
 };
 
 })();
Добавлено через 27 минут
Результатов: примерно 6 600, ну что тут скажешь
1
 Аватар для Зверушь
461 / 369 / 94
Регистрация: 01.05.2010
Сообщений: 1,761
25.02.2013, 11:22
!i, у вас, если ввести в промпт текст программа виснет намертво. Нужно организовать более лучшую защиту от дурака. Кроме того много повторяющихся циклов... можно сделать проще:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function gameColdWarm() {
    var a = ['Очень холодно, я мерзну :( !', 'Прохладно, прохладно...', 'Уже теплее...', 'Довольно тепло, Вы где-то рядом!', 'Победа! Я таки задумал '];
    var c_n = Math.round(Math.random() * 100);
    var u_n = prompt('Ну что, какое у Вас число (0 - 100) ?');
    while (u_n != c_n) {
        if (u_n.match(/[^0-9]+/g) || u_n < 0 || u_n > 100) {
            return alert('Я так не играю!');
        }
        if (u_n >= 0 && u_n <= c_n/3) {
            u_n = prompt(a[0]);
        } else if (u_n > c_n/3 && u_n <= c_n/2) {
            u_n = prompt(a[1]);
        } else if (u_n > c_n/2 && u_n <= c_n/1.5) {
            u_n = prompt(a[2]);
        } else if (u_n > c_n/1.5 && u_n < c_n) {
            u_n = prompt(a[3]);
        } else if (u_n <= 100 && u_n >= c_n*3) {
            u_n = prompt(a[0]);
        } else if (u_n < c_n*3 && u_n >= c_n*2) {
            u_n = prompt(a[1]);
        } else if (u_n < c_n*2 && u_n >= c_n*1.5) {
            u_n = prompt(a[2]);
        } else if (u_n < c_n*1.5 && u_n > c_n) {
            u_n = prompt(a[3]);
        }
    }
    return alert(a[4]);
}
1
 Аватар для zhibirc
651 / 236 / 77
Регистрация: 18.02.2013
Сообщений: 784
25.02.2013, 19:25  [ТС]
Ребята, спасибо огромное, много полезного для себя вынес!

Зверушь, действительно, вот эти проверки у меня лишние:
JavaScript
1
2
3
if (u_n == c_n)
if (c_n > u_n)
if (c_n < u_n)
Добавлено через 1 минуту
Цитата Сообщение от newJS Посмотреть сообщение
Использовать промпт, плохая идея
Объясните пожалуйста, чем по-Вашему плоха идея использовать prompt?
0
Эксперт JSЭксперт HTML/CSS
2436 / 1115 / 312
Регистрация: 23.06.2011
Сообщений: 3,529
25.02.2013, 20:42
Цитата Сообщение от !i Посмотреть сообщение
чем по-Вашему плоха идея использовать prompt?
Неудобно, закрывает страницу, им вообще не пользуются, ни разу не встречал.
Поле удобней. ИМХО.

JavaScript
1
u_n = prompt(a[0]);
что тут нет проверки ввода, уже сказал, забыл сказать, что нет возможности нормально выйти из игры, только браузер закрывать.



Цитата Сообщение от Зверушь Посмотреть сообщение
если ввести в промпт текст программа виснет намертво.
У меня только в осле повисло и ошибку кинуло.
1
 Аватар для Зверушь
461 / 369 / 94
Регистрация: 01.05.2010
Сообщений: 1,761
26.02.2013, 09:59
Цитата Сообщение от newJS Посмотреть сообщение
У меня только в осле повисло и ошибку кинуло.
Хм... у меня в FF висело...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.02.2013, 09:59
Помогаю со студенческими работами здесь

Задание написать скрипт: который при введении температуры. Будет выводить: жарко, тепло, холодно и мороз
Задание написать скрипт: который при введении температуры. Будет выводить: жарко, тепло, холодно и мороз.

Задание - игра наподобие "Тепло или холодно"
Прошу помощи. Нужно сделать игру на подобии &quot;Тепло или холодно&quot;. Чтобы игроку со старта присвоились рандомные координаты и при...

Имеются описания: Сезон = (зима, весна, лето, осень) Погода = (тепло, холодно) По сезону ответить какова погода Delphi
Имеются описания: Сезон = (зима, весна, лето, осень) Погода = (тепло, холодно) По сезону ответить какова погода Delphi

Почему в космосе холодно?
Решил вот тоже задать глупый вопрос :) итак, почему же в космосе холодно? ведь если рассуждать поверхностно, то что есть температура? это...

Игра горячо-холодно
нужно написать программу- игру горячо холодно вот мой код, я вижу ошибку, но не знаю как исправить переменной b присваивается...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru