基于Qt的德州扑克游戏05:7选5

按照德州扑克的标准流程,性感荷官会发5张牌作为公共牌,玩家拥有两张牌。游戏最后,从5张公共牌和2张玩家牌中选择5张牌作为玩家最终牌进行最终对比牌。

本文需要设计如何进行7选5,包含两部分:一部分就是从7张牌中选择5张牌,为了在最终所有玩家比牌环节中获胜,我们要选择可组成最大牌型的5张牌,以及最大牌型可能最大的5张牌。

7选5

按照标准排列组合有21中可能

C75=7×6×5×4×3×2×1(5×4×3×2×1)×(2×1)=21C^{5}_{7} = \frac{7 \times 6 \times 5 \times 4 \times 3 \times 2 \times 1}{(5 \times 4 \times 3 \times 2 \times 1 )\times (2 \times 1)} = 21

就是简单的for循环。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
///
/// 5张公共牌,2张玩家牌,从这7张牌里面获得最大牌型的组合
/// \brief check7Cards
/// \param input
/// \param output
///
inline void check7Cards(QList<Card> input,Cards &output){
assert(input.size()==7);

//当前所有可能组合中最大的那个
BrandType bt=None;//默认情况下是无效

//c 5 7
for(int a=0;a<3;a++){
for(int b=a+1;b<4;b++){
for(int i=b+1;i<5;i++){
for(int j=i+1;j<6;j++){
for(int z=j+1;z<7;z++){
...
}
}
}
}
}
}

最大的牌型

第2个问题,要从21种可能中提取最大的牌型最大的数值,以保证最后结果最大。

临时保存当前组合,然后使用牌型对比函数比较大小,保留最大的那个。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//给5张牌赋值
Cards cs;
cs.card[0]=input[a];
cs.card[1]=input[b];
cs.card[2]=input[i];
cs.card[3]=input[j];
cs.card[4]=input[z];
checkBranchType(cs);
//可能会出现多个相同牌型,取最大的那个
//qDebug()<<cs.status;
//如果当前牌型比bt当前值大,直接赋值
if(cs.status>bt){
bt=cs.status;//赋值
output=cs;
}else if(cs.status==bt){
//如果当前牌型与bt当前值一样大,需要比较那个大
//这个函数是用来比较结果的,这里也能用
int r= CardsCompare(cs,output);
switch(r){
case 1:
output=cs;
break;
case 0:
case 2:
break;
}
}

效果

牌型检测


基于Qt的德州扑克游戏05:7选5
https://blog.jackeylea.com/qt/select-5-from-7-of-texas-holdem-poker/
作者
JackeyLea
发布于
2024年8月31日
许可协议