lesson_2 #2
Loading…
Reference in New Issue
No description provided.
Delete Branch "lesson_2"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Задача: применить паттерн «Команда» для выполнения частых стандартных действий в главном классе игры SBomber, таких как удаление динамических и статических объектов, бросание бомбы.
В проекте SBomber уже есть функции, которые можно оформить как «Команды»:
Первые две команды будут получать указатели на удаляемый объект и ссылку на массивы, откуда его надо удалить.
Для третьей команды можно передавать, константный указатель на объект Plane (из него команда будет брать координаты самолета), ссылку на массив динамических объектов объектов (для создания динамического объекта Bomb) и константную ссылку на количество бомб у самолета (количество доступных бомб хранится в объекте SBomber). Можно передавать ещё скорость падения и размер (ширину) воронки от взрыва — это позволит в будущем бросать более мощные бомбы, которые будут быстрее падать и оставлять больший след.
Функциональность из этих трёх функций можно для простоты перенести в команды. В этом случае получателем (Receiver) и исполнителем будет сама команда. Если потребуется выполнить какую-то команду внутри класса SBomber, мы будем динамически создавать эту команду, задавать ей параметры (SetParams) и передавать её функции-методу. Он, в свою очередь, будет вызывать для этой команды виртуальный метод Execute и удалять её из памяти. Отмена (Undo) действий или команд в нашей игре не нужна.
SBomber::CommandExecuter(AbstractCommand * pCommand);
Задача: создание нового варианта бомбы в игре с помощью паттерна «Декоратор».
Для класса Bomb создадим класс «Декоратор», который заставит бомбу падать быстрее и добавит при её рисовании новые графические элементы. Пусть класс декоратора называется BombDecorator и будет наследником DynamicObject, как и Bomb. Пусть класс-декоратор содержит объект «Бомба». Ему также необходимо переопределять (override) методы Move и Draw и вызывать эти методы у бомбы, которую он содержит.
Step 1:
From your project repository, check out a new branch and test the changes.Step 2:
Merge the changes and update on Gitea.