lesson_2 #2

Open
alexander wants to merge 3 commits from lesson_2 into master
Owner
  1. Применение шаблона «Команда» в игре SBomber

Задача: применить паттерн «Команда» для выполнения частых стандартных действий в главном классе игры SBomber, таких как удаление динамических и статических объектов, бросание бомбы.
В проекте SBomber уже есть функции, которые можно оформить как «Команды»:

void __fastcall DeleteDynamicObj(DynamicObject * pBomb);
void __fastcall DeleteStaticObj(GameObject* pObj);
void DropBomb();
std::vector<DynamicObject*> vecDynamicObj;
std::vector<GameObject*> vecStaticObj;

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

Для третьей команды можно передавать, константный указатель на объект Plane (из него команда будет брать координаты самолета), ссылку на массив динамических объектов объектов (для создания динамического объекта Bomb) и константную ссылку на количество бомб у самолета (количество доступных бомб хранится в объекте SBomber). Можно передавать ещё скорость падения и размер (ширину) воронки от взрыва — это позволит в будущем бросать более мощные бомбы, которые будут быстрее падать и оставлять больший след.

Функциональность из этих трёх функций можно для простоты перенести в команды. В этом случае получателем (Receiver) и исполнителем будет сама команда. Если потребуется выполнить какую-то команду внутри класса SBomber, мы будем динамически создавать эту команду, задавать ей параметры (SetParams) и передавать её функции-методу. Он, в свою очередь, будет вызывать для этой команды виртуальный метод Execute и удалять её из памяти. Отмена (Undo) действий или команд в нашей игре не нужна.

SBomber::CommandExecuter(AbstractCommand * pCommand);

  1. (*) Применение шаблона «Декоратор» в игре SBomber

Задача: создание нового варианта бомбы в игре с помощью паттерна «Декоратор».
Для класса Bomb создадим класс «Декоратор», который заставит бомбу падать быстрее и добавит при её рисовании новые графические элементы. Пусть класс декоратора называется BombDecorator и будет наследником DynamicObject, как и Bomb. Пусть класс-декоратор содержит объект «Бомба». Ему также необходимо переопределять (override) методы Move и Draw и вызывать эти методы у бомбы, которую он содержит.

1. Применение шаблона «Команда» в игре SBomber Задача: применить паттерн «Команда» для выполнения частых стандартных действий в главном классе игры SBomber, таких как удаление динамических и статических объектов, бросание бомбы. В проекте SBomber уже есть функции, которые можно оформить как «Команды»: ``` void __fastcall DeleteDynamicObj(DynamicObject * pBomb); void __fastcall DeleteStaticObj(GameObject* pObj); void DropBomb(); std::vector<DynamicObject*> vecDynamicObj; std::vector<GameObject*> vecStaticObj; ``` Первые две команды будут получать указатели на удаляемый объект и ссылку на массивы, откуда его надо удалить. Для третьей команды можно передавать, константный указатель на объект Plane (из него команда будет брать координаты самолета), ссылку на массив динамических объектов объектов (для создания динамического объекта Bomb) и константную ссылку на количество бомб у самолета (количество доступных бомб хранится в объекте SBomber). Можно передавать ещё скорость падения и размер (ширину) воронки от взрыва — это позволит в будущем бросать более мощные бомбы, которые будут быстрее падать и оставлять больший след. Функциональность из этих трёх функций можно для простоты перенести в команды. В этом случае получателем (Receiver) и исполнителем будет сама команда. Если потребуется выполнить какую-то команду внутри класса SBomber, мы будем динамически создавать эту команду, задавать ей параметры (SetParams) и передавать её функции-методу. Он, в свою очередь, будет вызывать для этой команды виртуальный метод Execute и удалять её из памяти. Отмена (Undo) действий или команд в нашей игре не нужна. `SBomber::CommandExecuter(AbstractCommand * pCommand);` 2. (*) Применение шаблона «Декоратор» в игре SBomber Задача: создание нового варианта бомбы в игре с помощью паттерна «Декоратор». Для класса Bomb создадим класс «Декоратор», который заставит бомбу падать быстрее и добавит при её рисовании новые графические элементы. Пусть класс декоратора называется BombDecorator и будет наследником DynamicObject, как и Bomb. Пусть класс-декоратор содержит объект «Бомба». Ему также необходимо переопределять (override) методы Move и Draw и вызывать эти методы у бомбы, которую он содержит.
alexander added 3 commits 2021-12-25 05:52:19 +00:00
This pull request can be merged automatically.
You are not authorized to merge this pull request.
You can also view command line instructions.

Step 1:

From your project repository, check out a new branch and test the changes.
git checkout -b lesson_2 master
git pull origin lesson_2

Step 2:

Merge the changes and update on Gitea.
git checkout master
git merge --no-ff lesson_2
git push origin master
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: alexander/geekbrains_gof#2
No description provided.