Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пояснительная записка к курсовой работе.doc
Скачиваний:
4
Добавлен:
11.09.2019
Размер:
574.46 Кб
Скачать

4.2 Реализация графической части приложения

В приложении используются, кроме кнопок-ячеек, следующие компоненты:

- таймер с интервалом в 1 секунду – для подсчета продолжительности игры;

- счётчик не помеченых «мин».

- стандартное меню – для начала новой игры, настройки игры, просмотра статистики, выхода;

Размер основного окна строго зависит от количества клеток-ячеек, поэтому во время игры изменить его размеры окна невозможно. В нижней области окна располагается находится таймер и счётчик не помеченых «мин». Для избежания ежесекундной перерисовки экрана из-за перерисовки чисел таймера, решено поместить счетчик «мин» и таймер в отдельный обьект (GroupBox), в котором перерисовка будет выполняться отдельно от всей игровой области.

Для отображения статистики игры и для настройки сложности, а также для запроса на сохранения и загрузки игры были созданы ресурсы типа Dialog.

В любой момент игры игрок может отменить сделанный им ход, это возможно в том случае если до этого было изменено состояние поля(открыта хотя бы одна ячейка), ход будет отменен при нажатии клавиши Backspace. Если же до нажатия клавиши Backspace не было произведено ни единого хода то игровое окно просто перерисуется, не меняя своего состояния. В игре можно будет вернуться только на три хода. При нажатии клавиши Backspace(в том случае если список состояния ходов не будет пуст) запустится функция DestroyButtField(), из последней записанной ячейки списка будут извлечены все данные о состоянии игрового поля, его размеры и количество непомеченных «мин». После извлеченные данные присвоятся глобальным переменным отвечающим за параметры игрового поля. По новым значением будет перестроено игровое поле.

Далее будут приведены прототипы используемых функций из модуля functions.h и их описания:

void DestroyButtField() – функция удаления всего поля-кнопок

void new_game() – новая игра. Предусматривает установку флага таймера в значение 0, флага завершения игры в значение false, вызов функции DestroyButtField(), удаляющую все ячейки-кнопки. После создаётся область GroupBox и для его устанавливается адрес оконной процедуры. Далее идет создание кнопок, являющихся игровыми клетками-ячейками, для них также устанавливается адрес оконной процедуры. Затем вызывается функция create_field(), описанная выше, отвечающая за информационную часть игрового процесса. Значению таймера при этом присваивается 0, до совершения игроком первого хода.

void OpenNULLButt(int I, int J) – рекурсивное открытие области ячеек, в смежных с которыми «мин». Остановка рекурсии происходит в том случае, когда происходит открытие кнопки с некоторым числом от 1 до 8. I , J – координаты кнопки в матрице.

void OpenALLBomb() – открытие всех «мин». Вызывается автоматически в случае проигрыша.

int OpenButtField(int wmID) – открытие ячейки, вызывается при нажатии на кнопку. При этом если это первое нажатие мыши то автоматически запускается таймер. В случае открытия ячейки с числом, символизирующим некоторое количество «мин» в смежных с данной клеткой ячейках, на эту кнопку помещается картинка с соответствующим числом. Если открывается ячейка с числом 0, то вызывается функция openNULLButt(int I, int J), описанная ранее. При этом состояние поля, а также количество непомеченных мин заносится в ячейку списка. Когда открывается ячейка с «миной», происходит открытие всех «мин» с помощью функции OpenALLBomb() и выводится сообщение о проигрыше.

Программирование с использованием WinAPI – событийное программирование. Процедура обработки сообщений, посылаемых главному окну программы извне и от дочерних окон осуществляет процедура WndProc, в которой и реализован весь интерфейс программы и организовано взаимодействие пользователя с программой.

Оконные процедуры, описаные в модуле saper:

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM) – окнная процедура главного окна.

INT_PTR CALLBACK Difficulty(HWND, UINT, WPARAM, LPARAM) – оконная процедура для окна-диалога «Сложность».

INT_PTR CALLBACK SaveGameDlg(HWND, UINT, WPARAM, LPARAM) – оконная процедура для окна-диалога «Сохранение игры».

INT_PTR CALLBACK LoadGameDlg(HWND, UINT, WPARAM, LPARAM) – оконная процедура для окна-диалога «Загрузка игры».

INT_PTR CALLBACK Stat(HWND, UINT, WPARAM, LPARAM) – оконная процедура для окна-диалога «Статистика».

5 МЕТОДИКА И РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ

5.1 Методика тестирования

Тестирование проходило по следующим позициям:

- проверка корректности записи/чтения файла игры;

- проверка на корректность поведения интерфейса программы;

- проверка на корректность работы логической части игры.

5.2 Проверка корректности записи/чтения файла игры

В игре происходит сохранение в файл «stat.sap» статистики и в файл «save.sap» самой игры (сохранение размерности поля, количество «мин», время прошедшее с момента начала игры). В ходе тестирования ошибок чтения/записи в файл обнаружено не было.

5.3 Проверка на корректность поведения интерфейса программы

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

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

5.4 Проверка на корректность работы логической части игры

Корректность работы логической структуры игры была неоднократно проверена при отладке и тестировании графической версии игры. Все ходы фиксировались верно, ложных срабатываний выявлено не было. Результаты тестирования представлены на скриншотах ниже.

Рис 5.1 – Запуск приложения

Рис. 5.2 – Игровой процесс

Рис 5.3 – Просмотр статистики

Рис. 5.4 – Выбор уровня сложности

Рис. 5.5 – Вывод сообщения о проигрыше

Рис. 5.6 – Сообщение о выйгранной игре

Рис. 5.7 – Запрос на сохранение текущей игры

Рис. 5.8 – Запрос на загрузку ранее сохранённой игры

Проверка функции отмены хода

Рис. 5.9.1 – Игровое поле до отмены хода

Рис. 5.9.2 – Игровое поле после отмены 2-х ходов

ЗАКЛЮЧЕНИЕ

Результатом проделанной работы является реализация компьютерной игры «Сапёр» с возможностью выбора сложности игры, сохранением и загрузкой из файла, просмотром статистики, графическим интерфейсом, схожим с оригиналом, аналогичным игровым процессом и возможностью отмены хода.

В ходе выполнения курсовой работы были преобретены навыки разработки приложений на WinAPI. Была изучена схема связи между приложениями через сообщения. Также был изучен принцип работы основных функций.

Все поставленные ранее задачи по курсовому проекту были успешно выполнены.

Написаная программа соответстввует заявленным требованиям задания на курсовую работу и успешно прошла тестирование.

СПИСОК ЛИТЕРАТУРЫ

  1. Win32 API. Эффективная разработка приложений, Юрий Щупак, «Питер», 2007

  2. Технология программирования на C++. Win32 API-приложения, Н. А. Литвиненко, «БХВ-Петербург»,2010

3)К. Г. Финагенов. Win32. Основы программирования.

4) MSDN - Windows API по-русски//Электронный ресурс: URL: http://vsokovikov.narod.ru/New_MSDN_API/index_msdn.htm

Приложение А

Модульная схема программы

Приложение Б

Функциональная схема программы

25