德州持有直接止回阀值
Texas holdem straight check values
本文关键字:止回阀 更新时间:2023-10-16
我在评估七张牌的直牌时遇到了一个小问题,你想要得到最高的5张牌。
我可以直接拿到最高的5张牌,只要手里没有一对,例如:
孔卡:2h,3d
社区卡:4h、5s、6s、8d、9d、
输出:2 h、3 d、4 h, 5 s, 6 s
因为直线内没有对,所以它计数和输出都很好。当直线内有一对时,问题就出现了例如:
孔卡:2h, 3d,
社区卡:4h、4c、5s、6s、8d
输出:2 h、3 d、4 h, 4 c, 5 s
所以它是在直线上数成对的牌,我需要一种方法跳过一对牌中的一张,只选择一张。同样的情况也会发生。
它为什么这样做对我来说是完全有意义的,但是对于我的生命,我想不出一个方法来修复它。
函数如下:
bool Player::checkForStraight()
{
//Loops through the ranks from greatest to least 0 is NONE is the enum class
for (int i = FACES; i >= 1; i--)
{
//Checks to see if a straight exists (_checkNumfaces is an array[13] to
//hold the amount of each card
if ((_checkNumFaces[i - 1] >= 1) && (_checkNumFaces[i - 2] >= 1) &&
(_checkNumFaces[i - 3] >= 1) && (_checkNumFaces[i - 4] >= 1) &&
(_checkNumFaces[i - 5] >= 1))
{
//If a straight exists loop through the cards(sorted in another
//function from lowest to highest
for (int j = 6; j >= 0; j--)
{
//if the face matches the enum value of i then we have a
//straight there down because I checked if the straight
//existed already
if ((*p_playerHand[j])->face == (Face)(i))
{
//PlayerHighCards out of the seven
p_playerHighFive[4] = p_playerHand[j];
p_playerHighFive[3] = p_playerHand[j - 1];
p_playerHighFive[2] = p_playerHand[j - 2];
p_playerHighFive[1] = p_playerHand[j - 3];
p_playerHighFive[0] = p_playerHand[j - 4];
return true;
}
}
}
}
return false;
}
很抱歉底部的劣质格式,但只有花括号,它们在我的代码中很好。
我知道如何检查A,2,3,4,5直,我只是还没有编码,我只是真的难住了如何移动过去的一对,我在谈论。不只是对子,一种有3个(所以如果直子有3个)或者不止一对,所以是2对。不会在此之外发生,因为没有足够的物理卡牌来关注它。
抱歉,如果我的代码不是那么优雅,如果有更好的方法,然后让我知道。我还没有学过模板或stl,因为我才刚刚开始学习语言,所以不使用这些解决方案将是伟大的。
我试着尽可能地描述,但是,我是新手,所以如果你有任何问题就问:)
下面是计算牌组中不同牌个数的函数
void Player::countNumFaces(const int& size)
{
for (int i = 0; i < (size); i++)
{
switch((*p_playerHand[i])->face)
{
case Face::NONE: std::cout << "Joker" << std::endl;
case Face::TWO: _checkNumFaces[0] ++; break;
case Face::THREE: _checkNumFaces[1] ++; break;
case Face::FOUR: _checkNumFaces[2] ++; break;
case Face::FIVE: _checkNumFaces[3] ++; break;
case Face::SIX: _checkNumFaces[4] ++; break;
case Face::SEVEN: _checkNumFaces[5] ++; break;
case Face::EIGHT: _checkNumFaces[6] ++; break;
case Face::NINE: _checkNumFaces[7] ++; break;
case Face::TEN: _checkNumFaces[8] ++; break;
case Face::JACK: _checkNumFaces[9] ++; break;
case Face::QUEEN: _checkNumFaces[10] ++; break;
case Face::KING: _checkNumFaces[11] ++; break;
case Face::ACE: _checkNumFaces[12] ++; break;
}
}
std::cout << "| 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 | 10 || J || Q || K || A |" << std::endl; //Print for testing
for (int i = 0; i < FACES; i++) { std::cout << "| " << _checkNumFaces[i] << " |"; } //Print for testing
}
代替
p_playerHighFive[4] = p_playerHand[j];
p_playerHighFive[3] = p_playerHand[j - 1];
p_playerHighFive[2] = p_playerHand[j - 2];
p_playerHighFive[1] = p_playerHand[j - 3];
p_playerHighFive[0] = p_playerHand[j - 4];
return true;
试
int k = 4;
int l = 0;
p_playerHighFive[k] = p_playerHand[j-l];
k--;
l++;
while(k>=0)
{
if( isSameValue(p_playerHighFive[k+1], p_playerHand[j-l]) ) //check if card has same value
{
l++;
continue;
}
p_playerHighFive[k] = p_playerHand[j-l];
k--;
l++;
}
相关文章:
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 没有为自己的结构调用列表推回方法
- 架构决策:返回std::future还是提供回调
- 正在为Xtensa simcall函数编写回调函数
- C++:正在检查LinkedList中的回文-递归方法-错误
- 当系统的卷被修改时,如何修改WASAPI环回捕获卷
- 如何在C++中使用非静态成员函数作为回调函数
- 存储模板类型以强制转换回派生<T>
- 我是否需要在下一次转移时将所有权*转移回转移队列
- Usaco第1.6节主要回文
- FLTK:按下哪个按钮 - 将数字传递给按钮的回调 (lambda)
- 超级强大的AndroidAudioIO环回,仅输出到左耳
- 当服务中的事件被触发时,如何将响应从服务发送回客户端?
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 为什么我不能将字符串::赋回字符串?
- 向量推回调用析构函数时调用析构函数
- 用于在回调中调用解析器的设计模式
- 如何在 constexpr 函数中实现回退运行时
- 最大的回文产品 - 程序未运行,编写解决方案但无法理解问题
- 德州持有直接止回阀值