我是C++的新手,所以決定創建一個紙牌遊戲。我想將派生的卡片對象作爲卡片*存儲在一個向量中。當有人抽卡時,我想從矢量中獲取第一個對象並將其返回。這是事情變得棘手的地方,當我這樣做時,我想將它從Card *轉換回原來的派生類型。我正在讀的是,如果沒有明確的演員表,就不可能在C++中低調,我想重申一下或者找到一個解決方案。通過基類在一個向量中存儲派生對象,並在移除時將它們返回給派生對象
卡類
class Card
{
public:
int Cost;
string Name;
string Description;
Card() {}
Card(int Cost, string Name, string Description) : Cost(Cost), Name(Name), Description(Description) {}
};
靈魂類
class Soul : public Card
{
public:
int Attack;
int Defense;
Soul(int Cost, string Name, string Description, int Attack, int Defense) :Card(Cost, Name, Description), Attack(Attack), Defense(Defense) {}
void Attacking(Soul* DefendingSoul);
};
和最後一個特定的卡類的例子
class Fire_Spirit : public Soul
{
public:
Fire_Spirit() : Soul(1, "Fire Spirit", "A lonely spirit born from the inferno.", 2, 1) {}
~Fire_Spirit();
};
甲板類
class Deck
{
public:
Deck();
~Deck();
Card* Draw();
void Shuffle();
void Add(Card* cardToAdd);
void PrintDeck();
static vector<Card*> Cards;
};
Draw方法
auto Deck::Draw() -> Card*
{
auto temp = Cards.front();
Cards.erase(Cards.begin());
return temp;
}
理想我只想回到這裏的汽車,但我讀了我需要定義自動爲方法的返回值類型
我想(我很想做出另外的說明)從卡片*到Fire_Spirit(*?)或任何其他特定的卡片類別。我知道我可以做一個巨大的切換聲明,但必須有更好的方法?
我會仔細研究一下。非常感謝,你一直非常樂於助人! – Maspe36
事實上,現在你可以擁有三元組(kind,effectfunc,attackfunc)的集合並存儲在某個關聯容器中。這些可以用來構造我們的卡片類型。更靈活。 –