Моя проблема: у меня есть карточная игра, она состоит из миньонов, заклинаний и снаряжения, которые являются всеми типами карт, я знаю виртуальные определения методов. Мне нужно использовать функции GetHealth()
, RemoveHealth()
и AddHealth()
на Minion
, но я не хочу использовать их на Spell
или Equipment
. Что я должен сделать sh, это:
class CCard
{
//Member variables and functions
};
class CMinion : public CCard
{
//Member variables and functions
int GetHealth() const {return mHealth;}
};
std::unique_ptr<CCard> minion = std::make_unique<CMinion>(params);
minion->GetHealth(); //I realize this isn’t possible the way it is.
В настоящее время у меня есть отдельный список миньонов с и идентификатором, связанным с картой, когда карта находится в моей руке, я вместо этого помещаю объект Minion на столе, а не на карте. Мой лектор хочет чистого полиморфизма и наследования , так что это неуклюжее решение. Я также обсуждал помещение GetHealth()
и других необходимых методов в классе Card и возвращение к классам, которые не нуждаются в нем, 0. Он сказал: «Это лучшее решение, но опять же я должен использовать наследование и полиморфизм».
Он считает, что моя архитектура неверна, и я должен ее реструктурировать.
У меня должно быть: Вектор карт, являющийся экземпляром Minion
, Spell
или Equipment
. Стол, рука и колода должны быть векторами карт, но мое текущее решение - колода и рука - векторы карт, а моя таблица - вектор миньонов.
Может кто-нибудь придумать лучшую структуру или эффективное решение?