c++ - 从一副牌发牌(不重复的牌)

标签 c++ class pointers

这是我创建的一个函数,用于尝试处理一副纸牌中的 n 张纸牌。发牌时,应该将其从牌组中“移除”(即不能再次发牌)。我想我通过使用指针解决了这个问题,并通过从牌组背面抽取减去我到目前为止发的牌数来解决这个问题。如果我再次调用该函数,我需要从缺少牌的牌组中抽牌,并且由于我在任何时候都没有洗牌,所以我认为这种方法可行。

'dealt' 在我的代码中定义得较早,从 0 开始。 Card 是一个拥有特定花色和值(value)的类。

当我调用 dealNumber 函数 6 次并且 n = 5 时,我放置了发牌手数的示例输出。

ST CK D3 HJ D9
HK DK SA SQ DT
HK S4 D2 C9 H5
香港 H6 H7 H2 H4
香港HK SK S8 C5
香港 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

我处理的第一手牌是正确的,但其他的则不是。无论如何,'deal' 应该在甲板类中延续,所以我哪里错了?

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];
}

关于c++ - 从一副牌发牌(不重复的牌),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16432244/

相关文章:

phpDoc 类常量文档

java - 我是否必须将一个类声明为公共(public)(它是程序中唯一没有人会使用的类)

c++ - 指向地址的指针似乎超出了范围

c++ - 为什么这不会给出编译错误?

c++ - 如何从 MPI 程序访问 MySQL(使用 MPICH2)?

c# - 树阵列到站点地图

c++ - (C++)用于实例化新对象并将其分配给指向相同对象类型的二维指针 vector 的语法?

c++ - float 组是否总是与 16 字节边界对齐?

C++构造函数调用另一个构造函数

c++ - 指向 int 类型的指针在 C++ 中不能正常协作