Федеральное агентство железнодорожного транспорта

Омский Государственный университет путей сообщения

Кафедра «Автоматика и системы управления»

ИГРА «САПЕР»

Пояснительная записка к курсовой работе
по дисциплине «Технология программирования»

ИНМВ.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

Основные порталы (построено редакторами)

Домашний очаг

ДомДачаСадоводствоДетиАктивность ребенкаИгрыКрасотаЖенщины(Беременность)СемьяХобби
Здоровье: • АнатомияБолезниВредные привычкиДиагностикаНародная медицинаПервая помощьПитаниеФармацевтика
История: СССРИстория РоссииРоссийская Империя
Окружающий мир: Животный мирДомашние животныеНасекомыеРастенияПриродаКатаклизмыКосмосКлиматСтихийные бедствия

Справочная информация

ДокументыЗаконыИзвещенияУтверждения документовДоговораЗапросы предложенийТехнические заданияПланы развитияДокументоведениеАналитикаМероприятияКонкурсыИтогиАдминистрации городовПриказыКонтрактыВыполнение работПротоколы рассмотрения заявокАукционыПроектыПротоколыБюджетные организации
МуниципалитетыРайоныОбразованияПрограммы
Отчеты: • по упоминаниямДокументная базаЦенные бумаги
Положения: • Финансовые документы
Постановления: • Рубрикатор по темамФинансыгорода Российской Федерациирегионыпо точным датам
Регламенты
Термины: • Научная терминологияФинансоваяЭкономическая
Время: • Даты2015 год2016 год
Документы в финансовой сферев инвестиционнойФинансовые документы - программы

Техника

АвиацияАвтоВычислительная техникаОборудование(Электрооборудование)РадиоТехнологии(Аудио-видео)(Компьютеры)

Общество

БезопасностьГражданские права и свободыИскусство(Музыка)Культура(Этика)Мировые именаПолитика(Геополитика)(Идеологические конфликты)ВластьЗаговоры и переворотыГражданская позицияМиграцияРелигии и верования(Конфессии)ХристианствоМифологияРазвлеченияМасс МедиаСпорт (Боевые искусства)ТранспортТуризм
Войны и конфликты: АрмияВоенная техникаЗвания и награды

Образование и наука

Наука: Контрольные работыНаучно-технический прогрессПедагогикаРабочие программыФакультетыМетодические рекомендацииШколаПрофессиональное образованиеМотивация учащихся
Предметы: БиологияГеографияГеологияИсторияЛитератураЛитературные жанрыЛитературные героиМатематикаМедицинаМузыкаПравоЖилищное правоЗемельное правоУголовное правоКодексыПсихология (Логика) • Русский языкСоциологияФизикаФилологияФилософияХимияЮриспруденция

Мир

Регионы: АзияАмерикаАфрикаЕвропаПрибалтикаЕвропейская политикаОкеанияГорода мира
Россия: • МоскваКавказ
Регионы РоссииПрограммы регионовЭкономика

Бизнес и финансы

Бизнес: • БанкиБогатство и благосостояниеКоррупция(Преступность)МаркетингМенеджментИнвестицииЦенные бумаги: • УправлениеОткрытые акционерные обществаПроектыДокументыЦенные бумаги - контрольЦенные бумаги - оценкиОблигацииДолгиВалютаНедвижимость(Аренда)ПрофессииРаботаТорговляУслугиФинансыСтрахованиеБюджетФинансовые услугиКредитыКомпанииГосударственные предприятияЭкономикаМакроэкономикаМикроэкономикаНалогиАудит
Промышленность: • МеталлургияНефтьСельское хозяйствоЭнергетика
СтроительствоАрхитектураИнтерьерПолы и перекрытияПроцесс строительстваСтроительные материалыТеплоизоляцияЭкстерьерОрганизация и управление производством