zoukankan      html  css  js  c++  java
  • C#网络版斗地主——出牌算法和规则

    源码在上一篇文章:http://www.cnblogs.com/zhubenwuzui/archive/2009/06/06/1497673.html

    本文是对C#网络版斗地主的开发总结,同时也是最后一篇。

    其他三篇文章地址:

    网络部分实现:http://www.cnblogs.com/zhubenwuzui/archive/2009/06/07/1497968.html

    地主权限的传递:http://www.cnblogs.com/zhubenwuzui/archive/2009/06/07/1498097.html

    出牌权限的传递:http://www.cnblogs.com/zhubenwuzui/archive/2009/06/08/1498369.html

    大家知道,斗地主这个游戏是将一些特有的牌组合成牌组然后来比较牌组的大小,那么,就应该给PokerGroup类定义一个属性type,即牌组的类型,type的值是一个枚举类型

     

     

    Code

     

     

    当玩家出牌时,首先应判断玩家的牌组类型。

    我判断牌组类型的方法是根据玩家所出牌组张数的不同来做出不同的处理。比如,玩家出的牌只有一张,那么肯定是个子。如果有两张肯定是对子。如果有三张,肯定是三个。如果有6张呢?就有三种情况了:1、顺子。2、连对。、3、飞机。由于顺子,连对,飞机这三种牌可以有很多组合,顺子可以有6张顺子或者7张顺子,连对可以有4连对或者5连对。飞机可以有2连飞机,三连飞机。所以就需要写几个方法分别判断牌组是否为顺子,连对,飞机了。

    顺子和对子很好判断,飞机就麻烦点了,由于飞机可以随便带一张或几张牌,如果带的牌的点数比飞机本身的点数大,那么大的那张牌就被排序到飞机前面了,这样对比较牌组的大小很不方便。所以还要有一个对飞机带翅膀这样的牌组进行排序的方法。

    判断牌组类型的代码如下:

     

     

    Code

     

     

    无序的牌组通过以上代码的洗礼,已经变成了非常容易比较的牌组了。

    比较牌组的大小就非常简单了。首先排除特殊牌组炸弹,双王。

    然后再比较普通牌组的第一张牌就可以了。下面是牌组比较的代码,重写了PokerGroup的大于号运算符

     

     

    Code

    然后在接收其他玩家牌组的时候调用IsRule方法给牌组定义一个类型,自己出牌的时候也定义一个类型,再在出牌的时候比较俩牌组的大小。

  • 相关阅读:
    mysql 创建数据库的基本操作
    MySQL的数据类型 及注意事项
    在执行 pip install 时遇到错误:python setup.py egg_info Check the logs for full command output
    python3.8-运行jupyter 报raise NotImplementedError
    执行python 爬虫脚本时提示bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: lxml. Do you need to install a parser library?
    Python:lambda表达式和yield关键字理解与使用讲解
    百度paddle框架学习(二):使用经典VGG网络完成人脸口罩判别
    深度学习中的梯度
    C++ OpenCV学习笔记(持续更新)
    Tensorflow常见报错
  • 原文地址:https://www.cnblogs.com/DreamCreator/p/1498717.html
Copyright © 2011-2022 走看看