48913 (608839)

Файл №608839 48913 (Сапер)48913 (608839)2016-07-30СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла

12



МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ

ХАРЬКОВСКИЙ НАЦИОНАЛЬНЫЙ УНИВЕРСИТЕТ

РАДИОЭЛЕКТРОНИКИ

Кафедра искусственного интеллекта

Пояснительная записка

К курсовой работе по дисциплине:

"Объектно-ориентированное программирование"

Тема:

"Сапер"

Выполнил:

ст. гр.

Проверил:

Комиссия:

Работа защищена с оценкой:

Харьков 2007

РЕФЕРАТ

Пояснительная записка к курсовой работе содержит: 46 стр., 5 рисунков

Предмет исследования – современные методы разработки программ таких, как объектно-ориентированное программирование и визуальное проектирование, а также структурное и модульное программирование.

Цель курсовой работы – систематизация, углубление и активное применение знаний по системному программированию, закрепление знаний, полученных в лекционном курсе, а также на практических и лабораторных занятиях.

Метод исследования – изучение литературы, составление и отладка программ на компьютере.

Данная программа используется для интересного проведения времени за игрой, которая требует развитого логического мышления. Разработан проект "Сапер" соответствующий условию задания и имеющий удобный интерфейс.

Программа разработана в среде Visual studio 2005.

КЛЮЧЕВЫЕ СЛОВА: VISUAL, ФУНКЦИЯ, ПРОЕКТ, ПРОГРАММА, САПЕР, БОМБА, ЯЧЕЙКА

СОДЕРЖАНИЕ

ВВЕДЕНИЕ 4

1. АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ 6

2. ПОСТАНОВКА ЗАДАЧИ 6

3 ПРОЕКТИРОВАНИЕ СИСТЕМЫ 9

4. ПРОГРАММНАЯ РЕАЛИЗАЦИЯ 11

ВЫВОДЫ 11

ПЕРЕЧЕНЬ ССЫЛОК 12

ПРИЛОЖЕНИя 13


ВВЕДЕНИЕ

C++ - универсальный язык программирования, задуманный так, чтобы сделать программирование более приятным для серьезного программиста. За исключением второстепенных деталей C++ является надмножеством языка программирования C. Помимо возможностей, которые дает C, C++ предоставляет гибкие и эффективные средства определения новых типов. Используя определения новых типов, точно отвечающих концепциям приложения, программист может разделять разрабатываемую программу на легко поддающиеся контролю части. Такой метод построения программ часто называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. Такие объекты просты и надежны в использовании в тех ситуациях, когда их тип нельзя установить на стадии компиляции. Программирование с применением таких объектов часто называют объектно-ориентированным. При правильном использовании этот метод дает более короткие, проще понимаемые и легче контролируемые программы.

Ключевым понятием C++ является класс. Класс - это тип, определяемый пользователем. Классы обеспечивают скрытие данных, гарантированную инициализацию данных, неявное преобразование типов для типов, определенных пользователем, динамическое задание типа, контролируемое пользователем управление памятью и механизмы перегрузки операций. C++ предоставляет гораздо лучшие, чем в C, средства выражения модульности программы и проверки типов. В языке есть также усовершенствования, не связанные непосредственно с классами, включающие в себя символические константы, inline - подстановку функций, параметры функции по умолчанию, перегруженные имена функций, операции управления свободной памятью и ссылочный тип. В C++ сохранены возможности языка C по работе с основными объектами аппаратного обеспечения (биты, байты, слова, адреса и т.п.). Это позволяет весьма эффективно реализовывать типы, определяемые пользователем.

C++ и его стандартные библиотеки спроектированы так, чтобы обеспечивать переносимость. Имеющаяся на текущий момент реализация языка будет идти в большинстве систем, поддерживающих C. Из C++ программ можно использовать C библиотеки, и с C++ можно использовать большую часть инструментальных средств, поддерживающих программирование на C.


1. АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ

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

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

Игра считается проигранной, если вы открыли ячейку с бомбой.

Игра считается выигранной, если на игровом поле все ячейки с бомбами отмечены и все остальные ячейки – открыты.

2. ПОСТАНОВКА ЗАДАЧИ

Алгоритм программы включает в себя:

случайную расстановку бомб по полю (функция Rand())

int tmp = GetBombsCount();

int tmp_cs = 0;

int tmp_rs = 0;

while(tmp! = 0)

{

tmp_cs = rand()% GetCols();

tmp_rs = rand()% GetRows();

if (field [tmp_cs] [tmp_rs]. GetPointer() == NULL)

{

tmp--;

field [tmp_cs] [tmp_rs]. SetPointer(new CMyCellBomb(tmp_cs, tmp_rs, CLOSED));

}

else

continue;

}

подсчет для каждой ячейки количества бомб вокруг нее

int value = 0;

if (CheckCell(i, j - 1))

if (GetCellByIndex(i, j - 1) ! = NULL && GetCellByIndex(i, j - 1) - >isBomb())

value++;

if (CheckCell(i - 1, j - 1))

if (GetCellByIndex(i - 1, j - 1) ! = NULL && GetCellByIndex(i - 1, j - 1) - >isBomb())

value++;

if (CheckCell(i - 1, j))

if (GetCellByIndex(i - 1, j) ! = NULL && GetCellByIndex(i - 1, j) - >isBomb())

value++;

if (CheckCell(i - 1, j + 1))

if (GetCellByIndex(i - 1, j + 1) ! = NULL && GetCellByIndex(i - 1, j + 1) - >isBomb())

value++;

if (CheckCell(i, j + 1))

if (GetCellByIndex(i, j + 1) ! = NULL && GetCellByIndex(i, j + 1) - >isBomb())

value++;

if (CheckCell(i + 1, j + 1))

if (GetCellByIndex(i + 1, j + 1) ! = NULL && GetCellByIndex(i + 1, j + 1) - >isBomb())

value++;

if (CheckCell(i + 1, j))

if (GetCellByIndex(i + 1, j) ! = NULL && GetCellByIndex(i + 1, j) - >isBomb())

value++;

if (CheckCell(i + 1, j - 1))

if (GetCellByIndex(i + 1, j - 1) ! = NULL && GetCellByIndex(i + 1, j - 1) - >isBomb())

value++;

return value;

возможность регулирования размеров поля, количества бомб

метод раскрытия пустых клеток (без бомб и цифр)

if (! CheckCell(i, j))

return;

if (GetCellByIndex(i, j) == NULL)

return;

if (GetCellByIndex(i, j) - >isBomb())

return;

else

if (countItter! = 0 && (GetCellByIndex(i, j) - >GetState() == OPENED ||

GetCellByIndex(i, j) - >GetState() == BLOCK))

return;

GetCellByIndex(i, j) - >SetState(OPENED);

countItter++;

// Обходим все соседние ячейки что бы их открыть

if (((CMyCellWob *) GetCellByIndex(i, j)) - >GetValue() == 0)

{

OpenNullValues(i, j - 1);

OpenNullValues(i - 1, j - 1);

OpenNullValues(i - 1, j);

OpenNullValues(i - 1, j + 1);

OpenNullValues(i, j + 1);

OpenNullValues(i + 1, j + 1);

OpenNullValues(i + 1, j);

OpenNullValues(i + 1, j - 1);

}

3 ПРОЕКТИРОВАНИЕ СИСТЕМЫ

CmyCell – базовый абстрактный класс, хранит положение и состояние ячейки, выполняет необходимые ячейке действия, виртуальные функции предопределяются далее в производных классах.

GetX() – взятие положения по X

GetY() – взятие положения по Y

GetState() – взятие состояния ячейки

SetX() – установка положения по X

SetY() – установка положения по Y

SetState() – установка состояния ячейки

HitToPoint() – попадание по ячейке

DrawClosedCell() – прорисовка закрытой ячейки

DrawBlockedCell() – прорисовка заблокированной ячейки

Draw() – прорисовка ячеек

Click() – щелчок по ячейке

IsBomb() – проверяет на наличие в ячейке бомбы

CmyCellBomb – класс, ячейка с бомбой, наследуется от базового класса – ячейки. Переопределяет функции Рисовать, Кликать, проверку на занятость ячейки бомбой.

CMyCellWOB – класс, ячейка без бомбы, наследуется от ячейки.

SetValue() – устанавливает количество бомб вокруг ячейки

GetValue() – взятие кол-ва бомб вокруг ячейки

CPMyCell – "умный" указатель на класс ячейки. Включает в себя указательно класс CmyCell.

CmyField – класс поля, наследуется от класса CPMyCell, генерирует расположение бомб, обрабатывает нажатие события, рисует, осуществляет все действия, что нужны для самой игры.

GetCols() – взятие количества столбцов

GetRows() – взятие количества строк

GetBombsCount() – взятие количества бомб

GetFindBombsCount() – взятие количества найденных бомб

SetBombsCount() – установка количества бомб

SetFindBombsCount() – определение количества найденных бомб

GetCellByIndex() – нахождение ячейки по индексу

SetCellByIndex() – установка ячейки по индексу

Init() – инициализация итерации

ReInit() – повторная инициализация

DeInit() – завершение инициализации

OpenAll() – открытие ячеек

TestOnWin() – проверка на выигрыш

CalcValueForCell() – подсчет количества бомб вокруг ячейки

CheckCell() – проверка на наличие ячейки

OpenNullValues() – открытие пустых ячеек

IncFindBombs() – увеличение количества найденных бомб

DecFindBombs() - уменьшение найденных бомб

4. ПРОГРАММНАЯ РЕАЛИЗАЦИЯ

Интерфейс программы был создан с помощью стандартной библиотеки MFC.

При запуске программы, вы можете установить количество бомб, количество строк и столбцов. После этого нажимаете на кнопку Начать.

См. Приложение3. (Рис.1)

Далее вы щелкаете на ячейку, чтобы открыть ее, где предположительно нет бомбы.

См. Приложение 3. (Рис.2)

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

См. Приложение 3. (Рис.3)

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

См. Приложение 3. (Рис.4,5)

ВЫВОДЫ

В ходе выполнения данного курсового проекта были разработана программа на языке высокого уровня Visual C++. А также изучены возможности данного языка.

Систематизированы и закреплены практические навыки использования ЭВМ, программного обеспечения, существующих средств обслуживания системных программистов, а также теоретические знания по основным разделам курса "Объектно-ориентированное программирование". Основное внимание уделено изучению современных операционных систем, способов проектирования приложений, объектно-ориентированному и системному программированию.

При выполнении курсового проекта произведено знакомство с реферативными журналами и другими информационными источниками по объектно-ориентированному и системному программированию с целью анализа состояния решаемой задачи.

Получены практические навыки работы в среде Microsoft Visual Studio.

ПЕРЕЧЕНЬ ССЫЛОК

1. Бондаренко М.Ф., Бритик В.И., Свинар М.К. Конспект лекций. Часть I "Алгоритмические языки и программирование". "Компания СМИТ" – Харьков, 2004. -221 с.

2. Павловская Т.А. С/С++ программирование на языке высокого уровня. "Питер" – Санкт Петербург, 2002. -460 с.

3. Ричард С. Линкер, Том Арчер. Программирование для Windows 98. Библия разработчика. “Диалектика ” – Москва, 1999. -864 с.: ил. - Парал. тит. англ. Уч. пос.

4. Джесс Либерти. С++ за 21 день. ”Вильямс” – Москва, 2000. -816 с.: ил. - Парал. тит. англ.


ПРИЛОЖЕНИя

Приложение 1

ДИАГРАММА КЛАССОВ

ПРИЛОЖЕНИЕ 2.

ТЕКСТ ПРОГРАММЫ

Mycell. h

#ifndef MYCELL_H_

#define MYCELL_H_

// defines...

// задаем константы

#define CLOSED 0

#define OPENED 1

#define BLOCK 2

#define SIZE 20

#define WITH_BOMB 0

#define WITHOUT_BOMB 1

// events

#define REDRAW 0x00000001

#define GAMEOVER 0x00000010

Характеристики

Тип файла
Документ
Размер
9,78 Mb
Материал
Тип материала
Учебное заведение
Неизвестно

Тип файла документ

Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.

Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.

Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.

Список файлов курсовой работы

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6510
Авторов
на СтудИзбе
302
Средний доход
с одного платного файла
Обучение Подробнее