我按等级排序卡片以使事情变得更容易。我需要在正确的方向上为我如何设置这些检查而感到内疚。
例如,为了检查直线,我知道我只需要遍历已排序的牌并查看每个等级是否比前一张牌多一个。以下是我的直道。
对于两对,我不知道如何检查具有相同等级的两张连续牌,两次。
满屋基本上与两对相同,但第二对(或第一对)实际上是三元组。
四种类型的方式可以和我非常确定的三种方式相同。
直接冲洗只是笔直和齐平的组合。皇家同花顺是一种同花顺,从排序时的10开始。
这是我的代码。任何帮助将不胜感激,请提供示例(如果有帮助,我也有SortBySuit功能)。
NewGame.SortByValue();
for( int i = 0; i < 5; i++ )
tempHand[ i ] = NewGame.SetArray( i );
if( tempHand[ 0 ].GetValue() == tempHand[ 1 ].GetValue() + 1 && tempHand[ 0 ].GetValue() == tempHand[ 2 ].GetValue() + 2 &&
tempHand[ 0 ].GetValue() == tempHand[ 3 ].GetValue() + 3 && tempHand[ 0 ].GetValue() == tempHand[ 4 ].GetValue() + 4 )
winType = 4;
//straight
//for( int i = 0; i < 5; i++ )
// for( tempHand[ i ].GetValue() == tempHand[ i + 1 ].GetValue() ||
for( int i = 0; i < 5; i++ )
{
if( tempHand[ i ].GetValue() >= 11 || tempHand[ i ].GetValue() == 1 )
{
if( tempHand[ 0 ].GetValue() == tempHand[ 1 ].GetValue() || tempHand[ 1 ].GetValue() == tempHand[ 2 ].GetValue() ||
tempHand[ 2 ].GetValue() == tempHand[ 3 ].GetValue() || tempHand[ 3 ].GetValue() == tempHand[ 4 ].GetValue() )
winType = 1;
}
}//jack or better
答案 0 :(得分:0)
你需要从排名最高的牌开始并向后工作......就像你对扑克一样。
我有同花顺吗?是王室吗?
我有直线吗?
我有满堂红吗?
为什么从顶部开始?因为那时你可以放心地从手上计算,因为你知道你拥有最佳的手 对于两对问题/满屋问题。你需要概括你的手计算算法,取一个等于或小于7的数字(所以你也可以玩hold'em),然后递归调用它,直到你没有卡片为止。
例如:你的手是3 J和2 Q.
迭代1(传入5张牌) - 检测3 J.
迭代2(传入2张牌) - 检测2 Q.
最终通行证 - 计算总手数(由2个解决方案组成)。
2对同样的事情。
迭代1(传入5张牌) - 检测2 J.
迭代2(传入2张牌) - 检测2 Q.
迭代3(传入1张卡片) - 检测1 K.
最终通行证 - 计算总手数(由3个解决方案组成)。检测2对,女王高和国王。国王很重要,因为你可以遇到匹配的牌,单张牌。
简而言之,您需要一个从主函数调用的递归函数。函数的每次迭代都应该从已经传递的牌中检测出最佳牌。
答案 1 :(得分:0)
你是(1)最后检查千斤顶,(2)找不到匹配时提前退出。
说你有一个满屋子(Q-Q-Q-9-9)。如果你先检查一个完整的房子,它会匹配。但是你可能会检查3种(也会匹配),2对(也会匹配)和一对(仍然匹配,因为至少有两个Q' )。最后,你最终会说Q-Q-Q-9-9是一对皇后。
你需要先从排名较低的牌开始,然后再从排名最高的牌开始,然后在找到比赛后立即退出。
答案 2 :(得分:0)
为了检查您是否有一对或三元组,您可以计算一种卡的直方图。 例如,遍历所有可用的卡片并增加您找到的每个号码的数量,这样如果您有一手牌
2 4 4 5 A
你的垃圾箱会记录
卡 - 计数
A - 1
2 - 1
3 - 0
4 - 2
5 - 1
等
然后你可以迭代这个并计算两种类型的数量,三种类型和四种类型。 2 x两种=两对,1 x两种+ 1 x三种=满屋。