二七王:实现 §5.4.4 强制跟牌分量拆解
原缺陷:混合甩牌在 can_playcard 牌型计算中被塌缩为扁平"多单张/多对",
跟牌只强制"同花色凑张数",未强制"拖拉机→对子→单张"的分量优先级。
修复:
- 合法甩牌时 can_playcard 记录分量需求 shuai_demand{tractors,pairs,singles},
do_playcard 存入 playproc、new_playround 复位
- 新增 arith.flush_follow_ok:在"同花色凑张数、主牌最大化"之上追加逐分量强制匹配
——能凑同长主拖必凑、能凑主对必凑(不足则退化为对子/单张),不得拆散去垫
- 新增 arith.remove_pairs 辅助
- 跟牌时 do_playcard 在 can_followcard 通过后再过 flush_follow_ok
不影响捡分/输赢(合法甩牌仍恒不可反超),仅补齐闲家被迫垫牌的结构约束。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -485,7 +485,8 @@ var cls_youle_erqiwang_paiju = cls_youle_erqiwang_paiju || {
|
||||
o_paiju.playproc.maxseat = -1; //谁的牌最大,位置
|
||||
o_paiju.playproc.maxcard = -1; //满足第一个玩家出牌的牌型最大牌
|
||||
o_paiju.playproc.cards = []; //本轮各位置出的牌,数组与位置序号对应
|
||||
o_paiju.playproc.cards.length= 3;
|
||||
o_paiju.playproc.cards.length= 3;
|
||||
o_paiju.playproc.shuai_demand= null; //首家甩牌的分量需求(供跟牌逐分量匹配),非甩牌为null
|
||||
},
|
||||
|
||||
//在牌列表中获取分牌和分值
|
||||
@@ -577,6 +578,8 @@ var cls_youle_erqiwang_paiju = cls_youle_erqiwang_paiju || {
|
||||
o_paiju.playproc.starttype = can.cardtype;
|
||||
o_paiju.playproc.maxseat = o_paiju.playproc.currseat;
|
||||
o_paiju.playproc.maxcard = can.cardvalue;
|
||||
//合法甩牌的分量需求,供跟牌逐分量强制匹配(§5.4.4);甩错退化为单张则为 null
|
||||
o_paiju.playproc.shuai_demand = can.shuai_demand ? can.shuai_demand : null;
|
||||
o_paiju.playproc.currseat = nextseat_1;
|
||||
//返回结果
|
||||
var re1 = {};
|
||||
@@ -598,6 +601,14 @@ var cls_youle_erqiwang_paiju = cls_youle_erqiwang_paiju || {
|
||||
re.result = false;
|
||||
return re;
|
||||
}
|
||||
//首家是甩牌时,追加"拖拉机→对子→单张"的强制分量匹配校验(§5.4.4)
|
||||
if (o_paiju.playproc.shuai_demand){
|
||||
if (!cls_youle_erqiwang_arith.flush_follow_ok(o_paiju.flower, cardsinhand, cards, o_paiju.playproc.shuai_demand)){
|
||||
var reF = {};
|
||||
reF.result = false;
|
||||
return reF;
|
||||
}
|
||||
}
|
||||
|
||||
//与之前的出牌比较大小
|
||||
if (can.cardvalue > o_paiju.playproc.maxcard){
|
||||
|
||||
Reference in New Issue
Block a user