Федеральное агентство железнодорожного транспорта
Омский Государственный университет путей сообщения
Кафедра «Автоматика и системы управления»
ИГРА «САПЕР»
Пояснительная записка к курсовой работе
по дисциплине «Технология программирования»
ИНМВ.422000.000 ПЗ
Студент гр. 23ф ____________ Д. И. Юсупов «__»________2014 г. Руководитель – доцент кафедры АиСУ ____________А. С. Окишев «__»________2014 г. |
Омск 2014
Пояснительная записка
УДК 004.42
Пояснительная записка к курсовой работе содержит 30 страниц, 7 рисунков, 3 использованных источника.
Графика, программирование, WINAPI, Microsoft Visual Studio, Сапер.
Объектом исследования является игра «Сапер».
Цель курсовой работы – разбор логики и ее воспроизведение в собственной программе.
Исследование логики программы проводилось на примере игры от Microsoft «Сапер», путем исследования этого приложения. Реализация собственного программного модуля (игры) проводилось с использованием библиотеки OpenGL, WinApi.
Результатом работы является готовая программа, являющаяся аналогией игры «Сапер».
В процессе разработки программы были изучены основные средства программирования на языке C++ с использованием интерфейса программирования приложений WinApi, базовые возможности библиотеки OpenGL, для создания пользовательского графического интерфейса.
Пояснительная записка выполнена в текстовом редакторе Microsoft Word 2012.
Задание на курсовую работу
В ходе выполнения курсовой работы нужно реализовать игру. Все игры являются пошаговыми, с интерфейсом командной строки. Компьютер выводит в текстовом виде информацию о состоянии игры и ходе компьютера. Пользователь делает свой ход, вводя с клавиатуры нужные данные.
Для получения оценки «удовлетворительно» достаточно реализовать только интерфейс, который бы позволял 2 игрокам играть между собой. При этом программа должна проверять правильность ходов.
Для получения оценки «хорошо» необходимо реализовать любую стратегию игры за компьютер (кроме стратегии выбора хода случайным образом).
Для получения оценки «отлично» реализованная в программе стратегия должна быть близка к оптимальной.
Содержание
Введение. 5
1. Постановка задачи. 6
2. Проектирование. 7
3. Описание модулей. 8
3.1. Класс Model.......................................................................................................8
3.2. Класс View........................................................................................................9
3.3. Класс Statistic..................................................................................................10
3.4. Класс Game......................................................................................................11
4. Внешний вид интерфейса.................................................................................12
Заключение. 14
Библиографический список. ........................................................................ ......15
. 38
Введение
Курсовая работа подразумевает собой создание игры. Суть игры заключается в том, чтобы обнаружить все скрытые на игровом поле мины, расставленные компьютером, путем расчета вероятного местоположения мин исходя из доступной информации. Обнаружив мину, пометим её, делая щелчок правой кнопкой мыши по соответствующей ячейке игрового поля. В игре существует возможность перед стартом игры задать размеры поля, тем самым создать индивидуальную, уникальную игру. Минимальный размер поля: 5х5, максимальный размер 64х64. (Данные размеры были выбраны опытным путем для достижения наилучшего визуального отображения). Максимальные/минимальные размеры можно пересмотреть и легко внести изменения в исходный код. После выбора размеров создается поле на котором компьютер случайным образом расставляет мины. Количество мин так же является случайным и зависит от размеров игрового поля. Слева внизу расположен игровой таймер, отображающий текущее затраченное время, который будет запущен, как только будет сделан первый ход (произойдет открытие или будет помечена любая из ячеек как заминированная). Справа внизу расположен счетчик непомеченных мин. Условие завершения игры:
1) Игра выиграна – игрок пометил всё количество мин, при этом все пометки расставлены верно (контроль с помощью специальной функции);
2) Игра проиграна – игрок попал в ячейку содержащую мину.
После окончания игры будет выведено сообщение – результат (выигрыш/проигрыш) и время, затраченное на текущую игру. Так же результат игры будет записан в статистику.
1 Постановка задачи
Разобраться в правилах игры, придумать контрольные примеры, структуры данных для игры.
Правила игры «Сапер»:
Цель игры – обнаружить все заминированные ячейки.
Правила игры «Сапер» очень просты:
Игроку дается поле выбранного размера.
Игрок поочередно открывает закрытые ячейки поля, попутно помечая возможные места расположения мин. Левый клик мышкой – открыть ячейку, правый – пометить как опасную. При попадании в пустую ячейку, дополнительно будут открыты все пустые ячейки, входящие в текущий «домен пустот» (участки пустоты на игровом поле). В процессе открытия ячеек будет доступна информация о соседствующих вокруг текущей ячейки, заминированных ячейках.
Если игрок открывает ячейку, в которой находится мина – игра окончена.
2 Проектирование
Рисунок 1 – Используемые в игре классы
В программе реализованы такие классы (см. рисунок 1):
- Model – представление игры в памяти компьютера (массив структур);
- View – класс отображения модели (Отрисовка поля, ячеек и других элементов окна);
- Statistic – сбор и отображение статистики о играх (Дата игры, параметры поля, время затраченное на завершения игры, результат игры);
- Game – класс обеспечивающий процесс игры. (Запуск и остановка процесса игры, сбор статистики (Statistic) о текущей игре, отрисовка Model используя View).
3 Описание модулей
3.1 Класс Model
Реализует представление игры в памяти компьютера.
Поле представлено в виде вектора структур, в качестве таких структур выступает описание ячейки. Структура описания ячейки выглядит следующим образом:
struct Cell
{
// Состояние ячейки {Закрыта, Открыта, Установлен флаг обнаружения мины}
CellState state;
// Присутствует ли тут мина
bool hasMine;
};
В классе реализованы следующие методы:
SetMines() – метод расстановки мин на поле. Исходя из заданных параметров поля, генерируется определенное количество мин. Затем происходит расстановка мин на поле случайным образом, при этом существует проверка, позволяющая установить ровно одну мину в ячейку.
SetCell(x, y, CellState) – метод изменения состояния ячейки по индексу {x, y} на заданное состояние.
GetCell(x, y) – получить содержимое ячейки. Возвращаемое значение метода - ссылка на ячейку игрового поля.
Open(x, y) – открыть ячейку по заданным координатам. В качестве координат выступают: x – индекс столбца, y – индекс строки.
Mark(x, y) – пометить ячейку, с заданными координатами, как ячейку содержащую мину. Стоит заметить, что открытие помеченной ячейки в игровом процессе будет запрещено до тех пор, пока метка не снята.
FlagsCorrect() – метод проверки расстановки флагов. Возвращаемое значение: true – если все метки на поле расставлены верно, false – в противном случае.
Также внутри класса Model есть класс Domain, который генерирует дополнительную информацию о поле – список образованных пустот на карте (рисунки 2, 3).

Рисунок 2 – Домены пустот (2 шт.)

Рисунок 3 – Домены пустот (5 шт.)
Информация о доменах пустот необходима для автоматического открытия прилежащих ячеек. При открытии пустой ячейки – автоматически открываются все ячейки, входящие в текущий домен пустот, так же дополнительно открываются прилежащие информационные ячейки (ячейки с количеством заминированных соседей).
3.2. Класс View – отображение модели.
Класс View содержит указатель на модель, которую в последствии этот класс и отображает, обращаясь к полям и функциям объекта типа Model.
View содержит следующие методы:
ReSetModel(Model *mod) – метод позволяющий заменить текущий объект модели на новый, переданный в параметрах (Старая модель уничтожается).
ReleaseModel() – метод отсоединения модели, без замены на новую.
InitGL() – метод установки параметров библиотеки OpenGL.
DrawGLScene() – рисование элементов сцены. В данном случае это отрисовка поля, игрового таймера и количества непомеченных бомб и других элементов игрового интерфейса. Размеры окна подбираются исходя из параметров ширины и высоты игрового поля.
ReSizeGLScene(width, height) – метод перерасчета координат и подстройки системы OpenGL при изменении размеров окна.
drawClosedField(x, y) – метод рисования закрытой ячейки по заданным координатам на игровом поле.
drawClosedField(x, y, minesAround) – метод рисования закрытой ячейки игрового поля и дополнительно ячейка помечается информацией о количестве заминированных соседей.
drawOpenedField(x, y) – рисование открытой ячейки игрового поля по заданным координатам (в качестве координат выступают индексы ячейки).
drawFlag(x, y) – рисование помеченной ячейки по заданным координатам (индексам).
drawMine(x, y) – рисование мины в ячейке с индексами {x, y}.
GetOGLPos(x, y) – преобразовать пару экранных (оконных) координат в пару координат в системе OpenGL.
GetCellIndex(x, y) – расчет индексов ячейки по которой произошел клик. В качестве входной информации - координаты клика мышки, в качестве выходной информации - индексы ячейки игрового поля.
BuildFont() – построение bitmap шрифта. Используется для изображения текстовых надписей в системе OpenGL.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 |
Основные порталы (построено редакторами)


