一、鄱阳麻将算法概览

鄱阳麻将算法一览表结构图
△ 鄱阳麻将算法体系结构图

鄱阳麻将作为江西鄱阳地区广泛流行的麻将玩法,其核心算法主要包括胡牌判定算法番数计算算法计分换算算法三大模块。在鄱阳麻将规则下,牌型识别与番种匹配是算法的关键。

💡 算法核心思路:
① 判断是否符合基本胡牌牌型(4副顺子/刻子 + 1对将)
② 检测特殊牌型(七对、十三烂、碰碰胡等)
③ 根据番种表计算总番数
④ 按基础分 × 2^番数 或约定倍数进行计分

鄱阳麻将基础参数

二、胡牌算法详解

鄱阳麻将胡牌算法流程图
△ 胡牌算法判断流程

2.1 标准胡牌算法(3n+2结构)

鄱阳麻将的基础胡牌判定基于 3n+2 模型:将手中的14张牌拆分为n组面子(顺子或刻子)和1对将牌。递归算法如下:

伪代码:
function isHu(tiles) {
  if (tiles.length == 0) return true;
  // 递归剔除一个雀头
  for (each pair in tiles) {
    if (isHuWithoutPair(tiles - pair)) return true;
  }
  return false;
}
function isHuWithoutPair(tiles) {
  if (tiles.length == 0) return true;
  // 取最小牌,尝试刻子或顺子
  if (tiles[0] appears ≥3) {
    if (isHuWithoutPair(tiles - 3 same)) return true;
  }
  if (tiles has consecutive sequence) {
    if (isHuWithoutPair(tiles - sequence)) return true;
  }
  return false;
}

该算法从最小牌开始递归,优先处理刻子再处理顺子,时间复杂度为O(n²),在实际游戏中毫秒级完成。

2.2 快速Hash剪枝算法

针对性能要求高的场景,使用牌型编码 + 查表法:将每种牌的数量(0~4)编码为一个数字,拼成字符串后查预计算表。鄱阳麻将单人手牌共计136张,同类牌最多4张,因此算法状态数有限,可完全查表。

2.3 特殊牌型判定算法

三、鄱阳麻将番数计算一览表

鄱阳麻将番数计算表格
△ 番数速查表
番型名称 番数 算法说明 示例
平胡1番普通4面子+1对将万条筒混搭
自摸+1番胡牌的牌自己摸到
门清+1番无吃碰明杠全手暗牌
碰碰胡3番全部为刻子(含杠)四个三张+一对
七对3番七个对子111万22条33筒…
十三烂3番14张无相邻、无重复字147万159条…
清一色4番整手牌同一花色全万或全条
混一色2番单一花色+字牌万子+风箭
字一色8番全部为东、南、西、北、中、发、白全字牌
杠上开花+2番补杠/明杠后摸牌胡杠后自摸
抢杠胡+2番抢他人补杠的牌补杠被抢
海底捞月+1番牌墙最后一张胡末张自摸
天胡6番庄家起手14张即胡开局即胡
地胡5番闲家庄家打出的第一张牌胡第一巡胡
📐 番数计算公式:
总番数 = 基础番型番数之和 + 附加番数
最终得分 = 基础分 × 2^总番数(部分牌局直接乘法叠加)

四、特殊牌型与算法要点

鄱阳麻将特殊牌型图解
△ 特殊牌型示例

4.1 七对(豪华七对)

标准的七对包含七个对子。若七个对子中有一组四张相同的牌,则视为豪华七对,番数翻倍。算法上需要统计相同牌数量为4时,能够拆成两个对子。

4.2 十三烂

鄱阳麻将的“十三烂”要求14张牌中任意两张牌的花色序数差≥3(即不相邻),且不能有重复牌。字牌(东南西北中发白)互不相同即可。这是一种独特的胡牌方式,在算法实现中需要遍历所有两张牌组合。

4.3 碰碰胡

手牌中除将牌外全是三张相同的刻子。算法只需要判断是否存在顺子,若没有顺子且能形成3n+2结构,即为碰碰胡。

4.4 清一色

全部手牌为同一花色(万/条/筒)。算法需要统计是否存在其他花色牌,若没有且标准胡牌成立,则按清一色计算。

🧠 算法实现提醒:鄱阳麻将中七对与十三烂属于特殊胡法,必须优先于标准胡法判断。顺序为:清一色/混一色判断 → 特殊胡法判断(七对/十三烂)→ 标准3n+2胡法。

五、计分与结算算法

鄱阳麻将计分结算流程图
△ 计分结算流程图

5.1 基础分设置

5.2 番数加倍算法

总番数 倍数 基础分1分示例
1番2倍2分
2番4倍4分
3番8倍8分
4番16倍16分
5番32倍32分
6番64倍64分
7番128倍128分

5.3 杠的计分

⚖️ 封顶规则:多数鄱阳麻局设定满贯6番(即64分)为单局上限,防止番数无限累加。具体封顶值以玩家约定为准。

六、鄱阳麻将算法常见问题

鄱阳麻将常见问题解答
△ 常见问题梳理
鄱阳麻将中,七对和十三烂能同时算吗?
不能同时成立。如果胡牌是七对,则不可能满足十三烂的条件(七对有重复对子,十三烂要求完全无重复)。两者互斥,算法上取番数更高者。
清一色遇到七对怎么计算番数?
清一色七对可以叠加计算。例如清一色(4番)+ 七对(3番)= 7番,通常封顶为6番时直接按满贯计算。
算法中如何处理补杠被抢杠的情况?
当某玩家补杠时,若其他玩家正好能用那张牌胡牌,则优先结算抢杠。被抢杠的玩家需要包赔全部三家,且本家补杠的那张牌不得再作为普通杠计分。
鄱阳麻将中是否存在全不靠、十三幺等牌型?
标准的鄱阳麻将不设十三幺(国标玩法才有)。鄱阳麻将的特殊仅包含七对、十三烂两种,外加带幺九等变种规则需提前约定。算法设计时默认不识别十三幺。
算法判断胡牌时,可以吃胡吗?
可以。鄱阳麻将支持吃牌、碰牌、杠牌,因此胡牌时分为自摸胡和点炮胡。算法在计算时只需要判断当前手牌+牌墙新补的牌是否能组成胡牌牌型即可。
如何快速判断一手牌是否接近听牌?
听牌算法需要遍历所有未出现的牌,尝试加入后进行胡牌判定。如果加入后能通过胡牌算法,则这张牌就是听牌。这是游戏机器实现提示功能的核心。
番数计算中“字一色”一定比“清一色”大吗?
是的。字一色8番大于清一色4番,而且字一色本身必然包含碰碰胡或七对等更高概率的附加番种,算法实现时需要分别匹配,不能只取单一番型。
鄱阳麻将算法中,那些“赖子”、“万能牌”如何实现?
多数鄱阳麻局没有“赖子”(癞子)。若有变种,算法中可以设定赖子牌编码,在递归胡牌时优先尝试用赖子替换任意牌,但番数计算时可能需要降低为特殊牌型倍数。

七、算法一览表总结

鄱阳麻将的整体算法可以概括为:

胡牌判定 = 標準3n+2 + 特殊牌型判定(七对/十三烂/碰碰胡)
番数计算 = 基础番 + 附加番(自摸、门清、杠上花等)
分数结算 = 基础分 × 2^总番数

在实际编写程序时,建议使用位运算和预生成表来优化速度,牌型编码采用4位二进制(0~4),27种牌共108位,完全适合内存计算。

⬆ 返回顶部