打九江麻将,最容易在结算那几秒吵起来的往往不是谁胡了,而是“这牌到底几番”。
平胡和自摸只差一个字,落到分数上可能差出一截。这篇把本地常见的算法拆开讲,从胡牌判定说到自摸加成,再顺带聊聊哪些地方各牌桌写法不一样。
先判定,再算钱:胡牌判定是前置关卡
程序上,胡牌判定和计番是两段逻辑。判定只回答“能不能胡”,计番才回答“胡了值多少”。不少线上实现的争议,就出在这两步被混在一起写。
牌型检查的几个入口
常规牌型是四副顺子或刻子加一对将,七对走另一条分支。九江本地常见的是不带风牌、只用万筒条的简化牌池,所以“缺门”这件事在不同牌桌上态度不一样——有的要求缺一门才能胡,有的完全放开。这一条不写清,后面算番全是空的。
- 牌数校验:手牌张数先过一遍,挡掉明显异常
- 面子拆解:能否完整拆成面子加将牌
- 特殊牌型:七对、碰碰胡单独走分支,别塞进通用递归里
平胡的底番:看着简单,分歧最多
平胡一般指普通四面子一将、没有特殊番型的胡牌。底番通常按 1 番起算,但“1 番值多少分”取决于底分设置:有的桌子底分 1 分、番数照乘,有的干脆把平胡当 0 番,只收底分。
还有庄家这层。庄家胡牌或者庄家点炮,很多本地玩法会额外加一番或加一份,具体怎么加,各小区县不太统一。做算法的时候,建议把庄家加成做成独立开关,别硬编码进番型表——不然改一次规则要动半个文件。
自摸差在哪:三种常见写法
自摸的差异主要体现在加成方式上,而不是自摸本身算不算番。
- 加番型:自摸固定加 1 番,和碰碰胡、清一色这些番型平级相加。
- 翻倍型:结算时总分乘 2,番型不参与这次乘法。
- 加底型:自摸只加一份底分,完全不改变番数。
这三种写法在平胡牌上差别不大,一旦叠上高番牌型,结果能差出好几倍。翻倍型和加番型混用,是线上平台对账对不上的典型原因。
番型叠加:加法和乘法的顺序不能随手定
碰碰胡、七对、清一色、杠上开花、抢杠胡、海底捞月,单看都好实现,难的是叠在一起怎么算。是番数相加,还是取最大值,还是先加后乘?本地牌桌往往只是口头约定,没落到纸面。
一个比较稳的做法是:番型之间只做加法,自摸、杠上开花这类“事件型”加成放到结算末尾单独处理,避免同一份奖励被算两遍。
比如杠上开花本身已经带了自摸的意味,再叠一次自摸加成,就容易算重。
当然也有牌桌就认双份,这种时候规则说明比算法正确更重要。
几个容易被忽略的边界
- 抢杠胡算不算自摸:多数写法按点炮处理,由被抢杠那家付分
- 海底自摸:海底和自摸是否同时生效,各桌不一
- 一炮多响:多家同时胡,是都赔还是只赔最近一家
- 荒庄流局:杠分怎么退,得单独定一条
九江麻将的算法难点不在代码,而在规则本身没写死。同一句“自摸加一番”,能对应三种实现。
开局前把底分、庄家加成、自摸算法、番型上限这四项说清楚,比事后争论有用得多。做产品的话,把这些做成可配置项,比追求一套“标准答案”更实际。