🀄 鄱阳麻将算法一览表

胡牌算法 · 番数计算 · 听牌判断 · 计分规则

—— 鄱阳麻将规则与算法全解析 ——

📋鄱阳麻将算法概述

鄱阳麻将,又称「鄱阳湖麻将」,是流行于江西鄱阳地区的一种地方麻将玩法。其核心算法围绕胡牌判断番数计算听牌分析三大模块展开。

掌握鄱阳麻将算法,不仅能帮助你快速判断手牌是否胡牌,还能精确计算每一局的番数与得分,助你在实战中游刃有余。

💡 核心公式:胡牌 = 3 × N(顺子/刻子)+ 2(将牌),N ≥ 1
鄱阳麻将算法流程图

🀄一、鄱阳麻将基础算法

鄱阳麻将使用万、条、筒三门数牌(1-9)以及东南西北中发白风牌,共136张牌。每位玩家起手13张牌,庄家14张。

1. 牌型分类

牌型说明示例
顺子同门连续三张3万、4万、5万
刻子三张相同的牌5筒、5筒、5筒
将牌两张相同的牌(对子)东、东
四张相同的牌9条×4

2. 算法总体框架

1 获取手牌,按牌型编码排序

2 检测是否为特殊牌型(七对、十三幺等)

3 枚举所有可能的将牌(对子)

4 递归拆解剩余牌为顺子或刻子

5 判断是否满足胡牌条件

6 计算番型与得分

🎯二、胡牌算法核心详解

胡牌算法是鄱阳麻将中最基础的算法,判断一副手牌是否满足胡牌条件。

1. 胡牌判断流程

1 将手牌按数字编码从小到大排序

2 遍历手牌,找出所有对子作为「将牌」候选

3 对每种将牌候选,移除该对子

4 剩余12张牌尝试拆分为4组顺子或刻子

5 若存在任意一种拆分方案则胡牌

2. 递归拆分算法

// 判断剩余牌能否全部组成面子 function 能拆分子牌(牌数组) { if (牌数组.length == 0) return true; // 取第一张牌 let first = 牌数组[0]; // 尝试作为刻子(三张相同) if (牌数组.count(first) >= 3) { 去掉三张first; if (能拆分子牌(剩余牌数组)) return true; 恢复三张first; } // 尝试作为顺子(连续三张) if (有牌(first+1) && 有牌(first+2)) { 去掉first, first+1, first+2; if (能拆分子牌(剩余牌数组)) return true; 恢复first, first+1, first+2; } return false; }

3. 算法复杂度分析

最坏情况下,需要枚举所有将牌和拆分组合,但由于麻将牌数量固定(13/14张),实际计算量很小,一秒钟内可完成数千次胡牌判断。

🧮三、番数计算算法

番数是决定麻将得分的关键,鄱阳麻将的番数计算基于胡牌型与额外条件的叠加。

番型番数条件说明
平胡1番基本胡牌,无特殊番型
碰碰胡2番全部为刻子+将牌
混一色2番同一门数牌+字牌
清一色3番全部为同一门数牌
七对4番七个对子组成
字一色5番全部为字牌(风牌)
杠上开花+1番杠牌后摸牌即胡
海底捞月+1番最后一张牌自摸胡
抢杠胡+1番抢他人杠牌胡牌

番数叠加规则

📌 总番数 = 基础番型中最高番 + 额外加番。
示例:清一色自摸 = 3番(清一色)+ 1番(自摸)= 4番。
若同时满足多种基本番型,取最高番计算,不叠加。

示例计算

手牌:一万、一万、二万、三万、四万、五万、六万、七万、八万、九万、九万(清一色+平胡)

番数:清一色3番 + 自摸1番 = 4番

👂四、听牌算法

听牌算法用于计算手牌还缺哪张牌就能胡牌,是实战中决策的重要依据。

1. 听牌判断方法

1 遍历所有未出现的牌(共34种)

2 将每种牌加入手牌,模拟摸牌

3 调用胡牌算法判断是否胡牌

4 记录能胡牌的牌即为听牌

2. 多面听计算

一副手牌可能听多张牌(即多面听)。例如手牌:1万、2万、3万、4万、5万、6万、7万、8万、9万,听1-9万任一张都能胡。

function 计算听牌(手牌) { let 听牌结果 = []; for (let 牌 = 0; 牌 < 34; 牌++) { 手牌.add(牌); if (胡牌算法(手牌)) { 听牌结果.push(牌); } 手牌.remove(牌); } return 听牌结果; }
鄱阳麻将听牌算法示例图

五、特殊牌型算法

鄱阳麻将中有一些特殊牌型,它们的胡牌判断逻辑与普通牌型不同,需要单独处理。

七对算法

七对是7个对子组成的特殊胡牌型。判断方法:手牌按数值分组,每组数量必须为2的倍数,且恰好有7组。

function 判断七对(手牌) { let 对子数 = 0; for (let 每组 of 手牌分组) { if (每组数量 % 2 != 0) return false; 对子数 += 每组数量 / 2; } return 对子数 == 7; }

碰碰胡算法

碰碰胡要求所有面子均为刻子(或杠),不能有顺子。判断逻辑:从手牌中找到所有刻子和将牌,确认无剩余单牌。

十三幺算法

十三幺由1万、9万、1条、9条、1筒、9筒、东南西北中发白各一张,外加其中任意一张凑成对子。

特殊牌型胡牌判断方式复杂度
七对数量分组+模2判断O(N)
碰碰胡刻子提取+余牌判断O(N)
十三幺固定牌型匹配O(1)
清一色花色判断O(N)

💰六、计分规则

鄱阳麻将计分根据番数和胡牌方式(自摸/放炮)确定。

基础计分公式

📊 糊牌得分 = 底分 × 2^(总番数)
底分通常为1,总番数越高得分指数增长。
胡牌方式付分方计算方式
自摸3家各付基础分 × 2
放炮放炮者付基础分 × 2
杠上开花3家各付基础分 × 4
抢杠胡被抢者付基础分 × 4

杠牌计分

杠类型得分付分方
明杠1倍点杠者
暗杠2倍3家均付
补杠1倍3家均付

💬七、常见问题解答

鄱阳麻将可以吃牌吗?
传统鄱阳麻将不允许吃牌,只允许碰和杠。但在部分变体规则中加入了「吃牌」玩法,建议开局前与牌友确认具体规则。
七对和碰碰胡哪个番数更高?
七对番数为4番,碰碰胡为2番,因此七对的番数更高。但七对的难度也更大,实战中需要根据手牌灵活选择得分策略。
杠上开花怎么计分?
杠上开花是在杠牌后摸牌即胡,番数在原有基础上额外加1番,且三家都要付分,得分非常可观。
鄱阳麻将的将牌有什么限制?
一般没有特殊限制,任意两张相同的牌都可以作为将牌。但在某些变体规则中,会要求将牌不能为字牌,具体以当地约定为准。
如何快速判断自己是否听牌?
可以通过「枚举法」:用手牌分别加上每种可能的牌,再调用胡牌算法判断。多面听时更需注意不要漏算,建议用算法工具辅助判断。
清一色混一色可以同时计算吗?
不可以。胡牌时只取最高番的基础番型计算。例如清一色本身涵盖混一色的条件,因此只计算清一色的3番。

📝算法总结

鄱阳麻将算法的核心可归纳为:

🏷️ 胡牌判断:递归拆解法,枚举将牌+递归拆面子。

🏷️ 番数计算:识别最大番型+额外加番。

🏷️ 听牌分析:枚举法+胡牌验证。

🏷️ 计分规则:底分 × 2^总番数。

—— 祝您胡牌连连 ——