从一副牌中发牌(不重复的牌)
Dealing from a deck of cards (non repeating cards)
这是我创建的一个函数,用于尝试从牌组类中发n张牌。当发牌时,它应该从牌组中"移除"(即不能再发牌)。我认为我通过使用指针解决了这个问题,并从牌组的后面减去我目前发的牌的数量。如果我再次调用这个函数,我需要从缺少牌的那副牌中抽取牌,因为我在任何时候都没有洗牌,所以我认为这个方法是可行的。
' dealing '在前面的代码中定义,从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
'deck'的顺序是这样的:
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 C7C5 S8 SK HK C8 H4 H2 H7 H6 C3 H5 C9 D2 S4 C6 DT SQ SA DK DJ D9 HJ D3 CK ST
我发的第一手牌是对的,但其他的不是。无论如何,"处理"应该贯穿deck类,所以我哪里出错了?
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循环出现了一个off-by- 1错误:
for (int i = 0; i < 52 /* change from 51 to 52 */ - dealt; i++){
deck[i] = oldDeck[i];
}
我将采用一个非常不同的方法使用两个数组。第一个数组保存牌组,第二个数组保存已发牌/未发牌标志。
char cards[52][3]; // 52 cards @ 3 characters each
int dealtFlag[52]; // 0=not dealt, 1=dealt
然后从0-51中选择一个随机数,检查dealtFlag[randNum]是否为零,如果为零则使用该卡。
不确定这本身就是问题所在。无论如何,这是一个问题:修改
for (int i = 0; i < 51-dealt;i++){
deck[i] = oldDeck[i];
}
for (int i = 0; i < 52-dealt;i++){
deck[i] = oldDeck[i];
}
使用STL类会简单得多。但就我个人而言,我更喜欢使用链表或类似的堆栈。
- 使用strcpy将char数组的元素复制到另一个数组
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 在 c++ 中拥有一组结构的正确方法是什么?
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何将三维尺寸不固定的三维阵列展平为一维阵列
- 初始化一副牌C++
- 将一副牌循环100次(一副牌)
- 链表一副牌,只出现51张牌,没有出现52张
- 在一副牌上得分
- 放置在结构中的一副牌
- 使用向量c++存储和洗牌一副牌
- C++ - 使用枚举生成一副纸牌
- 我需要帮助在C++中生成一副纸牌
- 如何在c++中生成一副牌
- 如何初始化一副纸牌的 3D 数组
- 从一副牌中发牌(不重复的牌)
- 制作一副纸牌
- 链表vs.动态数组实现一副牌?c++
- 构建一副纸牌的多个错误