Догонялки. Курсовая Догонялки. Курсовой проект по дисциплине Программирование
Скачать 221.28 Kb.
|
Item(){}RobotComp(){}Item(){} // Деструктор по умолчаниюRobotComp(){} // Деструктор по умолчаниюItem()RobotComp()5МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ Федеральное государственное бюджетное образовательное учреждение высшего образования «Восточно-Сибирский государственный университет технологий и управления» Электротехнический факультет Кафедра систем информатики Курсовой проект по дисциплине «Программирование» Тема: «Реализация игры Догонялки» Выполнил: студент гр. Б650 Солнцев Я.С. Руководитель: к.п.н., доцент каф. СИ Чимитова Е.Г. Оценка: ___________ Дата защиты: ___________ Улан-Удэ, 2021 ВОСТОЧНО-СИБИРСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕХНОЛОГИЙ И УПРАВЛЕНИЯ ЭЛЕКТРОТЕХНИЧЕСКИЙ ФАКУЛЬТЕТ Кафедра систем информатики , З А Д А Н И Е на курсовой проект
Руководитель работы ___________ Чимитова Е.Г. Исполнитель ______ Солнцев Я.С. Дата выдачи "__" _______ 2021 г. Аннотация В данной курсовой работе рассмотрены вопросы применения объектно – ориентированного программирования для решения графической задачи на примере разработки приложения – игра в «догонялки». Задача реализуется на языке программирования Borland C++. В курсовой работе используются следующие сокращения: ООП – Объектно – ориентированное программирование. ПО – Программное обеспечение. Работа содержит: Рисунков – 5 Листов машинописного текста – 23 Библиографических источников – 5 Приложений – 1 Ключевые слова: С++, наследование, инкапсуляция, полиморфизм, догонялки, игра, потомок, родитель, класс, объект, ООП. СОДЕРЖАНИЕ ВВЕДЕНИЕ 5 ВВЕДЕНИЕЭлементы объектно – ориентированного программирования (ООП) появились в начале 70-х годов в языке моделирования Симула, затем получили свое развитие, и в настоящее время ООП принадлежит к числу ведущих технологий программирования. Концепция ООП подразумевает, что основой управления процессом реализации программы является передача сообщений объектам. Поэтому объекты должны определяться совместно с сообщениями, на которые они должны реагировать при выполнении программы. В этом состоит главное отличие объектно – ориентированного программирования от процедурного программирования, где отдельно определённые структуры данных передаются в процедуры в качестве параметров. Таким образом, объектно – ориентированная программа состоит из объектов – отдельных фрагментов кода, обрабатывающего данные, которые взаимодействуют друг с другом через определённые интерфейсы. Язык ООП должен обладать следующими свойствами: 1. Инкапсуляции – механизма, связывающего вместе код и данные, которыми он манипулирует, и защищающего их от внешних помех и некорректного использования. 2. Наследования – процесса, с помощью которого один объект приобретает свойства другого, т.е. поддерживается иерархической классификации. 3. Полиморфизма – свойства, позволяющего использовать один и тот же интерфейс для общего класса действий. Разработка объектно – ориентированных программ состоит из следующих последовательных работ: Определение основных объектов Определение закрытых данных для выбранных объектов Определение второстепенных объектов и их закрытых данных Определение иерархической системы классов, представляющих выбранные объекты Определение ключевых сообщений, которые должны обрабатывать объекты каждого класса Разработка последовательности выражений, которые позволяют решить поставленную задачу Разработка методов, обрабатывающих каждое сообщение. Очистка проекта, то есть устранение всех вспомогательных промежуточных материалов, использовавшихся при проектировании Кодирование, отладка, компоновка и тестирование. Объектно – ориентированное программирование позволяет программисту моделировать объекты определённой предметной области путем программирования их содержания и поведения в пределах класса. Конструкция «класс» обеспечивает механизм инкапсуляции для реализации абстрактных типов данных. Инкапсуляция, как бы скрывает и подробности внутренней реализации типов, и внешние операции, и функции, допустимые для выполнения над объектами этого типа. В курсовой работе рассматривается разработка программы на примере игры в «догонялки». В программе, методами объектно – ориентированного подхода, реализованы 2 объекта квадратной формы – «компьютер» и «охотник», отличительными чертами которых являются цвет и скорость. Предусмотрено их движение. Скорость у объекта «компьютер» выше, чем у объекта «охотник», чтобы у объекта «компьютер» была возможность убежать. «Охотник» в свою очередь оценивает ситуацию и пытается догнать «компьютер». Также созданы несколько препятствий прямоугольной формы. При достижении границ экрана или препятствий, новое направление выбирается произвольно (случайным образом) из возможных. После запуска программы его выполнение начинается автоматически. Игра считается законченной только в том случаи, когда объекты «компьютер» и «охотник» столкнутся между собой. Анализ задачи Целью данной курсовой работы является создание игры в «догонялки» с понятным пользователю интерфейсом. При выборе языка программирования для решения поставленной задачи следует также учитывать следующие обстоятельства: скорость программы; ожидаемый размер памяти, занимаемой программой во время работы; типы данных, с которыми приходится иметь дело; возможность использования стандартных библиотек и функций; Все перечисленные обстоятельства являются достоинствами языка С++. С++ – это универсальный язык программирования, задуманный так, чтобы сделать программирование более приятным для разработчика. За исключением второстепенных деталей С++ является надмножеством языка программирования C. Помимо возможностей, которые дает C, С++ предоставляет гибкие и эффективные средства определения новых типов. С целью более удобного проектирования, настройки, и разделения отдельных исполняемых операций, программа построена на классах, которые взаимодействуют между собой. Использование классов дает улучшенной понимание кода, а значит настройку и последующую модификацию исходного кода программы. Все методы всех классов имеют метку видимости public, так как необходимо использовать члены этих классов из других процедур. В программе создан объект прямоугольной формы. Этот объект реализован с помощью класса. Данный класс называется Robot, и он является базовым классом. От базового класса при помощи наследования созданы 2 производных класса – это RobotComp (робот – компьютер) и RobotUser(робот – охотник). Наследование, позволяет создавать классы потомки, которые наследуют все свойства и методы базового класса и имеют также набор своих свойств и методов. В программе предусмотрена возможность движения объектов и обхода препятствий, а также не выхода за границы экрана. При достижении границ экрана или препятствий, новое направление выбирается произвольно (случайным образом) из возможных. Отличительными чертами потомков базового класса являются цвет и скорость. Скорость у объекта «робот – компьютер» выше, чем у объекта «робот – охотник», чтобы у компьютера была возможность убежать от своего охотника. Охотник в свою очередь оценивает ситуацию и пытается всячески догнать компьютер. Охотнику не позволено сталкиваться с препятствиями и выходить за границы экрана. Объект, закрашенный синим цветом, является компьютером, а пользовательский объект закрашен оранжевым цветом. Для создания препятствий реализован еще один класс, который является независимым от других классов. Этот класс называется Item. Объекты, созданные при помощи этого класса, имеют прямоугольную форму серого цвета. Таких объектов всего в программе создано три. Это фиксированные объекты и они располагаются в одной и той же позиции. После запуска программы его выполнение начинается автоматически. Игра считается законченной только в том случаи, когда объекты «компьютер» и «охотник» столкнутся между собой. Проектирование классов В данной курсовой работе были разработаны следующие классы: Имя класса Robot. Ответственность: Базовый класс (родитель), задает точки x, y, цвет и скорость. Атрибуты класса: Координаты класса – x, y (int) Координаты прироста скорости по x и y – dx, dy (int) Цвет – color (int) Функции класса: Конструктор с параметрами – Robot(int, int) Функция проверки столкновения с другими объектами – int collision() Функция рисования – void draw() Деструктор – Имя класса RobotComp. Имя класса RobotUser. Ответственность: Производный класс (потомок) от базового класса Robot. Основной целью является догнать RobotComp и обход препятствий. Атрибуты класса унаследованы у родителя. Функции класса: Конструктор с параметрами – RobotUser(int, int) Функция движения за RobotComp – void update(RobotComp* comp); Деструктор по умолчанию – |
Имя класса Item.
Ниже на рис. 1 приведена иерархия классов, где от базового класса Robot создаются 2 потомка – RobotComp и RobotUser наследуя свойства у родителя. Класс Item, необходимый для создания препятствий, в данном случаи является независимым от других классов.
Независимый класс Item
Производный класс RobotUser
Производный класс RobotComp
Базовый класс Robot
Рис.1 Иерархия классов
Программирование задачи
Синтаксис объявления класса в языке С++ в общем случае следующий:
class <имя класса>
{ элементы класса
<метка видимости>:< элементы класса>
} объекты класса;
В программе был создан базовый класс Robot:
class Robot // Базовый класс
{ public: // Метка видимости
int x, y; // Точки x и y
int dx, dy; // Точки dx и dy (прирост скорости по x и y)
int color; // Цвет
public: // Метка видимости
Robot(int _x, int _y); // Конструктор с параметрами
int collision(); // Функция проверки столкновения с другими объектами
void draw(); // Функция рисования
};
class RobotUser : public Robot // Производный класс от базового
{public: // Метка видимости
RobotUser(int _x, int _y); // Конструктор с параметрами
void update(RobotComp* comp); // Функция движения и обхода препятствий
};
Полный текст программы приведен в приложении.
Заголовочные файлы
При написании программы были подключены заголовочные файлы. Все заголовочные файлы подключены с помощью директивы <#include> препроцессора языка C++.
bar (int left, int top, int right, int bottom) – рисует двухмерный заполненный прямоугольник.
setfillstyle (int pattern, int color) – устанавливает текущие цвет и шаблон заполнения.
closegraph() – освобождает всю память,выделенную под графическую систему, затем восстанавливает экран в режим, который был до вызова initgraph.
initgraph (int driver, int mode, char path) инициализирует графическую систему путем загрузки графического драйвера с диска и переводит систему в графический режим.
cleardevice() – cтирает (это значит – зарисовывает текущим цветом фона) весь графический экран.
getmaxx() – возвращает максимальное (относительно экрана) значение х для текущего драйвера и режима.
getmaxy() – возвращает максимальное (относительно экрана) значение y для текущего драйвера и режима.
Тестирование
Чтобы полностью проверить корректность работы программы и соответствие заданным требованиям нужно провести тестирование. Тестирование ПО – это процесс исследования программного обеспечения с целью получения информации о качестве продукта.
После запуска программы все действия выполняются автоматически, а пользователю остается всего лишь наслаждаться ходом выполнения игры.
Ниже приведены несколько скриншотов работы программы.
На рис. 2 представлен скриншот программы после его запуска.
Рис. 2 Ирга в «догонялки» после запуска.
На рисунке видно, что объект синего цвета это «робот – компьютер», а оранжевого цвета – «робот – охотник». Есть также 3 препятствия прямоугольной формы.
На рис. 3 видно, что объекты изменили свое начальное положение, а значит, что объекты движутся, как предусмотрено в задании.
Рис. 3 Ирга в «догонялки». Движение и обход препятствий.
На рис. 4 показано, как в одном из случаев при достижении препятствий, «робот компьютер» выбирает свое направление (случайным образом).
Рис. 4 Ирга в «догонялки». Выбор направления.
После того, как произойдет столкновение этих объектов, выполнение игры заканчивается (рис 5.).
Рис. 5 Ирга в «догонялки». Столкновение объектов.
После проведения тестирования можно сделать вывод, что в ходе выполнения тестирования не было выявлено ошибок программного кода и несоответствий логике работы программы. Что касается функциональности, программа выполняет все возложенные на нее функции, а это и движение объектов, и обход препятствий, и выбор нового направления при достижении границ экрана.
При желании можно усовершенствовать данный программный продукт.
Заключение
В данной курсовой работе была спроектирована и разработана программа для реализации игры в «догонялки». Программа была создана на языке программирования С++, который предоставляет наилучшие возможности для реализации программ на основе методов объектно-ориентированного программирования.
Программа разрабатывалась с использованием объектно – ориентированного подхода, поэтому при ее реализации были использованы классы. Такое свойство объектно – ориентированного подхода как наследование помогло в значительной степени упростить написание программы.
Трудности во время создания проекта возникли только при разработке графического интерфейса, но и они были удачно преодолены.
Выполнение данной курсовой работы способствовало приобретению навыков программирования с использованием объектно-ориентированного подхода, а также наращиванию опыта программирования и составления технической документации.
После разработки программы было проведено тестирование, результаты которого показывают, что программа работает, как и должно, по всем заданным правилам в задании, а значит, задача была выполнена успешно и программа работоспособна.
Список литературы
Конспект лекций по дисциплине «Объектно – ориентированное
программирование», 2013.
С/С++. Программирование на языке высокого уровня / Т.А.Павловская. – СПб.: Питер, 2002. – 464 с.
Фридман А. Л. Основы объектно – ориентированного программирования на языке С++. – М.: Горячая линия – Телеком, Радио и связь, 1999. – 208 с.
Интернет сайт «Википедия» http://ru.wikipedia.org
Интернет сайт «Клуб программистов» http://programmersforum.ru
Приложение
#include
#include
#include
#include
#include
int maxX, maxY, run;
class Robot
{
public:
int x, y;
int dx, dy;
int color;
public:
Robot(int _x, int _y);
int collision();
void draw();
};
RobotComp::RobotComp(int _x, int _y) : Robot(_x, _y) {
dx = 4;
dy = 3;
color = 1;
}
void RobotComp::update() {
x += dx;
y += dy;
if (x + 20 >= maxX || x < 0) {
if (dx < 0) {
x = 0;
dx = rand() % 6 + 1;
}
else {
dx = -(rand() % 6 + 1);
x = maxX - 20;
}
dy = rand() % 6 - 5;
}
if (y + 20 >= maxY || y < 0) {
dx = rand() % 6 - 5;
if (dy < 0) {
y = 0;
dy = rand() % 6 + 1;
}
else {
y = maxY - 20;
dy = -(rand() % 6 + 1);
}
}
collision();
}
class RobotUser : public Robot
{
public:
RobotUser(int _x, int _y);
void update(RobotComp* comp);