From 5832b781c8399f433d39a411fefd4a897b6f5769 Mon Sep 17 00:00:00 2001 From: Joywayer Date: Wed, 12 Aug 2026 04:17:32 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=8C=E4=B8=83=E7=8E=8B=EF=BC=9Ais=5Fcontin?= =?UTF-8?q?uous=20=E7=9A=84=208=E2=86=926=20=E7=9B=B8=E9=82=BB=E8=A1=A5?= =?UTF-8?q?=E8=8A=B1=E8=89=B2=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit design §5.3 的「6 与 8 可组成拖拉机」是同花色内的相邻关系,但 is_8/is_6 只判 code % 100,不校验花色,导致 is_continuous(♥8=308, ♣6=206) 与 is_continuous(主8=1408, ♣6=206) 都返回 true。 影响面:get_chongguan 是唯一会拿整手牌(含各花色副牌)去扫描连对 链的调用点,连对链走到主 8 之后,手里任意花色的一对 6 都会被误判 为连续、多算 1 奖,并把链锚点带进副牌继续错误延伸(design §8.1 明确 A 到 5 这一段必须是选定花色的主牌)。其余调用点入参都是同花 色牌表或纯主牌表,不受影响。 改为要求牌编码相差 2(同花色的 8 与 6 恒差 2,跨花色差 100 的倍 数),并保留 is_8/is_6 守卫以免把「主A-主Q」这类差 2 组合放行。 test_arith 新增 5 项:同花色 8-6 连、三组跨花色 8-6 不连、差 2 但 非 8/6 的组合不连。 Co-Authored-By: Claude Opus 5 (1M context) --- server/games/erqiwang/class.arith.js | 7 +++++-- server/games/erqiwang/test/test_arith.js | 7 +++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/server/games/erqiwang/class.arith.js b/server/games/erqiwang/class.arith.js index e792404..9b299f0 100644 --- a/server/games/erqiwang/class.arith.js +++ b/server/games/erqiwang/class.arith.js @@ -219,8 +219,11 @@ var cls_youle_erqiwang_arith = cls_youle_erqiwang_arith || { if (is_fu2(bigcode) && is_zhuA(smallcode)){ return true; } - //8、6 - if (is_8(bigcode) && is_6(smallcode)){ + //8、6(design §5.3:7 不与 6/8 相连,6 与 8 相连) + //必须是同一花色的 8 与 6:牌编码同花色相差 2(主花色 1408-1406=2、副牌 308-306=2), + //跨花色则相差 100 的倍数。只判 %100 会把「♥8 + ♣6」误判为连对, + //进而在 get_chongguan 扫描整手牌时让副牌的 6 对错误接续主 8、多算奖(design §8.1 连对链) + if (is_8(bigcode) && is_6(smallcode) && (bigcode - smallcode == 2)){ return true; } return false; diff --git a/server/games/erqiwang/test/test_arith.js b/server/games/erqiwang/test/test_arith.js index 1fbe3fc..23240fc 100644 --- a/server/games/erqiwang/test/test_arith.js +++ b/server/games/erqiwang/test/test_arith.js @@ -156,6 +156,13 @@ t.eq('相邻 主8-主6(6/8可连)', cont(id(1, 1, 8), id(1, 1, 6)), true); t.eq('相邻 主6-主5', cont(id(1, 1, 6), z5), true); t.eq('相邻 正7-主6 不连(7不入普通序)', cont(Z7, id(1, 1, 6)), false); t.eq('相邻 主8-正7 不连', cont(id(1, 1, 8), Z7), false); +// 8/6 相邻必须同花色:跨花色的 8 与 6 不成连对(否则 get_chongguan 连对链会被副牌 6 对错误接续) +t.eq('相邻 副♥8-副♥6 同花色 连', cont(id(1, 3, 8), id(1, 3, 6)), true); +t.eq('相邻 副♥8-副♣6 跨花色 不连', cont(id(1, 3, 8), id(1, 2, 6)), false); +t.eq('相邻 主8-副♣6 跨花色 不连', cont(id(1, 1, 8), id(1, 2, 6)), false); +t.eq('相邻 副♠8-副♦6 跨花色 不连', cont(id(1, 4, 8), id(1, 1, 6)), false); +// 顺带确认非 8/6 的等差2组合仍不连(防守卫写宽) +t.eq('相邻 主A-主Q 不连(差2但非8/6)', cont(zA, id(1, 1, 12)), false); // ============ §7 算子:每档小光/过庄分界 + 升3级(补强)============ t.eq('常规65 g39小光', judge(65, 39, false), '小光/4');