【发布时间】:2020-05-24 13:29:39
【问题描述】:
我正在做一个扑克引擎,以便不同的 PokerPlayer 代理可以在锦标赛模拟中相互对战。一旦我的项目完成,我希望人们在 PR 中提交他们自己的代理。为此,他们只需使用 MyPokerPlayer 类派生 PokerPlayer 类并覆盖 play() 方法。但我想确保他们的经纪人不会作弊。我不希望他们能够改变他们拥有的钱,也不希望他们能够改变他们在游戏开始时得到的卡片。
问题是 Game 类需要能够在 PokerPlayer 下注时拿走他们的钱(或者在他们获胜时给他们底池)并且需要能够在游戏开始时设置 PokerPlayer 的牌。所以PokerPlayer的派生类不能直接更新自己的钱和牌,但外部类Game可以。
PokerPlayer.h(这是应该由代理派生的类)
class PokerPlayer
{
private:
bool alive = true;
QList<Card> cards;
int money;
public:
PokerPlayer();
int getMoney() const;
bool isAlive() const;
virtual Action* play() = 0;
};
Game.cpp(我在其中为玩家分配牌、下注等...)
...
void Game::assignCardsToEveryPlayer() {
foreach (PokerPlayer* player, this->getPlayers()) {
QSet<Card> cards = PokerGameManager::generateUniqueCards(2);
player->setCards(cards.toList());
}
}
...
我不想要的: MYPokerPlayer.cpp(代理)
Action* MYPokerPlayer::play() override {
this->setMoney(1000000);
this->setCards(ACE, ACE);
// you get the idea...
}
我怎样才能做到这一点?
感谢您的宝贵时间,
【问题讨论】:
-
欢迎使用 stackoverflow,发布您拥有的代码,或者更好的是 minimal, reproducible example
-
感谢您的评论@anastaciu。我在我的代码中添加了示例,我认为这些示例说明了我在说什么
标签: c++ oop friend derived-class