ちょっとしたゲームのために(実際には実験のために)アリとコロニーを管理する必要があります。
ゲーム内のすべてのエンティティ (アリ、コロニー、食べ物など) を定義する Element クラスがあります。
他のすべてのクラスは、このクラスから派生します。
私の問題 :
すべてのエンティティを管理するクラスがあります。プレイヤーは自分が望むものを選択できます。選択したエンティティが保存されます : 選択Element* selection;
したエンティティが Ant の場合、プレイヤーはそれを移動できます。しかし、selection 変数は Element ポインターであるためmove()
、当然、Ant クラスにあるメソッドを呼び出すことはできません。
私がテストすると考えるもの:
true または false を返すElement メソッドを実装しisMovable()
、選択範囲が移動可能な場合は、それを 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);
};