规则配置与结算 · 算法条目分类

规则配置与结算:把起胡分、番型与分摊写成可核对的参数

起胡分取多少、封顶卡在哪里、庄家连庄加几倍、杠分什么时候入账、一炮多响怎么分摊到人——这些结算口径一旦含糊,线上线下就会出现对不上的分差。本分类把九江麻将的结算环节拆成独立条目,逐条给出参数取值、计算顺序与可复现样例。

起胡分与封顶 番型加分权重 杠分即时流水 包牌责任分摊
四类可配置维度

一局分数从产生到落账,只经过四组参数

结算相关的配置看起来零散,其实都可以归入分数上限、番型权重、倍数关系与即时流水四组。把参数按这四组归位,改动其中一项时就能立刻看出会影响哪些对局结果。

起胡分与封顶分

起胡分决定胡牌的最低得分,封顶分决定单局上限。两者配合还能约束高分番型的溢出,避免大牌直接把整局分数推到极端。

取值区间溢出处理

番型加分权重

每种番型对应一个加分值,需要明确是全部叠加还是只取最高番。叠加口径下的顺序不影响总和,但会影响中间值与展示。

叠加规则最高番

庄家与加倍关系

庄家系数、连庄加倍、自摸加倍三项互有交叉。系数作用在封顶之前还是之后,会直接改变同一手牌的最终得分。

连庄自摸

杠分与花分流水

杠分通常在开杠瞬间产生,与胡牌结算分离。条目里把杠分记为带时间戳的流水,并标注流局时是否回滚,方便终局合并。

即时入账流局回滚
责任分摊链路

分数算出来只是前半段,落到每个人头上才算结算完成

自摸由三家共同承担,点炮由点炮方承担,包牌则要先划出包牌方的责任份额。九江本地规则里这几种情形会同时出现,比如包牌状态下自摸、一炮多响同时成立,处理顺序错了就会重复扣分或者漏算。

先判断是否包牌,划出包牌方应承担的固定份额
再确认响牌人数,按位计算每位胡牌者的应得分数
剩余部分由点炮方按比例承担,自摸则平均分摊到未胡的三家
最后合并杠分、花分等即时流水,逐人写入本局变动值

样例:自摸带杠分的一次结算

番型加分累计32 分
庄家系数 × 264 分
封顶限制后50 分
三家分摊自摸各 −50 分
暗杠流水(已入账)三家各 −2 分
胡牌方本局变化:+150 分(胡牌) + 6 分(杠分)= +156 分;三家各 −52 分,合计归零。
容易出错的场景

三类边界情形,结算实现里最容易打折扣

常规胡牌结算的路径很短,真正考验实现质量的是同时触发多条规则的场合。下面三类场景在实测中出现的分差占比最高,每个都给出了推荐的处理顺序。

九江麻将算法列表一炮多响分摊结算示意

一炮多响的分摊

多位玩家同时响牌时,先按各自番型算出应得分数,再合并为点炮方的总支出。若其中一位处于包牌状态,需要先扣掉包牌方份额,剩余部分才由点炮方承担,避免同一份分数被扣两次。

响牌人数合并支出
九江麻将算法列表杠上开花与杠分叠加的处理方式

杠上开花与杠分叠加

补杠后立即自摸,杠分与胡牌分同时产生。推荐把杠分写进即时流水而非并入番型,这样流局回滚时只需撤销流水,不必重新计算胡牌分值。

流水分离回滚策略
九江麻将算法列表中途退出与断线补分的结算逻辑

中途退出与断线补分

退出瞬间冻结该玩家的流水快照,按当前手牌与已产生的杠分、花分补记,再由后续对局按托管逻辑延续。缺少快照就无法解释终局的分差来源,复盘时也无从追溯。

分数快照托管延续
配置落地流程

从规则版本到上线对账,四步走完

结算参数一旦上线就与历史对局绑定,改动必须留痕。按下面的顺序推进,可以把版本差异控制在一局之内,历史回放也不会因为改参数而失真。

锁定规则版本

把当前生效的起胡分、封顶分、番型权重聚合为一个版本号,与房间配置一起保存,开局时写入对局记录。

录入参数并校验

逐项填入取值,检查封顶分是否高于起胡分、加成系数是否落在合理区间,冲突项在录入阶段直接拦下。

跑样例回归

用已有的结算样例回放,比对每一位玩家的分数变化。出现分差时按顺序逐步定位,先看分摊再看得分。

上线后对账

保留每局的结算中间值,出现申诉时按快照重算。历史对局不受新参数影响,复盘结论才站得住。

参数速查

六项高频配置的取值与影响范围

下表整理结算条目里最常被改动的六项参数,包含常见取值与需要注意的联动项。具体数值以所在房间的规则版本为准,改动前建议先跑一遍样例回归。

起胡分开局最低得分
低于该值的番型按起胡分计分,通常与小番型的最低门槛绑定。取值过高会让日常小牌失去意义,过低则会让封顶频繁触发。
与封顶联动影响小番
封顶分单局分数上限
在庄家系数与加倍之后取较小值。若放在加倍之前处理,连庄与自摸叠加时会出现超过上限的分值,不同客户端算出的结果也会不一致。
顺序敏感上限约束
番型权重加分与叠加方式
需要明确全部叠加还是只取最高番。叠加口径下中间值会出现在结算记录中,展示层要能解释这类中间分从何而来。
叠加 / 最高番影响展示
庄家与连庄系数倍数关系
庄家身份、连庄次数、自摸状态三项交叉。建议把系数拆成独立乘积因子,便于在结算记录中逐项标注来源。
乘积因子连庄递增
杠分与花分即时流水
明杠、暗杠、补杠分值可分别配置,是否被流局回收也需单列开关。写入流水后终局只需合并,不必回溯操作顺序。
独立入账流局回滚
包牌责任份额分摊前置条件
包牌成立时先划出固定份额再由点炮方承担剩余部分。份额可以与番型挂钩,也可以设为固定值,两种口径要各自留样例。
前置扣除避免重扣
常见疑问

结算配置里反复被追问的五个问题

这些问题大多与参数的处理顺序有关,顺序定了,结果自然稳定。

起胡分和封顶分应该先算哪一个?
先按番型与基础分算出单局理论得分,再与封顶分取较小值,最后乘庄家与加倍系数。若把封顶放在加倍之后处理,庄家连庄场景会出现超出上限的分数,同一局在不同客户端算出不同结果。
杠分是立刻记分还是终局一起结算?
两种口径都有,区别在于中途流局时杠分是否保留。条目里把杠分记为独立的即时流水,并标记是否可被流局回收,这样终局结算只需合并流水,不必回溯每一手牌的操作顺序。
一炮多响时分数如何分摊到每一位玩家?
先确定响牌人数与各自番型,再按位计算应得总分,最后由点炮方按同一比例承担。若规则允许包牌,还需先扣除包牌方责任份额,剩余部分才分摊给点炮方,避免同一分数被重复扣除。
中途退出或断线的玩家分数怎么处理?
通常冻结该玩家的即时流水,按当前手牌与已产生的杠分、花分补记,再由后续对局按托管逻辑继续。结算模块需要记录退出时间点与当时的分数快照,否则终局合并时无法解释分差来源。
不同房间配置不同参数会不会互相污染?
规则版本号与房间绑定,单局开始时锁定一份参数快照,中途改配置只对下一局生效。这样历史对局回放时可以直接按快照重算,复盘与申诉都有统一依据。

把当前对局口径写成一份可重算的结算样例

提供起胡分、封顶分、番型权重与分摊方式,即可得到一份带中间值的结算样例,直接对照现有实现对账。样例保留每一步的得分来源,出现分差时可以逐项定位到具体参数。