我正在创建一个可以处理扑克牌的简单程序。我已经开始创建手牌,但遇到了一个问题:发牌时,牌并没有从牌堆中移除。套牌是包含花色、价值和颜色的卡片对象的向量。
这只是我为它编写的简短测试程序:
Deck testDeck; //default deck is in order
cout << testDeck << endl; //print the deck out
Hand testHand(5, testDeck); //generate a hand of 5 cards from testDeck
cout << testHand << endl; //print the hand
cout << testDeck << endl; //print the deck
初始化的卡组
2H 3H 4H 5H 6H 7H 8H 9H 10H JH QH KH AH 2D 3D 4D 5D 6D 7D 8D 9D 10D JD QD KD AD
2C 3C 4C 5C 6C 7C 8C 9C 10C JC QC KC AC 2S 3S 4S 5S 6S 7S 8S 9S 10S JS QS KS AS
从牌组中获得 5 张牌样本
2H 3H 4H 5H 6H
套牌应该缺少 5 张牌,但它只是归还初始套牌,就好像什么都没发生一样。
2H 3H 4H 5H 6H 7H 8H 9H 10H JH QH KH AH 2D 3D 4D 5D 6D 7D 8D 9D 10D JD QD KD AD
2C 3C 4C 5C 6C 7C 8C 9C 10C JC QC KC AC 2S 3S 4S 5S 6S 7S 8S 9S 10S JS QS KS AS
这是我的构造函数:
Hand::Hand(int numCards, Deck myDeck)
{
myHand = myDeck.takeTopXCards(numCards);
}
这是 takeTopXCards 函数:
vector<Card> Deck::takeTopXCards(int numCards)
{
vector<Card> retCards;
for(int i = 0; i < numCards; i++)
retCards.push_back(takeTopCard());
return retCards;
}
当然还有 TakeTopCard 函数:
Card Deck::takeTopCard()
{
Card ret = myDeck[0];
myDeck.erase(myDeck.begin());
return ret;
}
我在使用擦除之前和之后通过打印 myDeck[0](myDeck 是 Deck 类的私有数据成员)检查了 takeTopCard 函数,它工作正常。出于某种原因,一旦 takeTopXCards 返回,传递给它的 Deck 对象(测试程序中的 testDeck)就不会改变。
如果您还想看其他内容,请询问,我会在此处将其添加到末尾。谢谢。