按照德州扑克的标准流程,性感荷官会发5张牌作为公共牌,玩家拥有两张牌。游戏最后,从5张公共牌和2张玩家牌中选择5张牌作为玩家最终牌进行最终对比牌。
本文需要设计如何进行7选5,包含两部分:一部分就是从7张牌中选择5张牌,为了在最终所有玩家比牌环节中获胜,我们要选择可组成最大牌型的5张牌,以及最大牌型可能最大的5张牌。
7选5
按照标准排列组合有21中可能
C75=(5×4×3×2×1)×(2×1)7×6×5×4×3×2×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
|
inline void check7Cards(QList<Card> input,Cards &output){ assert(input.size()==7);
BrandType bt=None;
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
| 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);
if(cs.status>bt){ bt=cs.status; output=cs; }else if(cs.status==bt){ int r= CardsCompare(cs,output); switch(r){ case 1: output=cs; break; case 0: case 2: break; } }
|
效果