Опубликован: 09.12.2017 | Доступ: свободный | Студентов: 737 / 31 | Длительность: 02:06:00
Специальности: Программист
Лекция 4:

Игра "Отгадай задуманное число"

< Лекция 1 || Лекция 4: 12
Аннотация: Игра "Задумай число" В этом уроке мы переходим от изучения полезных, но скучных тем, таких как нахождение максимума и минимума, к играм. Вначале все слушатели играют в игру "Задумай число" и становятся "магистрами этой игры". Затем идет подробный анализ проекта, реализующего эту игру.

Урок начинается с разбора домашнего задания, выполненного школьником, на тему "вычисление суммы и произведения элементов массива при заданных ограничениях на элементы". Выполненная работа отвечает всем правилам, о которых шла речь на прошлых занятиях. Переменные нужным образом объявлялись, правильно были проинициализированы. В операторе if фильтр позволял отобрать нужные элементы для вычисления суммы и произведения.

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

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

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

Рассмотрим игру "Отгадай задуманное число" и поиграем в нее. Практически все, кто сыграл в эту игру с компьютером, отгадали задуманное число, получив звание "Магистра игры".

Интерфейс игры "Отгадай задуманное число"

Интерфейс игры показан на рис. 4.1. рис. 4.1

Интерфейс игры "Задумай число"

Рис. 4.1. Интерфейс игры "Задумай число"

Кажется, что спроектированный интерфейс интуитивно понятен. Пользователь может задать уровень игры в соответствующем окне. Кнопка "Новая игра" позволяет очистить окна и перейти к новой игре. Кнопка "Компьютер, задумай число" позволяет начать игру. В зависимости от выбранного уровня игры компьютер выбирает некоторым образом интервал [min, max] и задумывает число в этом интервале. Сообщения о результатах этой работы появляются в соответствующих окошках. После этого пользователь может приступить к отгадыванию задуманного числа, задавая вопросы с помощью кнопок: "Число больше", "Число меньше", "Число равно". Ответы на его вопросы появляются в окне элемента управления ListBox "Вопросы и ответы". Когда пользователь отгадает число, то его результат отображается в окне "Результат". При успехе он получает звание "Магистра игры.

Вот как выглядит интерфейс в процессе игры:

Интерфейс проекта в процессе игры

Рис. 4.2. Интерфейс проекта в процессе игры

Генератор случайных чисел

Одна из задач, которую приходится решать в этом проекте, - это генерирование случайных чисел. Числа, которые задумывает компьютер, - это случайные числа.

Для генерирования случайных чисел в библиотеке классов FCL (Framework Class Library), доступной в проектах на C#, есть специальный класс Random, методы которого позволяют генерировать равномерно распределенные случайные числа. Фактически, эти числа нельзя назвать случайными, поскольку они генерируются по определенному алгоритму. Такие числа называют псевдослучайными. Тем не менее генерируемая последовательность чисел отвечает критериям, действующих для "настоящих" случайных чисел.

Чтобы получить случайное число или последовательность таких чисел, как всегда, нужно объявить переменную класса Random. Одного объявления недостаточно, эту переменную (объект) нужно еще и создать, вызвав конструктор объектов класса Random.

Конструктору можно передать целочисленный параметр, например, так:

Random rnd1 = new Random(100);

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

Можно, как обычно делается, параметр конструктору не передавать:

Random rnd = new Random();

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

У класса Random есть несколько полезных методов. Метод Next, вызываемый переменной класса Random, позволяет получить следующее равномерно распределенное случайное число типа int в заданном интервале [min, max]:

int random_number = rnd.Next(min, max);

Метод NextDouble позволяет получить очередное равномерно распределенное случайное число типа double в интервале [0, 1]:

double drn = rnd.NextDouble();

Если необходимо получать вещественные числа в заданном интервале [min, max], то полученное число несложно привести к нужному интервалу следующими операциями:

drn = drn * (max – min) + min;
< Лекция 1 || Лекция 4: 12