Угадайка, год спустя.
by LuckyCat
HTML
Напиши программу, которая загадывает целое число до 50, и просит пользователя число отгадать. Каждый раз, когда пользовател вводит число, которое ближе к ответу, чем предыдущее предположение пользователя, программа выдает prompt для следующего числа с сообщением "теплее", если новое предположение отдаляется от задуманного числа, программа выводит prompt с сообщением "холоднее". После отгадывания числа программа с помощью alert показывает количество попыток, за сколько было угадано число. Максимальное число попыток: 10 (должно быть настраиваемым). После этого игра считается проиграной, о чем сообщается в alert окошке.<pre>
Пример работы (мои комментарии идут за //):
загаданное число: 34
программа: Я загадала число. Угадывай, пользователь
пользователь: 20
программа: теплее
пользователь: 10
программа: холоднее
пользователь: 15
программа: теплее
пользователь: 35
программа: теплее // (потому что 35 ближе к 34, чем 15)
пользователь: 45
программа: холоднее
пользователь: 34
программа: угадал, хитрец, за 6 попыток.
</pre>
JavaScript
var robotNumber = 1 + Math.floor( Math.random() * (50+1-1) );
console.log("Робот загадал: " + robotNumber);
var MAX_GUESSES = 10; // максимальное допустимое число попыток.
var userInput; // число, которое ввел
var userNumber; // число пользователя
var userAttemsAll = 0; // количество всех попыток, которые уже сделал юзер
var userAttems = MAX_GUESSES; // для уведомления
var userWin = false; // если выиграл
var userLosing = false; // если проиграл
var userSurrends = false; // если сдался
var promptText = "Я загадала число. Угадывай. Введи число от 1 до 50:";
var currentDifference = 0;
var prevDifference = 0;
function declOfNum(number, titles)
{
cases = [2, 0, 1, 1, 1, 2];
return titles[ (number%100>4 && number%100<20)? 2 : cases[(number%10<5)?number%10:5] ];
}
//userInput = prompt(promptText, 1);
//userNumber = parseInt(userInput, 10);
//if (isNaN(userNumber))
// alert('Вводить надо было цифрами');
//else
// console.log("все окей");
for (var counterStep = 1; counterStep <= MAX_GUESSES; counterStep += 1) {
// первая попытка ввода
userInput = prompt(promptText, '');
userNumber = parseInt(userInput, 10);
// если нажал Cancel
if (userInput === null || userInput === false) {
userSurrends = true;
break;
}
if (isNaN(userNumber))
alert('Вводить надо было цифрами');
else
console.log("все окей");
currentDifference = Math.abs(robotNumber - userInput);
// считаем попытки
userAttemsAll = counterStep;
// console.log(userAttems);
// если разницы нету, то победа пользователя
if (currentDifference === 0) {
userWin = true;
break;
}
// последующие попытки ввода
if (currentDifference <= prevDifference) {
alert("Теплее");
}
else if (currentDifference >= prevDifference) {
alert("Холоднее");
}
prevDifference = currentDifference;
userAttems -= 1;
promptText = 'У...