ITI0011RUS:task 04

Allikas: Kursused
Mine navigeerimisribale Mine otsikasti

Срок сдачи упражнения 6-е занятие (24-е февраля).

Общая информация об упражнениях: ITI0011RUS_Practice.
Обратно на страницу предмета.

Описание

Вам предстоит написать игру, которая просит пользователя угадать число. Игра проходит таким образом, что компьютер "загадывает" случайное число в интервале [10..99] (9 и 100 уже не подходят). Игрок начинает угадывать это число. Для этого программа просит пользоваетля ввести число, которое должно быть числом в допустимом диапазоне. Верные попытки угадать число (в случае корректного ввода) суммируются. Программа сообщает пользователю, его число больше, либо меньше загаданного. Когда число угадано, программа завершает работу.

В этот раз вам предстоит реализовать несколько методов. Ниже находится описание того, какой функционал где следует реализовать:

generateRandomNumber()

Этот метод должен генерировать число в допустимом диапазоне [10..99] и сохранять его в переменной класса (для того, чтобы позже это значение можно было бы прочитать из другого метода/функции).

guess()

Здесь происходит основной процесс игры. Шаги, которые следует выполнить:

  1. программа просит пользователя ввести число
  2. программа проверяет пользовательский ввод (чтобы введенное значение было числом в допустимом диапазоне)
  3. в случае неверного ввода пользователю выводится соответствующее сообщение об ошибке.
  4. в случае корректного ввода функцией evaluate(int) осуществляется проверка угадал ли пользователь число.
  5. если пользователь угадал число функция, возвращает true: return true;.
  6. если пользователь не угадал число, программа дает подсказку, "загаданное" число больше/меньше того, что предложил пользователь
  7. в случае угадывания, все предложенные пользователем корректные варианты чисел складываются (если пользователь введет число 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: *

    *
  1. ask user to enter a number *
  2. validate the input *
  3. if the input is not correct, return false * (we will ask again next time we come to this method from main loop) *
  4. if the input is correct, evaluate the guessed number * using evaluate(int) method. *
  5. print out the hint for the user depending on the evaluate result * (actual number is bigger or smaller). *
  6. 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>