2 Проектирование программы
Для реализации игры будет использован процедурно- эмпирический стиль программирования, при этом состояния приложения будут хранится в глобальных переменных, а результаты игроков в бинарном файле.
В программе должны быть предусмотрено следующее:
функция инициализации и регистрации класса главного окна;
функция создания и отображения главного окна;
функция создания и отображения списка в окне;
обработчик главного окна;
обработчик окна создания игры;
обработчик окна рекордов;
обработчик окна ввода имени для записи рекорда;
обработчик окна настроек;
функция установки параметров контекста воспроизведения OpenGL;
функция создания игры;
функция добавления новых шаров на поле;
функция проверки установки нового рекорда;
функция передвижения шара;
функция проверки наличия выстроенной линии шаров одного цвета;
функция определения возможности передвижения шара из начальной точки в конечную;
функция задания шрифта текста;
функция удаление заданного шрифта текста;
функция пересчета размеров окна;
функция отрисовки окна;
функция рисования шара в заданной ячейке;
функция вывода текста в шапку игрового поля.
Необходимо разработать в программе меню для начала новой игры, просмотра рекордов и изменения настроек. Меню окна должно выглядеть так как показано на рисунке 2.1.
Рисунок 2.1 – Прототип меню игровой программы
Игровое поле будет представлять собой рабочую область определенного размера, разделенного на строки и столбцы линиями. Сверху этой области будет находится «шапка» размером с одну строку в которой будут отображаться лучший результат за все время – рекорд, текущее значение очков которое на данный момент набрал пользователь, три цветных шара – следующие шары которые появятся на поле.
Реализация игрового поля в программе с шарами на нем могла бы выглядеть следующим образом (рисунок 2.2).
Рисунок 2.2 – Прототип игрового поля игровой программы
Для лучшего визуального восприятия при выборе шара на поле его фон должен выделятся цветом следующим образом (рисунок 2.3).
Рисунок 2.3 – Пример выделения шара на игровом поле
Алгоритм (рисунок 2.4) представляет собой вход в программу, после которого пользователю доступно игровое поле с шарами на нём. После перемещения шара пользователем, программа проверяет была ли собрана линия шаров одного цвета. В этом случае линия уничтожается и пользователю дается еще один ход. Если линия не была собрана, проверяется остались ли свободные клетки для добавления новых шаров. Если таковые имеются – шары добавляются, в противном случае игра прекращается.
Рисунок 2.4 – Обобщённая схема алгоритма работы игровой программы
3 Реализация программы
Интерфейс пользователя имеет главное меню вверху окна. Он содержит такие пункты как:
новая игра;
рекорды;
настройки.
Скриншот главного меню представлен на рисунке 3.1.
Рисунок 3.1 – Главное меню игровой программы
При выборе пункта «Новая игра» появляется модальное окно, в котором пользователю предлагается выбрать размер поля. Данной окно представлено на рисунке 3.2.
Рисунок 3.2 – Модальное окно «Новая игра»
При выборе пункта «Рекорды» появляется модальное окно, в котором отображаются лучшие 10 результатов за все игры. Данной окно представлено на рисунке 3.3.
Рисунок 3.3 – Модальное окно «Рекорды»
При выборе пункта «Настройки» появляется модальное окно, в котором можно включить или отключить звук, выбрать значение размера поля и длины уничтожаемой линии из предложенных. Данной окно представлено на рисунке 3.4.
Рисунок 3.4 – Модальное окно «Настройки»
Игровое поле (рисунок 3.5), на котором размещены шары, отображены значения лучшего результата и очков, набранных игроком за данную игру, а также три шара которые появятся следующими.
Рисунок 3.5 – Игровое поле
При наборе игроком достаточного количества очков для попадания в таблицу рекордов по окончанию игры для него выводится модальное окно, в которое необходимо ввести имя (рисунок 3.6).
Рисунок 3.6 – Окно ввода имени рекордсмена
В программе предусмотрены следующие функции:
InitClass – инициализация и регистрация класса;
InitInstance – создание и отображение главного окна;
ListView – создание и отображение списка в окне;
WndProc – обработчик главного окна;
NewGame – обработчик окна создания игры;
Records – обработчик окна рекордов;
RecordName – обработчик окна ввода имени для записи рекорда;
Settings – обработчик окна настроек;
SetWindowPixelFormat – установка параметров контекста воспроизведения OpenGL;
CreateGame – создание игры;
AddNextBall – добавление новых шаров на поле;
CheckRecord – проверка установки нового рекорда;
MoveBall – функция передвижения шара;
IsLinedUp – проверка собрана ли линия шаров одного цвета;
IsAvailable – проверка возможности передвижения шара из начальной точки в конечную;
SetFont – задание шрифта текста;
KillFont – удаление шрифта текста;
Resize – пересчет размеров окна;
Render – отрисовка окна;
DrawBall – рисование шара в заданной ячейке;
DrawString – вывод текста;