2025年JAVA麻将胡牌算法深度解析

JAVA麻将胡牌算法深度解析目录 麻将的基本概念 麻将牌的构成 麻将的碰 杠 吃 听 胡 麻将胡牌条件 胡牌算法简介 选将拆分法 算法数据结构 构建数据结构 数据结构使用 牌花色的获取 获取某一花色的牌值 获取某一张牌相邻牌 算法代码实现 基础代码校验 选将代码实现 每种花色胡判定 花色胡判定缓存

大家好,我是讯享网,很高兴认识大家。

目录

麻将的基本概念

麻将牌的构成

麻将的碰,杠,吃,听,胡

麻将胡牌条件

胡牌算法简介

选将拆分法

算法数据结构

构建数据结构

数据结构使用

牌花色的获取

获取某一花色的牌值

获取某一张牌相邻牌

算法代码实现

基础代码校验

选将代码实现

每种花色胡判定

花色胡判定缓存

万条筒花色胡判定逻辑

字牌花色胡判定逻辑

最终代码

总结


麻将的基本概念

麻将牌的构成

麻将牌是由下面的牌组成:

1.万字牌:1-9共9张(每个数字各一张)比如1万2万3万等

2.条子牌:1-9共9张(每个数字各一张) 比如1条,2条,3条等

3.筒子牌:1-9共9张(每个数字各一张) 比如1筒,2筒,3筒等

4.字牌:东南西北风各4张,红中、发财、白板各4张。

由基本牌组合而成的 万,条,筒的牌的数目为 4* 9 * 3 = 108 由字牌组成的牌的数量为 4 * 7 = 28

所以整副牌就由136张牌组成。花牌(春夏秋冬)等不计算。

麻将的碰,杠,吃,听,胡

        碰、杠、吃是麻将游戏中常用的三种操作,以便于玩家将手中的牌进行组合,以尽可能地增加胡牌的机会。具体意义如下:

        碰:当玩家手中有两张相同的牌,而桌上已有一张相同的牌时,玩家可以选择碰此牌,即将自己手中的两张相同的牌与桌上的一张相同的牌组成一个刻子。

        杠:当玩家手中有一张牌,而桌上已有三张相同的牌时,玩家可以选择杠此牌,即将自己手中的一张牌与桌上的三张相同的牌组成一个杠。这里面杠有多种,在算法中一定要注意处理。 具体分类如下:

        弯杠:当自己手中有两张牌,别人打出一张牌自己进行了碰操作,然后自己又摸到了一张牌,形成了杠

        明杠:自己手中有3张牌,别人打出一张牌,形成的杠

        暗杠: 自己摸到了4张一样的牌为暗杠

        吃:当桌上有玩家打出一张牌后,其他玩家如果手中有两张数字连着的牌,就可以选择吃此牌,即将桌上的牌和手中的牌组合成一个顺子。

        听:听牌是麻将游戏中的一个术语,指的是在某一时刻,手牌中的牌差一张即可和牌,当前的手牌一定是 3n+1张。

        胡:在麻将游戏中,“胡”指的是牌手通过组成某些牌型,使结束时所剩余的牌组满足胡牌规则,从而赢得游戏的过程。

麻将胡牌条件

麻将想要胡牌,必须得满足一个条件就是 3n + 2

3 指的是由3张牌组成的面子( 顺子或者是刻子)

n 是指由n个(大于等于0)组成的面子

2 指的就是由2张牌组成的将,这个将是必不可少的,面子可以不存在,但是将必须得存在,也就是说 n可以为0,但是2必须存在。如下图所示:

        举个例子,当手牌为14张时 正好满足3n +2 3x4 + 2 = 14 。表示由4组面子和一对将组成的手牌。再举个例子当手牌为 1万1万1万 5万5万 也是满足3n+2,也可以满足胡牌的条件。

胡牌算法简介

        胡牌算法实现起来有多种多样,但是大致分为两种,一种是使用回溯算法,一种是查表法

        查表法是利用事先生成好的所有的胡牌牌型,然后将这些牌型加载到内存中,直接在内存中对比即可,效率非常快,缺点只不灵活,需要事先按规则生成好表。

        我们现在介绍的这种算法也是用到了回溯算法,我们称之为 “选将

小讯
上一篇 2025-03-22 16:19
下一篇 2025-03-01 20:35

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/126208.html