成牌条件分支

胡牌判定算法:把成牌条件拆到每一张牌

胡牌判定是整条算法链条的第一道关卡。这里按张数校验、将牌定位、面子递归拆分与特殊结构四条主线整理条目,把平胡、七对、碰碰胡、杠上开花分别写成可独立校验的分支,并标注每一处容易产生口径分歧的中间状态,方便复盘时逐项比对。

四面子一将 七对折算 碰碰胡 杠上开花
起手四检

判定开始前,先过四道结构校验

牌型拆分只有建立在正确的张数与结构基础上才有意义。以下四项在每条胡牌条目里都会被最先执行,任一项不通过就直接返回不成牌,避免后续枚举产生大量无效组合。

张数校验

按副露组数折算手牌应有个数,普通成牌为三的倍数加二。张数不符一律先返回待复核,不进入拆分。

14 张副露折算

将牌定位

成牌结构中必须恰有一对作将。把对子逐一取出试配,剩余牌若能完整凑成面子,这条分支才成立。

对子试配

面子递归拆分

顺子与刻子交替尝试,按牌值从小到大固定最小张,递归收窄剩余牌组,保证同一手牌不会重复计数。

顺子刻子

特殊结构旁路

七对、全不靠类结构不走面子拆分,改为独立的成对计数通道,与常规分支并行判定后合并输出。

七对独立通道
判定顺序

五步走完一手牌的成牌校验

顺序本身就是条目的一部分。同样的牌面换一个执行次序,杠后补牌、抢杠胡这类时点相关的判定就会得出不同结论,因此每一步都标注了输入与产出。

1

读取牌面

分离手牌、副露与杠区,标记牌的来源与是否癞子,形成可比较的牌值序列。

2

归一化处理

副露固定为已完成面子,癞子按可替代集合登记,避免后续拆分时反复解释。

3

结构枚举

在对子、顺子、刻子三类组合上递归推进,遇到癞子则展开替代分支。

4

将牌回填

面子凑齐后确认恰有一对作将,冲突或缺失即回退到上一条枚举路径。

5

输出结论

给出成牌与否、命中分支名与时点标记,供番型计分环节直接取用。

分支结构

四类成牌结构的条目差异

平胡、七对、碰碰胡与杠上开花在判定上互斥又相邻,条目对每类都写明进入条件、拆分方式与结果标注,避免同一手牌被两条分支同时认领。

九江麻将算法列表平胡四面子一将的判定结构

平胡:四面子一将

最常见的基础结构。条目要求面子全部由顺子与刻子混合构成,将牌唯一,且不含碰碰胡、七对等加番特征。

常规分支面子优先
九江麻将算法列表七对结构的成对计数判定

七对:成对计数

不计面子,只数对子。四张相同牌按两对折算,折算结果与实际张数同时记录,便于区分加番标注。

折算记录旁路分支
九江麻将算法列表碰碰胡刻子组判定示意

碰碰胡:全刻子

四组面子必须全部为刻子或杠,将牌为对子。判定时先按刻子优先拆分,失败再回退到普通拆分路径。

刻子优先回退校验
边界情形

六处最容易判错的情形与统一口径

同一手牌在不同牌桌上有不同说法的情况,几乎都集中在这几处。条目把触发条件与输出结果并列写出,复盘时按行对照即可。

四张相同牌未杠
保留刻子加单牌与整体杠材两种结构同时入队,只有当张数与将牌都能配平的那条路径才输出成牌,另一条自动作废。
副露后的手牌张数
每组副露按三张面子折算,杠按四张计入已用牌数,手牌部分只补足剩余张数后进入判定,不做整体重算。
杠后补牌前的状态
标记为待补中间态,暂不判胡。补牌完成、牌数补齐后才允许进入成牌判定,并同时打上杠上开花的时点标签。
抢杠胡的判定时机
在被抢的那张牌尚未并入杠区之前计算,此时牌面仍视作打出的单张,判定输入与普通点炮一致,避免重复计入杠分。
癞子替代将牌
癞子可作将,但替代后必须仍有唯一一对。若出现两对都可作将且无法排除,条目要求并列输出两种结果并标注歧义。
同一手牌命中多分支
按平胡、碰碰胡、七对的优先次序取唯一主分支,其余命中项作为附加标记保留,交由计分环节决定是否叠加。
条目样例

一条判定条目包含哪些字段

每条记录都按固定字段书写,字段之间互不覆盖,便于横向比较不同分支的差异,也方便在实现判牌逻辑时直接映射成数据结构。

ENTRY · WIN-07
七对折算判定
旁路分支
触发条件 手牌 14 张,无副露或副露不参与面子计数,全部牌可归为成对结构。
折算规则 四张相同牌计为 两对,同时记录原始张数与折算次数。
判定顺序 先数对子总数,再校验将牌是否已包含在内,最后与常规面子分支取优先主分支。
结果标注 输出成牌、命中七对分支,并附带折算次数供计分环节识别加番特征。

字段结构对全部判定条目保持统一,修改某一分支时不会影响其它分支的读取方式。

ENTRY · WIN-12
杠上开花时点判定
时点相关
触发条件 本家完成杠操作并已补牌,补牌后手牌张数达到成牌要求。
前置约束 补牌前的中间态不参与判胡,杠区牌不得同时计入面子与杠分。
判定顺序 补牌完成 → 张数校验 → 面子拆分 → 标记杠上开花时点。
结果标注 成牌结论附带时点标签,交由番型计分环节处理加番与结算。

时点类条目不改变拆分方式,只在结果上追加标记,避免与基础成牌条件混写。

常见误判

三条导致判定结果偏移的原因

拆分逻辑本身没有问题时,结论仍可能出错。以下三点在复盘中反复出现,条目对每种情况都给出了纠正方式。

把中间态当成终结态

杠后补牌前、碰牌刚完成时,牌数并未稳定。此时判胡会得到看似成立的结果,但与真实牌局不符。

时点中间态

副露与手牌重复计数

副露面子已经固定,若在拆分时再次参与组合,会虚增可用面子数量,导致本不成牌的牌型被判成立。

副露锁定去重

癞子替代未登记

癞子可以顶上任意缺口,但替代关系需要留下记录。没有记录的替代会让后续番型判断失去依据,也难回溯。

替代记录回溯
判定问答

胡牌判定算法常见疑问

来自复盘核对与逻辑实现两端的提问,答案直接对应条目中的分支写法。

手牌里有四张一样的牌,能不能直接算作一个刻子加一张散牌?
判定时四张相同牌既可以按一坎刻子加一张单牌处理,也可以在满足条件时整体视为杠。条目里的做法是先保留两种结构,分别进入后续面子拆分,只有在张数与将牌都能配平的那条分支上才输出成牌,避免把杠材直接当成散张丢掉。
杠完之后还没补牌,这一手能不能先判胡?
不行。杠后补牌前手牌张数处于中间状态,条目里把这一步单独标记为待补状态,只有补牌完成、张数补齐之后才进入成牌判定,否则会与杠上开花的时机标记冲突,复盘时也无法还原当时的牌数。
七对里出现两组四张相同的牌该怎么标注?
四张相同牌在七对结构中按两对折算,两组四张就占掉四对,剩余牌只需再凑出三对即可成立。条目要求同时记录折算结果与实际张数,方便区分龙七对类加番标记,也避免与普通七对不同口径混算。
已经副露的顺子和刻子,还要不要参与面子拆分?
要参与,但作为固定结构处理。副露部分在拆分支路里被锁定,不再回退重拆,只把剩余手牌送去枚举面子与将牌,这样可以减少无效组合,也让判定结果与桌面上的明牌状态保持一致。

把你遇到的判定分歧补进条目

牌桌上遇到过两种说法都能自圆其说的牌型?把当时的牌面、副露状态与争议点写下来,补充条目会在核对结构后并入对应分支,并标注适用的时点与前置条件。

条目已记录,核对完成后会并入对应的判定分支。

提交内容仅用于规则条目整理,不做其它用途。