gpt4 book ai didi

c++ - 我怎么知道谁拥有某个指针

转载 作者:行者123 更新时间:2023-11-27 22:35:15 24 4
gpt4 key购买 nike

我正在编写一个个人项目,让玩家从一副牌中抽牌。然后玩家激活卡片(有不同类型的卡片,每种卡片具有不同的效果),最后他将卡片放回牌组底部。

到目前为止,我已经设法从牌组中抽出卡片并将其存储在我的播放器中。假设我只有两种卡片:

class card
{
public:
virtual void activate() = 0;
};

class moveAnywhere : public card
{
public:
virtual void activate();
};

class bonusQuestion : public card
{
public:
virtual void activate();
};

然后我有我的套牌(玩家是 friend ):

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) 将私有(private)成员添加到卡片中会更好吗? player owner; 每次有人抽一张牌时,它都会为该牌指定一个所有者。

3) 或者我如何从玩家内部激活卡片,并在卡片的效果中使用该玩家。

4) 将牌放回牌组的合理方式是什么?那应该是卡片、玩家、套牌的方法吗?

我相信我把情况复杂化了,我只是很困惑,需要朝着正确的方向稍微插入一下。

最佳答案

根据现实生活中的直觉,当人类牌手需要将牌放回牌组时,您通常会要求玩家打出牌,然后将其放回牌组(与更不寻常的场景是卡片在没有玩家参与的情况下将自己放回牌组中——这通常是为魔术保留的:))

因此,我会选择类似的东西:

std::unique_ptr<card> player :: activateAndReturnCard()
{
// code for the player-object to choose a card to
// remove from his hand, activate it, and then return it
}

... 然后牌组类(或任何人)可以在适当的玩家对象上调用上述方法,并在返回后将结果放回牌组中。鉴于上述情况,让玩家对象调用 activate(*this); 在卡片对象上是合理的(因为卡片的激活逻辑可能需要读取和/或更新玩家-对象的某种状态)。

关于c++ - 我怎么知道谁拥有某个指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55348205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com