我有一个小问题,在七张牌手中评估一个直线,你想要获得最高的5张牌。
只要手中没有一对,我就可以获得最高的5张牌,例如:
洞牌:2小时,3d
社区卡:4h,5s,6s,8d,9d,
输出:2h,3d,4h,5s,6s
因为直线内没有对,所以它很好并且输出很好。 当直线内有一对时会出现问题 例如:
洞牌:2小时,3d,
社区卡:4h,4c,5s,6s,8d
输出:2h,3d,4h,4c,5s
所以它正在计算直线对,我需要一种方法来跳过其中一对配对卡并只选择一个。这也发生在3种情况中。
这对我来说完全有意义,为什么它这样做,但对于我的生活,我无法想出一种方法来解决它。
这是功能:
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
}
答案 0 :(得分:0)
而不是
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++;
}