Контрольное задание по главе «Основы языка C#». Игра «Угадай число»

Итак, в части «Основы языка C#» мы познакомились с основными конструкциями языка, научились использовать массивы, циклы и логические операции, поэтому можем попробовать свои силы в разработке простенькой консольной игры под названием «Угадай число». Правила игра следующие: программа «загадывает» целое число от 0 до 10, ваша задача — угадать это число с четырех попыток. После каждой неудачно попытки программа дает подсказки: «Больше», если загаданное число больше того, которое указали вы и, соответственно, «Меньше», если загаданное число меньше указанного вами.

Прежде, чем заглянуть в исходный код, представленный ниже, попробуйте самостоятельно написать приложение, используя те знания, которые вы получили в этой части учебника.

Игра «Угадай число» на C#

Итак, попробуем определиться с алгоритмом игры. По правилам игры нам дается четыре попытки угадать число. Переводя эту часть правил на язык программирования, можно сказать, что у нас есть максимум четыре итерации цикла, чтобы угадать число. В цикле нам необходимо выполнить следующие действия:

  1. попросить игрока ввести число от 0 до 10.
  2. обработать ввод- перевести строку в число, проверить, что оно не меньше нуля и не больше 10 и, при необходимости, попросить игрока повторить ввод.
  3. сравнить введенное число с загаданным и выполнить один из трех сценариев игры:
    1. сообщить, что пользователь угадал число и прервать цикл (смысла дальше просить игрока угадывать число — нет)
    2. выдать подсказку «Больше»
    3. выдать подсказку «Меньше»
  4. если игрок истратил все попытки, то сообщить ему, что число не было угадано
  5. сообщить игроку, что игра окончена.

Реализуем этот алгоритм в виде консольного приложения на C#. Создадим новый консольный проект C# с названием «GuessTheNumber» и напишем следующий код:

int number = 5; //число, которое загадываем

for (int i = 1; i < 5; i++)
{
    Console.Write($"Попытка {i}. Угадай число: ");
    int n = Convert.ToInt32(Console.ReadLine());

    while ((n < 0) || (n > 10))
    {
        Console.WriteLine("Вводите числа не меньше 0 и не больше 10");
        Console.Write("Введите число ");
        n = Convert.ToInt32(Console.ReadLine());
    }

    bool notGuess = n != number;

    if (notGuess)
    {
        if (i == 4)
        {
            Console.WriteLine($"Вы проиграли. Было загадано число {number}");
            break;
        }
    }
    else
    {
        Console.WriteLine("Поздравляю! Вы победили!");
        break;
    }


    if (n < number)
    {
        Console.WriteLine("Больше");
    }
    else
    {
        Console.WriteLine("Меньше");
    }
}
Console.WriteLine("GAME OVER");

Разберем этот код подробно. Итак, число, которое загадывает программа хранится в переменной number:

int number = 5; //число, которое загадываем

Конечно, интереснее было бы, если бы программа сама выбирала число в диапазоне от 0 до 10 без нашего ведома и мы этот момент в конце решения исправим. Пока же, в целях отладки приложения, оставим переменную как есть.

Далее, мы запускаем цикл for в котором каждая итерация цикла — это очередная попытка угадать число — всего таких попыток (итераций) будет 4:

for (int i = 1; i < 5; i++)
{
    //тут код очередной попытки угадать число
}

Так как мы точно знаем количество попыток, то цикл for нам хорошо подходит и, более того, используя его счётчик, мы можем сразу же информировать пользователя о номере попытки, не задействую при этом никаких дополнительных переменных.

Console.Write($"Попытка {i}. Угадай число: ");

Число, которое вводит пользователь, сохраняется в переменной n. После того, как пользователь вводит число — мы его считываем:

Console.Write($"Попытка {i}. Угадай число: "); //тут пользователь должен ввести число
n = Convert.ToInt32(Console.ReadLine());//тут мы переводим пользовательский ввод из строки в целое число

и запускаем внутренний цикл while, в котором проверяем — допустимое ли число вводит пользователь. Для этого цикл содержит условие:

(n < 0) || (n > 10)

то есть, наш внутренний цикл while будет повторяться до тех пор, пока пользователь не введет число больше либо равное нулю и меньше либо равное 10. Если же пользователь сразу задает допустимое число, то цикл не запускается.

Далее мы проверяем — угадал ли пользователь число:

bool notGuess = n != number;

переменная notGuess будет содержать значение true, если пользователь не угадал число. Если пользователь не угадал число, то к нас появляется два варианта дальнейших действий:

первый вариант — цикл находится на последней итерации (у пользователя больше нет попыток). В этом случае, мы должны сообщить пользователю о том, что он проиграл и не выполнять больше никаких действий. Этот вариант реализуется вот в этой части кода:

if (i == 4)
{
    Console.WriteLine($"Вы проиграли. Было загадано число {number}");
    break;
}

мы прерываем цикл и выходим из него.

Второй вариант — попытки угадать число ещё не исчерпаны и мы должны дать пользователю подсказку. Этот вариант реализуется вот в этих условных операторах:

if (n < number)
{
    Console.WriteLine("Больше");
}
else
{
    Console.WriteLine("Меньше");
}

если пользователь угадал число, то есть переменная notGuess равна false, то мы поздравляем его с победой и также выходим из цикла:

Console.WriteLine("Поздравляю! Вы победили!");
break;

Ну и, раз мы выходим из цикла, то и игра закончена о чем мы и сообщаем пользователю:

Console.WriteLine("GAME OVER");

Проверим работу программы. Ниже на рисунке показан вывод в консоли при трех неудачных попытках и ошибке ввода значений:Игра "Угадай число" на C#

Пользователь не смог угадать число:

Игра "Угадай число" на C#

Теперь, как было сказано выше, добавим в нашу игру «элемент неожиданности» — пусть программа сама загадывает случайное число. Здесь мы забежим вперед, так как работу по генерации случайных чисел мы ещё будем рассматривать подробнее в части «Шифрование, цифровые подписи и хэш-алгоритмы в .NET», поэтому придется принять на веру, что следующий код будет генерировать случайное число в диапазоне от 0 до 10 и оно будет присваиваться переменной number:

int number = Random.Shared.Next(0, 10); //число, которое загадываем

Теперь можно запустить снова приложение и убедиться, что программа генерирует случайные числа.

Итого

Итак, в этой работе мы применили наши знания по основам C# и написали путь небольшое, но вполне рабочее приложение — игру «Угадай число». Игра вполне рабочая, однако нам ещё есть куда стремиться в её улучшении, поэтому не удаляйте этот код — мы к нему ещё вернемся в следующих главах учебника.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии