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

2.2 Теоретические основы игры

Игра представляет собой плоское игровое поле, разделённое на смежные ячейки (квадраты), некоторые из которых «заминированы»; количество «заминированных» ячеек известно и равно количеству непомеченных «мин». Размерность игрового поля обычно может изменяться от 9 до 24 ячеек в ширину и от 9 до 30 в длину (в зависимости от вида и типа аналога игры и, конечно, выбранного уровня сложности).

Рис. 1 – Игровое поле игры «Сапёр» при запуске игры на уровне сложности «Новичок»

В аналогичной игре «Сапер»(Microsoft Corporation) есть три уровня сложности: «Легко» («Новичок»), «Средне» («Любитель») и «Трудно» («Мастер»). С повышением уровня сложности увеличивается количество клеток-ячеек игрового поля и, соответственно, количество «мин», скрывающихся на нём. Также для данной игры предусмотрен ещё один уровень сложности – «Особый», дающий возможность игроку самому выбрать размерность игрового поля и количество «мин» для него. Количество «мин» при уровне сложности «Особый» может быть выбрано в некотором ограниченном диапазоне в силу ограниченности размеров игрового поля.

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

Главная цель игры — открыть все «не заминированные» клетки, ни разу не попав на «мину». Используя числа в открытых клетках, игрок пытается рассчитать расположение мин, однако иногда даже в середине и в конце игры некоторые ячейки всё же приходится открывать наугад. Ячейки, над которыми игрок на данный момент сомневается, может пометить, чтобы случайно не открыть их, ячейка-клетка будет помечена вопросительным знаком «?». Открыв клетку с «миной», игрок проигрывает, игра заканчивается, и, в зависимости от выбора игрока, можно начать игру заново с другой расстановкой «мин» или покинуть игру.

3 Проектирование программы

Для хранения информации об игровом поле решено использовать 2 массива типа BYTE.

В первом массиве решено хранить информацию о текущем состоянии клетки-ячейки. Так как она может находиться в одном из четырех состояний: клетка-ячейка не открыта, клетка-ячейка открыта, клетка-ячейка помечена «флагом» и клетка-ячейка помечена вопросом, и такая клетка будет иметь значение 0, 1, 2 или 3 соответственно в зависимости от состояния данной клетки.

Во втором массиве будет храниться информация о количестве «мин» в смежных ячейках, т.е. числа от 0 и до 8 (максимальное количество смежных ячеек). Числом 9 будет помечена клетка, в которой будет находиться «мина».

Для хранения размерности поля и количества бомб также решено использовать глобальные переменные типа BYTE.

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

Взаимодействие пользователя с игрой в основном предполагается посредством указателя типа мышь. Поэтому вполне логично использование в качестве клетки-ячейки объект «Кнопка» с размещенным на нем изображением определенного числа или «мины» при открытии этой клетки.

Расстановка «мин» происходит случайным образом в самом начале игры при помощи функции srand(). На «Легком» уровне сложности количество «мин» равняется 10, при «Среднем» - 40, «Сложном» - 99.

Как упоминалось ранее ширина и высота, а также количество «мин» при уровне сложности «Особый» выбираются самим игроком. Минимальное количество «мин» решено принять за 10, максимальное количестве «мин», для разной размерности игрового поля, решено рассчитывать по формуле: H*W – (H+W), где H примем за высоту игрового поля, W - за ширина для данного поля в клетках.

Сохранение игры будет производится в файл «save.sap» и будет подразумевать сохранение таких параметров как ширина, высота поля, состояние всех клеток-ячеек, расстановка «мин», значение таймера. Запрос на сохранение будет производиться при закрытии программы и только в том случае, если сделан хотя бы один новый шаг (открытие ячейки) и текущая игра не была пройдена. Запрос на загрузку будет производиться при открытии программы, если до этого было произведено сохранение игры.

Для статистики будет создана специальный тип данных – структура, имеющая такие поля как количество проведённых игр, количество выигрышей, процент выигрышей, наибольшее количество выигрышей и проигрышей подряд, текущее количество выигрышей и проигрышей подряд, массив на десять значений, хранящий лучшие результаты в секундах. Статистика будет вестись для трёх основных уровней сложности («Новичок», «Любитель», «Мастер»). Для уровня сложности «Особый» статистика вестись не будет. Однако исключением будет тот случай, если параметры игры, выбранные на уровне сложности «Особый», будут совпадать с параметрами одного из трех стандартных уровней сложности, а именно размеры поля и количество «мин».

Для обеспечения работы с игровым приложением будут созданы следующие файлы:

global.h – файл в котором содержаться основные глобальные переменные и структуры используемые в программе.

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

-создание игрового поля (create_field())

-удаление игрового поля ()

-новая игра (new_game())

-функция нажатия кнопки (OpenButtField())

-функция открытия всех бомб (OpenALLBomb())

-функция сохранение игры (SaveGame())

-функция загрузка игры (LoadGame())

-функция сохранения статистики (SaveStat())

-функция загрузки статистики (LoadStat())

-функция обнуления статистики (NullStat())

-функция изменения статистики при выигрыше (StatWin())

-функция изменения статистики при проигрыше(StatLoss())

-функция открытия всех пустых ячеек (рекурсия)(OpenNULLButt())

-функция расстановки чисел идентификаторов количества бомб на ячейках(setField())

-функция добавления в список текущего хода (AddList())

-функция удаления из списка хода, если размер списка превышен (DelList())

-функция извлечения хода из списка(Repak())

resource.h – файл в котором хранятся ресурсы программы

stdafx.h - файл хранящий в себе все используемые программой библиотеки

saper.h – файл, содержащий описание всех обработчиков сообщений используемых в программе (обработчик сообщений загрузки/сохранения, статистики, основного окна)