麻将算法(七)胡牌之对子判断
判断一手牌中的牌是否可以胡牌,思路是选出将手牌中的对子,将手牌中的对子牌“去掉”后(将这个牌添加到一个叫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;}
下一章胡牌之整体比较
麻将算法(七)胡牌之对子判断相关推荐
- 麻将算法之 ------ 胡牌算法
麻将数据牌集合 private int[] cardDataArray ={0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, //万子 1 2 ...
- 麻将胡牌算法——C#
这里只介绍普通的麻将胡牌算法,也就是7个对子或者 1个对子+3*N; N = 三个顺子或者三个一样的 ,其中字牌(东南西北中发白)不能算顺子. 首先对于每张牌 它有牌的的数字 1-9,牌的种类 (万条 ...
- 麻将胡牌算法(遍历+剪枝)
麻将胡牌算法(遍历+剪枝) 简介 麻将胡牌算法及代码 1. 方法引入 2. 类型定义 2.1 牌定义 2.2 牌特征定义 3. 计算胡牌 3.1 检测十三幺牌型 3.2 检测七小对牌型 3.3 检测普 ...
- 包含癞子的麻将胡牌算法
记录一下麻将的通用胡牌算法实现,只要满足M x ABC + N x DDD + EE 即可胡牌. 在这里先分析一下最简单的胡牌思路:先找出所有可能的将牌,若除去两张将牌之外的所有牌都能成扑,则可胡牌. ...
- 麻将胡牌算法,带癞子
貌似去年去面试一家公司,问了麻将的算法.虽然之前做过广东麻将,但是胡牌算法在服务端,就没有在意. 现在在网上搜了一些算法试了试 = =! 麻将普通的胡牌就是刻子+顺子+将.癞子可以充当任意一张牌. 参 ...
- 麻将普通胡牌算法JS版(含癞子,非轮训)
记录一下麻将的通用胡牌算法实现,只要满足X*ABC + Y*DDD + EE 即可胡牌. 在这里先分析一下最简单的胡牌思路:先找出所有可能的将牌,若除去两张将牌之外的所有牌都能成刻或顺,则可胡牌. 将 ...
- swift--广东麻将v2.0(带胡牌、听牌算法和自动打牌功能)
本程序实现了广东麻将的全部功能:自动摸牌.打牌.碰.杠.听牌.胡牌(其中庄家手动打牌,其它电脑玩家自动打牌),具体功能有: 系统通过骰子确定庄家,然后发牌,最开始从庄家手动打牌. 可以碰,杠,不能吃牌 ...
- 麻将高效鬼牌胡牌算法(C++版)
最近做的一个麻将里面有双鬼牌的玩法,即为8张鬼牌,第一反应是采用N重循环把鬼牌变成一张张牌去遍历是否能胡牌,实际测试在5张牌鬼牌的情况得出结果就需要差不多5,6分钟. 因此自己做了一套用凑牌的方式去判 ...
- 麻将胡牌算法带癞子 python实现
姐姐:你去帮我和闺蜜打麻将? 学霸哥哥:可是我不会打麻将呀! 姐姐:你不是学霸吗?我教你一个麻将公式,我闺蜜可是单身哟! 学霸哥哥:什么公式? 姐姐:麻将胡牌公式: AAA*M+ABC*N+BB,WM ...
最新文章
- 信息系统项目管理师-常用英文术语整理
- 如何基于K8s构建下一代DevOps平台?
- Redis Cluster 集群模式原理和动态扩容
- FCN-加载训练与测试数据
- C#通过VS连接MySQL数据库实现增删改查基本操作
- 工作71:nexttick使用
- jeecg中excel导出字段判空处理
- 查询Oracle正在执行的sql语句
- Java笔记-Linux环境中因编码问题导致中文String解析有问题
- 【Siddhi】Siddhi 4.2.40版本之前的一个Bug
- 不用 SWIG,Go 使用 C++ 代码的方式
- 主从模式在不同场景下的解释
- 人工智能之语音识别技术【科普】
- 微软windows10易升_Windows10开启卓越性能
- 网易丁磊提议统一充电接口
- 城市中心、华为、软通动力智慧城市联合解决方案发布
- IDEA中使用快捷键快速定位到报错位置
- menu.ctrl.php,对pyqt5之menu和action的使用详解
- python 无脸男
- ubuntu16下安装opencv3.4.10