Есть некоторые объекты, которые Drawable
, а некоторые Movable
.
Все подвижные объекты можно прокрутить.
Я сохраняю все нарисованные объекты в векторе с именем drawables
, а подвижные объекты - ввектор называется movables
.У меня также есть векторы ships
и bullets
, которые содержат объекты типа Ship
и Bullet
соответственно.Ship
и Bullet
оба являются Movable
Вот структура классов:
class Drawable {
public:
void draw();
};
class Movable : public Drawable {
public:
void move();
}
class Ship : public Movable {
public:
Ship();
}
class Bullet : public Movable {
public:
Bullet();
}
Векторы объявлены следующим образом:
std::vector<Drawable*> drawables;
std::vector<Movable*> movables;
std::vector<Ship*> ships;
std::vector<Bullet*> bullets;
Дело в том, что каждый раз, когда я создаю Корабль, я должен добавлять его во все векторы, т.е.
drawables.push_back(ship);
movables.push_back(ship);
ships.push_back(ship);
Я создал отдельные векторы drawables
и movables
, так как у меня есть функция draw()
который вызывает метод draw()
всех объектов в векторе drawables
.Точно так же у меня есть функция move()
, которая вызывает метод move()
всех объектов в векторе movables
.
Мой вопрос: как мне изменить структуру, чтобы предотвратить добавление одной и той же вещи в разные векторы?Мне также нужно удалить объекты из всех векторов, как только цель будет достигнута.
Например, как только пуля попадет в кого-то или выйдет за пределы экрана, мне придется удалить его из векторов drawables
, movables
и bullets
после поиска во всех трех векторах.
Кажется, что я не использую правильный подход для хранения этих объектов.Пожалуйста, предложите альтернативу.
Это больше похоже на вопрос разработки программного обеспечения, чем на вопрос кодирования.При необходимости перенесите вопрос на другой форум.