判断一手牌中的牌是否可以胡牌,思路是选出将手牌中的对子,将手牌中的对子牌“去掉”后(将这个牌添加到一个叫DUIZI的list里),将去掉对子的手牌进行连牌与同牌判断

,将“连牌与同牌”的list进行M选N操作,如果选出的种类不等于0那么可以判定出是普通胡牌,对于自摸与非自摸的区分在于传入的是在“接牌”后形成的胡牌,还是其他玩家

“出完”牌后形成的胡牌。

     static List<int> ReconsCards(int[] cbCardIndex, List<FrontageItem> Frontage){List<int> DuiZi = new List<int>();List<int> DuiZi1 = new List<int>();DuiZi.Clear();DuiZi1.Clear();for (int i = 0; i < cbCardIndex.Length; i++){if (cbCardIndex[i] == 2){DuiZi1.Add(i);}}int[] DuiZi2 = new int[DuiZi1.Count];for (int a = 0; a < DuiZi2.Length; a++){DuiZi2[a] = DuiZi1[a];}for (int b = 1; b < DuiZi2.Length; b++){if (DuiZi2[b - 1] != (DuiZi2[b] - 1) && cbCardIndex[DuiZi2[b] - 1] == 0){cbCardIndex[DuiZi2[b]] = 0;DuiZi.Add(DuiZi2[b]);break;}else{cbCardIndex[DuiZi2[b - 1]] = 0;DuiZi.Add(DuiZi2[b - 1]);break;}}for (int b = 0; b < DuiZi2.Length; b++){if(DuiZi.Count==0){int value = IndexSwitchToCard(DuiZi2[b]);if ((value & MASK_VALUE) == 9 || (value & MASK_VALUE) == 1){cbCardIndex[DuiZi2[b]] = 0;DuiZi.Add(DuiZi2[b]);DuiZi2[b] = 0;break;}}}if (DuiZi2.Length == 1){if (DuiZi2[0] != 0){cbCardIndex[DuiZi2[0]] = 0;DuiZi.Add(DuiZi2[0]);}}if (DuiZi.Count==0){for (int i = 0; i < cbCardIndex.Length; i++){if (cbCardIndex[i] >= 3){if ((i % 9) < 7){if (cbCardIndex[i] + cbCardIndex[i + 1] + cbCardIndex[i + 2] >= 3 && cbCardIndex[i + 1] == 1 && cbCardIndex[i + 2] == 1){cbCardIndex[i] = cbCardIndex[i] - 2;DuiZi.Add(i);break;}}if ((i % 9) > 1 && (i % 9) < 7){if ((cbCardIndex[i] + cbCardIndex[i - 1] + cbCardIndex[i + 1] >= 3 && cbCardIndex[i + 1] == 1 && cbCardIndex[i - 1] == 1 && cbCardIndex[i + 2] != 3) ||( cbCardIndex[i] + cbCardIndex[i - 1] + cbCardIndex[i + 1] >= 3 && cbCardIndex[i + 1] == 1 && cbCardIndex[i - 1] == 1 && cbCardIndex[i + 2] == 3 && cbCardIndex[i - 2] == 3)){cbCardIndex[i] = cbCardIndex[i] - 2;DuiZi.Add(i);break;}}if ((i % 9) > 1){if (cbCardIndex[i] + cbCardIndex[i - 1] + cbCardIndex[i -2] >= 3 && cbCardIndex[i-1] == 1 && cbCardIndex[i -2] == 1 ){cbCardIndex[i] = cbCardIndex[i] - 2;DuiZi.Add(i);break;}}}}}return DuiZi;}

下一章胡牌之整体比较

麻将算法(七)胡牌之对子判断相关推荐

  1. 麻将算法之 ------ 胡牌算法

    麻将数据牌集合 private int[] cardDataArray ={0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, //万子 1 2 ...

  2. 麻将胡牌算法——C#

    这里只介绍普通的麻将胡牌算法,也就是7个对子或者 1个对子+3*N; N = 三个顺子或者三个一样的 ,其中字牌(东南西北中发白)不能算顺子. 首先对于每张牌 它有牌的的数字 1-9,牌的种类 (万条 ...

  3. 麻将胡牌算法(遍历+剪枝)

    麻将胡牌算法(遍历+剪枝) 简介 麻将胡牌算法及代码 1. 方法引入 2. 类型定义 2.1 牌定义 2.2 牌特征定义 3. 计算胡牌 3.1 检测十三幺牌型 3.2 检测七小对牌型 3.3 检测普 ...

  4. 包含癞子的麻将胡牌算法

    记录一下麻将的通用胡牌算法实现,只要满足M x ABC + N x DDD + EE 即可胡牌. 在这里先分析一下最简单的胡牌思路:先找出所有可能的将牌,若除去两张将牌之外的所有牌都能成扑,则可胡牌. ...

  5. 麻将胡牌算法,带癞子

    貌似去年去面试一家公司,问了麻将的算法.虽然之前做过广东麻将,但是胡牌算法在服务端,就没有在意. 现在在网上搜了一些算法试了试 = =! 麻将普通的胡牌就是刻子+顺子+将.癞子可以充当任意一张牌. 参 ...

  6. 麻将普通胡牌算法JS版(含癞子,非轮训)

    记录一下麻将的通用胡牌算法实现,只要满足X*ABC + Y*DDD + EE 即可胡牌. 在这里先分析一下最简单的胡牌思路:先找出所有可能的将牌,若除去两张将牌之外的所有牌都能成刻或顺,则可胡牌. 将 ...

  7. swift--广东麻将v2.0(带胡牌、听牌算法和自动打牌功能)

    本程序实现了广东麻将的全部功能:自动摸牌.打牌.碰.杠.听牌.胡牌(其中庄家手动打牌,其它电脑玩家自动打牌),具体功能有: 系统通过骰子确定庄家,然后发牌,最开始从庄家手动打牌. 可以碰,杠,不能吃牌 ...

  8. 麻将高效鬼牌胡牌算法(C++版)

    最近做的一个麻将里面有双鬼牌的玩法,即为8张鬼牌,第一反应是采用N重循环把鬼牌变成一张张牌去遍历是否能胡牌,实际测试在5张牌鬼牌的情况得出结果就需要差不多5,6分钟. 因此自己做了一套用凑牌的方式去判 ...

  9. 麻将胡牌算法带癞子 python实现

    姐姐:你去帮我和闺蜜打麻将? 学霸哥哥:可是我不会打麻将呀! 姐姐:你不是学霸吗?我教你一个麻将公式,我闺蜜可是单身哟! 学霸哥哥:什么公式? 姐姐:麻将胡牌公式: AAA*M+ABC*N+BB,WM ...

最新文章

  1. 信息系统项目管理师-常用英文术语整理
  2. 如何基于K8s构建下一代DevOps平台?
  3. Redis Cluster 集群模式原理和动态扩容
  4. FCN-加载训练与测试数据
  5. C#通过VS连接MySQL数据库实现增删改查基本操作
  6. 工作71:nexttick使用
  7. jeecg中excel导出字段判空处理
  8. 查询Oracle正在执行的sql语句
  9. Java笔记-Linux环境中因编码问题导致中文String解析有问题
  10. 【Siddhi】Siddhi 4.2.40版本之前的一个Bug
  11. 不用 SWIG,Go 使用 C++ 代码的方式
  12. 主从模式在不同场景下的解释
  13. 人工智能之语音识别技术【科普】
  14. 微软windows10易升_Windows10开启卓越性能
  15. 网易丁磊提议统一充电接口
  16. 城市中心、华为、软通动力智慧城市联合解决方案发布
  17. IDEA中使用快捷键快速定位到报错位置
  18. menu.ctrl.php,对pyqt5之menu和action的使用详解
  19. python 无脸男
  20. ubuntu16下安装opencv3.4.10

热门文章

  1. 与狗尾草一起探寻人机交互的更多可能性——白洞战报
  2. 如何少花钱又过好日子(转载)
  3. react 图片预览
  4. Unity官方认证考试
  5. 2020-07-18 为了 dmz 破解家里的 华为 hs8145c5
  6. 隐藏与篡改Linux命令行参数
  7. 《机器人爱好者(第2辑)》——Robot Hut博物馆
  8. 低调使用!Python这个技能比开挂还爽!
  9. 什么是专利申请,专利申请的好处
  10. 两岸猿声啼不住,轻舟已过万重山(再见 MySQL 索引~)