ITI0011RUS:task 04
Срок сдачи упражнения 6-е занятие (24-е февраля).
Общая информация об упражнениях: ITI0011RUS_Practice.
Обратно на страницу предмета.
Описание
Вам предстоит написать игру, которая просит пользователя угадать число. Игра проходит таким образом, что компьютер "загадывает" случайное число в интервале [10..99] (9 и 100 уже не подходят). Игрок начинает угадывать это число. Для этого программа просит пользоваетля ввести число, которое должно быть числом в допустимом диапазоне. Верные попытки угадать число (в случае корректного ввода) суммируются. Программа сообщает пользователю, его число больше, либо меньше загаданного. Когда число угадано, программа завершает работу.
В этот раз вам предстоит реализовать несколько методов. Ниже находится описание того, какой функционал где следует реализовать:
generateRandomNumber()
Этот метод должен генерировать число в допустимом диапазоне [10..99] и сохранять его в переменной класса (для того, чтобы позже это значение можно было бы прочитать из другого метода/функции).
guess()
Здесь происходит основной процесс игры. Шаги, которые следует выполнить:
- программа просит пользователя ввести число
- программа проверяет пользовательский ввод (чтобы введенное значение было числом в допустимом диапазоне)
- в случае неверного ввода пользователю выводится соответствующее сообщение об ошибке.
- в случае корректного ввода функцией
evaluate(int)
осуществляется проверка угадал ли пользователь число. - если пользователь угадал число функция, возвращает true:
return true;
. - если пользователь не угадал число, программа дает подсказку, "загаданное" число больше/меньше того, что предложил пользователь
- в случае угадывания, все предложенные пользователем корректные варианты чисел складываются (если пользователь введет число 107, то это число не учитывается, поскольку не является корректным вводом - ввод является числом, но выходит за рамки допустимого диапазона значений)
Важно:
- функция должна считывать только одну строку из потока ввода. Если ввод неверный, функция прекращает работу и в методе main эта функция вызывается снова (эта часть в предложенном вам шаблоне кода уже присутствует).
- ввод следует проверять (не число, некорректный ввод не учитывается)
- функция возвращает значение true лишь если пользователь верно угадал число. Во всех остальных случаях пользователю выводится либо подсказка, либо сообщение об ошибке и возвращается значение false
- Все попытки пользователя подсчитываются.
evaluate(int)
В качестве параметра принимает пользовательский ввод (число, предложенное пользователем) и сравнивает его с тем числом, которое "загадала" программа. В случае если число, предложенное пользователем, верно (число == "загаданное" число), функция возвращает 0. Если число, предложенное пользователем, больше чем "загаданное" число (число > "загаданное" число), функция возвращает значение -1. Во всех остальных случаях возвращаемое значение 1.
getCount()
Возвращает количество совершенных попыток (считаются только попытки в случае корректного ввода). Программа должна хранить это значение в какой-либо переменной и увеличивать на единицу с каждой последующей верной попыткой отгадать число.
Шаблон
Внимание, в этот раз вам задана в шаблоне также функция main
. Важно, чтобы все методы делали в точности то, что требуется. Реализованный в шаблоне метод main
верно работает когда все остальные части программы правильно реализованы.
<source lang="java"> /**
* Home assignment 04.
*
* Guessing game. *
* Computer thinks of a number. Human has to guess the number. * Every time the human guesses a number, computer lets her know * whether the actual numbers is smaller, greater or equal to the * guessed number. The program counts valid guesses made by the human. *
* Read more: https://courses.cs.ttu.ee/pages/ITI0011:harjutus_04 */ public class Task04 { /** * The main method, which is the entry point of the program. * !!IMPORTANT!! You have to keep the main method in order * to get your solution tested. *
* For this assignment, the main method implementation is * provided. If you want, you can modify it. But remember * that your code will be tested automatically. All the other * methods should do exactly what is required. Otherwise, if you * will have the main loop inside another method, the tester * might break. * @param args Arguments from the command line */ public static void main(String[] args) { // First, the computer "thinks" of a number generateRandomNumber(); // if you want, you can print out the generated number here while (true) { // what? we have an endless loop here... // this loop would never stop as the condition is always true // ... // not to worry, we can break out from this loop // let the user guess a number boolean result = guess(); if (result) { // if the result was true, we can end the "game". System.out.println("Correct! Number of guesses:" + getCount()); // breaks out from the while(true) loop break; } // if result is false, then the user did not guess the actual number // therefore we will just continue with our endless loop. } } /** * Generates a random number and stores it internally. */ public static void generateRandomNumber() { // generate a random number and store it in the class variable } /** * This method should ask user the the input (guess a number), * read one line and return. If the guessed number is correct, * the method should return true, otherwise return false. *
* Implement the following steps: *
-
*
- ask user to enter a number *
- validate the input *
- if the input is not correct, return false * (we will ask again next time we come to this method from main loop) *
- if the input is correct, evaluate the guessed number * using evaluate(int) method. *
- print out the hint for the user depending on the evaluate result * (actual number is bigger or smaller). *
- you should count the correct guesses. So, if the input * was correct, you should increment the counter. *
*
* Remember: *
-
*
- read only one line within this method *
- validate the input *
- return true only if the guessed value was correct, * otherwise print out the hint and return false. *
- count correct guesses *
* @return True, if the guessed value was correct, false otherwise. */ public static boolean guess() { return false; } /** * Compares guessed number with the actual number. * @param guess Guessed number * @return 0 if the guessed number and the actual number are equal, * 1 if the actual number is greater than the guessed number, * -1 if the actual number is smaller than the guessed number. */ public static int evaluate(int guess) { return -100; }
/** * Returns the number of guesses made. * You have to store internally the number * of guesses made. Note, that only correct * guesses (check the requirements from the web) * are counted. * @return Number of guesses. */ public static int getCount() { return 0; }
} </source>