Вы находитесь на странице: 1из 5

МИНОБРНАУКИ РОССИИ

САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ
ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
«ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)
Кафедра МО ЭВМ

ОТЧЕТ
по лабораторной работе №1
по дисциплине «Объектно-ориентированное программирование»
Тема: Создание классов, конструкторов и методов

Студент гр. 1304 Стародубов М.В.

Преподаватель Жангиров Т.Р.

Санкт-Петербург
2022
Цель работы.
Научиться создавать классы, описывать конструкторы и методы, а
также устанавливать взаимодействия между классами используя язык
программирования C++.

Задание.
Реализовать прямоугольное игровое поле, состоящее из клеток. Клетка
- элемент поля, которая может быть проходима или нет (определяет, куда
может стать игрок), а также содержит какое-либо событие, которое
срабатывает, когда игрок становится на клетку. Для игрового поля при
создании должна быть возможность установить размер (количество клеток по
вертикали и горизонтали). Игровое поле должно быть зациклено по
вертикали и горизонтали, то есть если игрок находится на правой границе и
идет вправо, то он оказывается на левой границе (аналогично для всех краев
поля).
Реализовать класс игрока. Игрок - сущность контролируемая
пользователем. Игрок должен иметь свой набор характеристик и различный
набор действий (например, разные способы перемещения, попытка избежать
событие, и так далее).

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

2
происходит инициализация объектов классов Reader, Drawer, Field, Player,
Mediator, устанавливаются связи между ними. В самом цикле происходит
отрисовка поля, а также обрабока клавиш, нажатых пользователем.
Для отрисовки поля используется библиотека ncurses.
Класс Reader отвечает за считывание клавиш с клавиатуры, для этого
используется метод getPressedKey(), который с помощью функции getch()
библиотеки ncurses возвращает код нажатой клавиши.
Класс Drawer используется для того, чтобы отрисовывать в консоли
поле (клетки и существа на них), для получения информации о поле
используется медиатор.
Класс Field содержит в себе информацию о поле, начальные данные
инициализируются, используя данные, введенные пользователем. Если
пользователь отказался от ввода размера поля, то с помощью конструктора,
не принимающего входных данных будет создано поле размером пять на пять
клеток. Для данного класса описаны констроуктор копирования и
конструктор присваивания. В поле cell_arr хранится двумерный массив
указателей на клетки. Все взаимодействие с полем происходит через
медиатор.
Класс Cell содержит в себе информацию об отдельной клетке (событие,
которое ей присвоено, и существо, находящееся на ней), клетке можно
динамически присваивать события или существ, клетка может реагировать на
то, перешло ли на нее существо с помощью события, которое ей присвоено.
Класс Player используется для управления игроком на поле, все
команды игрок посылает через медиатор. Игрок имеет следующие
характеристики: direction (направление в котором он смотрит), speed
(скорость передвижения по полю) и energy (количество очков энергии, за
которые он может выполнять определенные действия). Последние две
характеристики на данный момент не исплользуются.
Класс Enemy используется для отображения противника на карте.

3
Классы Player и Enemy наследуются от абстрактного класса Entity. Это
сделано для того, чтобы возможно было хранить информацию о игроке и
противнике в одном поле класса Cell, а также независимо действовать на них
с помощью события, присвоенного клетке.
Класс Mediator используестя для взаимодействия классов Drawer, Field
и Player. Используя медиатор игрок отправляет запросы на изменение
информации на поле, а рисовальщик использует медиатор для получения
информации о поле и о игроке для корректной отрисовки.
Структура Position используется для более удобной передачи
координат.
Связь всех вышеописанных классов отражена на рисунке 1.

Рисунок 1 - UML-диаграмма описанных классов

4
Выводы.
В ходе данной лабораторной работы были созданы классы StartDialog
(получение начальных данных), MainLoop (основной цикл программы),
Reader (считывание нажатий клавиш), Drawer (рисование поля и существ),
Field (храниение информации о поле), Cell (хранение информации об
отдельной клетке), Player (управление игроком на поле), Mediator (обмен
информации между классами Drawer, Field и Player). Используя данные
классы было реализовано управление игроком на поле заданного
пользователем размера.

Вам также может понравиться