这是我创建的一项功能,用于尝试处理一副牌组中的n张牌。发出卡片后,应该将其从卡组中“取出”(即无法再次发出)。我以为我可以通过使用指针并从卡组的背面减去我到目前为止已处理的卡数来解决此问题。如果再次调用该函数,则需要从缺少卡片的卡片组中进行绘图,并且由于我在任何时候都不会拖移卡片组,因此我认为此方法会起作用。

'dealt'是在我的代码的前面定义的,从0开始。
卡是具有一定西装和值(value)的一类。

当我调用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 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

我所处理的第一手是正确的,但其他人则不正确。不管怎样,“dealt”都应保留在甲板课上,所以我要去哪里错了?

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;

最佳答案

您在第二个for循环中遇到一个错误的错误:

for (int i = 0; i < 52 /* change from 51 to 52 */ - dealt; i++){
    deck[i] = oldDeck[i];
}

10-07 20:27