注册 登录
编程论坛 C++教室

求助: 德克萨斯扑克里面的一个算法

zkang5 发布于 2012-02-23 12:39, 2004 次点击
比方说有7张牌, 如何在这7张牌里找出5张牌 组合成最大的。

这下面是牌的大小顺序,  怎么用程序实现啊   附件里面有个德克萨斯扑克的源码, 我看不懂,

皇家同花顺(royal flush):由AKQJ10五张组成,并且这5张牌花色相同   德克萨斯纸牌游戏中截图
  同花顺(straight flush):由五张连张同花色
只有本站会员才能查看附件,请 登录
的牌组成
  4条(four of a kind):4张同点值的牌加上一张其他任何牌
  满堂红(full house)(又称“葫芦”):3张同点值加上另外一对
  同花(flush):5张牌花色相同,但是不成顺子  
 顺子(straight):五张牌连张,至少一张花色不同  
 3条(three of a kind):三张牌点值相同,其他两张各异
  两对(two pairs):两对加上一个杂牌  
 一对(one pair):一对加上3张杂牌  
 高牌(high card):不符合上面任何一种牌型的牌型,由单牌且不连续不同花的组成  
 相同牌型比点值,4种花色不分大小,点值以A为最大点,2为最小点。比点值本着牌型优先和最大点优先的原则,先比主要部分,再比较次要部分,先比最大点,再比次大点。例如先比较葫芦的3条部分,3条大的胜出,如果3条部分相等,再比较1对部分。顺子比牌中,A2345的顶张为5,A算1,属于最小的顺子。对于散牌比大小,先比较各自的最大牌,如果最大牌的点值不同,则立刻分出胜负,如果最大牌点值相同,再比次大牌,以此类推,最终比出大小,如果所有点值相等,则不分胜负,平分池底。
14 回复
#2
zkang52012-02-23 13:54
有人给回复一个吗
#3
BianChengNan2012-02-23 14:42
我没看算法呢还,我先说说我的想法,对每个玩家,先把他的牌定个等级,也就是下面的这些
4条(four of a kind):4张同点值的牌加上一张其他任何牌
  满堂红(full house)(又称“葫芦”):3张同点值加上另外一对
  同花(flush):5张牌花色相同,但是不成顺子  
 顺子(straight):五张牌连张,至少一张花色不同  
 3条(three of a kind):三张牌点值相同,其他两张各异
  两对(two pairs):两对加上一个杂牌  
 一对(one pair):一对加上3张杂牌  
 高牌(high card):不符合上面任何一种牌型的牌型,由单牌且不连续不同花的组成

确定属于哪一类,然后在排好序。

进行玩家之间的比较的时候,只需要先比等级,如果等级相同,则再从大到小比较。
归根到底是一个分类排序的过程

 
#4
zkang52012-02-23 16:03
回复 3楼 BianChengNan
在玩牌的时候, 先是每个人两张牌, 然后会有5张公共牌,  就是每个人7张牌,
第一步应该是先从每个人自己的7张牌中找到最大的    然后才各个玩家进行比较 (比方说有8个玩家)
现在我的问题就是 如何从每个玩家的7张牌中挑出5张组合成一个最大的牌
#5
zkang52012-02-23 16:17
回复 2楼 zkang5
朋友, 说个qq吧, 咱俩聊聊  我qq  519006994  我是游戏公司的
#6
zkang52012-02-23 16:17
回复 3楼 BianChengNan
朋友, 说个qq吧, 咱俩聊聊  我qq  519006994  我是游戏公司的
#7
zkang52012-02-24 12:18
各位高手帮帮忙啊
#8
BianChengNan2012-02-24 12:54
以下是引用zkang5在2012-2-23 16:03:50的发言:

在玩牌的时候, 先是每个人两张牌, 然后会有5张公共牌,  就是每个人7张牌,
第一步应该是先从每个人自己的7张牌中找到最大的    然后才各个玩家进行比较 (比方说有8个玩家)
现在我的问题就是 如何从每个玩家的7张牌中挑出5张组合成一个最大的牌
是这样啊,可以不要手中的牌吗?答案应该是不可以,否则这游戏就有漏洞了。那情况就变成了自己手中的两张牌加上从公共区里选出的三张牌组成最大的结果。
最差的算法是全排列找到所有情况一一记录比较。。。肯定不会用这种方法。。。我也不太懂啊,继续思考
我的qq:273282378
#9
zkang52012-02-24 14:53
以下是引用BianChengNan在2012-2-24 12:54:59的发言:

是这样啊,可以不要手中的牌吗?答案应该是不可以,否则这游戏就有漏洞了。那情况就变成了自己手中的两张牌加上从公共区里选出的三张牌组成最大的结果。
最差的算法是全排列找到所有情况一一记录比较。。。肯定不会用这种方法。。。我也不太懂啊,继续思考
我的qq:273282378
可以不要手中的牌,
#10
zkang52012-02-24 15:18
以下是引用BianChengNan在2012-2-24 12:54:59的发言:

是这样啊,可以不要手中的牌吗?答案应该是不可以,否则这游戏就有漏洞了。那情况就变成了自己手中的两张牌加上从公共区里选出的三张牌组成最大的结果。
最差的算法是全排列找到所有情况一一记录比较。。。肯定不会用这种方法。。。我也不太懂啊,继续思考
我的qq:273282378
可以不要手中的牌, 加上公共牌,应该是每个人7张牌,  我的思路就是先从每个人自己的7张牌中找出5张最大的, 然后再各个玩家进行比较。现在主要就是程序实现上有点问题
#11
BianChengNan2012-02-24 16:28
以下是引用zkang5在2012-2-24 15:18:31的发言:

可以不要手中的牌, 加上公共牌,应该是每个人7张牌,  我的思路就是先从每个人自己的7张牌中找出5张最大的, 然后再各个玩家进行比较。现在主要就是程序实现上有点问题
不要手中的牌,那如果公共牌最大呢?大家都要公共牌了,谁还要手里的牌干嘛
#12
天涯海角sxl2012-03-03 08:13
回复 11楼 BianChengNan
我昨天刚玩了一下德州扑克,挺有意思的。
基本规则和楼主说的一样。最终亮牌时你手中有两张牌(只有你知道),桌子上有五张牌,你从这七张牌中选五张(且只能选五张)组成最大的一副牌,和剩下的人对决。
具体执行规则看一下百度百科
#13
xihuadaxue2012-03-04 20:32
回复 11楼 BianChengNan
都要公共牌~那么桌上玩家到最后好像是平分桌面上的筹码~
#14
BianChengNan2012-03-05 12:44
以下是引用zkang5在2012-2-24 15:18:31的发言:

可以不要手中的牌, 加上公共牌,应该是每个人7张牌,  我的思路就是先从每个人自己的7张牌中找出5张最大的, 然后再各个玩家进行比较。现在主要就是程序实现上有点问题
是应该这样的,程序上的问题自己再解决一下,加油
#15
天涯海角sxl2012-03-12 20:25
回复 11楼 xihuadaxue
牌型一致,平分筹码

[ 本帖最后由 天涯海角sxl 于 2012-3-12 22:25 编辑 ]
1