这是我创建的一个函数,用于尝试从一副牌中处理 n 张牌。当发牌时,它应该从牌堆中“移除”(即不能再次发牌)。我想我通过使用指针解决了这个问题,并通过从牌组后面抽牌减去我迄今为止处理的牌数。如果我再次调用该函数,我需要从缺少卡片的牌组中抽牌,并且由于我不会在任何时候洗牌,我认为这种方法会起作用。
'dealt' 在我的代码前面定义过,从 0 开始。 Card 是一个持有特定花色和价值的类。
当我调用 dealNumber 函数 6 次并且 n = 5 时,我放置了一个示例输出。
ST CK D3 HJ D9
HK DK SA SQ DT
HK S4 D2 C9 H5
HK H6 H7 H2 H4
HK HK SK S8 C5
HK H9 S3 D8 H8
然而,“甲板”是这样订购的:
S6 S2 S7 D7 S9 CQ D4 CA CJ SJ HQ DQ D5 HA DA C4 HT H3 CT D6 C2 S5 H8 D8 S3 H9 C7 C5 S8 SK HK C8 H4 H2 H7 H6 C3 H5 C9 D2 S4 C6 DT SQ SA DK DJ D9 HJ D3 CK ST
我处理的第一手牌是正确的,但其他手牌不正确。无论如何,“交易”都应该通过甲板类进行,所以我哪里错了?
Hand* Deck::dealingNumber(int p){
Card* dealtCards = new Card[p];
Card* oldDeck = deck;
for (int i = 0; i<n; i++){
dealtCards[i] = deck[(51-dealt)-i];
}
dealt = dealt+n;
deck = new Card[52-dealt];
for (int i = 0; i < 51-dealt;i++){
deck[i] = oldDeck[i];
}
delete[] oldDeck;
PokerHand* hand = new PokerHand(dealtCards);
return hand;