Я пишу персональный проект, в котором игроки рисуют карты из колоды. Затем игрок активирует карту (есть разные типы карт, каждый с разным эффектом), и, наконец, он возвращает карту в низ колоды.
Пока мне удалось вытащить карту из колоды и сохранить ее в моем плеере. Давайте представим, что у меня есть только два типа карт:
class card
{
public:
virtual void activate() = 0;
};
class moveAnywhere : public card
{
public:
virtual void activate();
};
class bonusQuestion : public card
{
public:
virtual void activate();
};
Тогда у меня есть колода (где игрок - друг):
class deck
{
private:
std::queue<std::unique_ptr<card>> cards;
public:
friend class player;
};
И, наконец, мой игрок:
class player
{
private:
std::list<std::unique_ptr<card>> usableCards;
public:
void drawCard(deck&);
};
void player::drawCard(deck& theDeck)
{
usableCards.push_back(std::unique_ptr<card>(std::move(theDeck.cards.front())));
theDeck.cards.pop();
}
Таким образом, мне удалось взять первую карту из колоды и сохранить ее в руке моего игрока. Но моя проблема в том, как активировать и вернуть карты в колоду.
1) Было бы лучше card::activate(player&)
, чтобы я знал, кто активировал карту (что странно, поскольку карта принадлежит игроку, поэтому не нужно указывать это).
2) Было бы лучше добавить частного участника в карты, например, player owner;
и каждый раз, когда кто-то берет карту, он назначает владельца карты.
3) Или как я могу активировать карты из игрока и использовать этого игрока в эффектах карты.
4) Как логично вернуть карту в колоду? Должен ли это быть метод карты, игрока, колоды?
Мне кажется, я слишком усложняю ситуацию, я просто сбит с толку и мне нужно немного подтолкнуть в правильном направлении.