我需要为一个小游戏管理蚂蚁和殖民地(实际上是为了实验)。
我有一个 Element 类,它定义了游戏中的所有实体(蚂蚁、殖民地、食物和其他东西……)
所有其他类都派生自这个类。
我的问题 :
我有一个类来管理所有实体。玩家可以选择他想要的东西。选择的实体被存储:Element* selection;
如果选择的实体是蚂蚁,玩家可以移动它。但是,因为选择变量是一个元素指针,显然我不能调用move()
Ant 类中的方法。
我认为要测试的内容:
如果我实现了一个isMovable()
返回 true 或 false 的 Element 方法,并且如果选择是可移动的,我会将它转换为 Ant 吗?我不知道什么是正确的解决方案。
我的搬家方法:
void Manager::movementEvent(sf::Vector2i mPosition)
{
sf::Vector2f mousePosition = sf::Vector2f((float)mPosition.x, (float)mPosition.y);
if(this->selection) {
// I need to move the selected Ant
}
}
谢谢您的帮助 !!
编辑
这是我的实际设计:
class Element {
private:
sf::Vector2f position;
int width, height;
public:
Element();
Element(sf::Vector2f position, int width, int height);
Element(const Element & element);
virtual ~Element();
};
class Colony: public Element {
private:
int capacity;
Queen *queen;
public:
Colony();
Colony(sf::Vector2f position, int width, int height, int capacity, Queen &queen);
Colony(Colony const & colony);
virtual ~Colony();
Colony& operator=(Colony const& colony);
};
class Ant: public Element
{
private:
sf::Vector2f destination;
int number, age, speed;
public:
Ant();
Ant(sf::Vector2f position, int number, int age, int width, int height, int speed);
Ant(const Ant & ant);
virtual ~Ant();
Ant& operator=(Ant const& ant);
};
class Manager {
private:
std::vector<Element*> ants;
std::vector<Element*> colonies;
Element* selection;
std::vector<Ant*> movement;
public:
Manager();
virtual ~Manager();
std::vector<Element*> getAnts();
std::vector<Element*> getColonies();
void addAnt(Ant* ant);
void addColony(Colony* colony);
void removeAnt(Ant* ant);
void removeColony(Colony* colony);
void draw(sf::RenderWindow * window);
void drawElement(sf::RenderWindow * window, std::vector<Element*> vector);
void selectionEvent(sf::Vector2i mousePosition);
bool checkSelection(sf::Vector2f mousePosition, std::vector<Element*> vector);
void movementEvent(sf::Vector2i mousePosition);
};