德州扑克游戏算法讲解

转载自: https://blog.csdn.net/wojiushi3344/article/details/8967735


德克萨斯扑克全称Texas Hold’em poker,中文简称德州扑克。起源于20世纪初,始于德克萨斯洛布斯镇,据传是当地人为了消磨时光,就发明了一种可以有很多人同时参加的扑克游戏,于是德州扑克就诞生了。它是一种玩家对玩家的公共牌类游戏。一张台面至少2人,最多22人,一般是由2-10人参加。德州扑克一共有52张牌,没有王牌。每个玩家分两张牌作为“底牌”,五张由荷官陆续朝上发出的公共牌。开始的时候,每个玩家会有两张面朝下的底牌。经过所有押注圈后,若仍不能分出胜负,游戏会进入“摊牌”阶段,也就是让所剩的玩家亮出各自的底牌以较高下,持大牌者获胜。

                                                                                                --------------------------<摘自百度百科>


            德州扑克是一种技巧性非常强的扑克游戏,有一定的运气成分,但玩家之间主要还是要靠斗智力、耍手腕、动脑筋。其规则非常简单,比较容易掌握,但是要达到精通的境界却有一定的难度。

 

   我们可以定义一个枚举来罗列出所有的牌型:


      
      
      
      
  1. //牌的类型枚举
  2. enum CardTypeEnum
  3. {
  4. ctNoneCard = 0,
  5. ctHighCard, //高牌
  6. ctDouble_OneCard, //一对
  7. ctDouble_TwoCard, //二对
  8. ctThreeCard, //三条
  9. ctStraightCard, //顺子
  10. ctFlushCard, //同花
  11. ctGourdCard, //三条加对子(葫芦)
  12. ctFourCard, //四条
  13. ctStraightFlush, //同花顺
  14. ctRoyalFlush //皇家同花顺
  15. };


牌型大小从小到大。

 

            德州扑克游戏一共有52张牌,我们可以先定义一个数组来保存52张牌int   nArrayCard[52]里面依次存0------51,接下来我们需要打乱数组的顺序来达到随机发牌的效果,然后依次发2张牌玩家的手中。具体的讲解在这点就写了,大家可以参考我以前写的斗地主洗牌发牌算法。http://blog.csdn.net/wojiushi3344/article/details/7522245。

 

如果你现在已经明白了洗牌,发牌的算法。那么恭喜你可以继续往下看了。

接下来,我们就开始讨论如何来确定玩家手中的牌为什么牌型。

 

 可以定义一个结构体来保存每张牌的信息数据,以便我们接下来的讨论。

 


      
      
      
      
  1. //牌的信息
  2. struct CardStruct
  3. {
  4. int s_nCardIndex; //牌的索引值0-51
  5. int s_nCardValue; //牌的大小2345678910111213
  6. int s_nCardSuit ; //牌的花色(1黑桃,2红桃,3梅花,4方块)
  7. int s_nImage_X; //牌在大图片中的X坐标
  8. int s_nImage_Y; //排在大图片中的Y坐标
  9. };


每个玩家手上的牌都由可能组合成上面枚举中的任何一种牌型,我们大家都明白一个道理假如一个屌丝已经和一个妹纸谈了很久的恋爱,可以和妹纸一聊天,一起压马路,一起牵手,一起亲嘴,一起睡觉。你会选择那样,我想如果不是那方面有问题都话都会选择最后一项吧!。同样的道理,一副牌你可以组合成最大的牌型,那么你为什么要组合成最小的牌型了。这样我们整个比较牌型的思路就出来了,我们首先找能组成最大的牌型,如果最大的不行我们就找次之的,最后实在不行我们就

你可能感兴趣的:(斗地主)