feat: DSL字段 wildcard_rules.meld_mode (standard/any)

之前: 特殊风牌组合是'隐式规则',硬编码在type=random检查中
现在: YAML声明 meld_mode: any (南昌麻将),引擎检查并报告不支持

WildcardConfig新增MeldMode字段(默认standard):
- standard: 仅顺子/刻子/对子(引擎支持)
- any: 任意3张可配面子(南昌麻将,引擎不支持)

--check: meld_mode=any → '引擎未实现→仅支持standard'
规则从'隐式'变为DSL可表达的显式规则
This commit is contained in:
xiaoou
2026-07-05 00:40:03 +08:00
parent 89faec1165
commit e3ff0f057e
2 changed files with 6 additions and 3 deletions

View File

@ -196,10 +196,11 @@ public class CapabilityRegistry
// 冲关/德国: 仅南昌麻将骰子翻牌定精相关
if (rules.WildcardRules?.Type == "random")
{
warnings.Add("骰子翻牌定精: 冲关(精数×2^N)/德国(无精胡)计分规则引擎未实现");
warnings.Add("骰子翻牌定精: 引擎仅支持标准面子(顺子/刻子/对子)→特殊风牌组合不支持");
}
// Wildcard meld mode: 引擎仅支持standard(顺子/刻子/对子)
if (rules.WildcardRules?.MeldMode == "any")
warnings.Add("wildcard_rules.meld_mode=any 引擎未实现→仅支持standard(顺子/刻子/对子)");
// === 引擎功能边界警告: DSL可配置但引擎不支持或部分支持 ===
@ -304,6 +305,7 @@ public class WildcardConfig
{
public string Type { get; set; } = "";
public string Behavior { get; set; } = "";
public string MeldMode { get; set; } = "standard"; // standard=仅顺子/刻子/对子, any=任意3张可配面子(南昌麻将)
public int WildcardEncoding { get; set; } = 50;
public int RandomCount { get; set; } = 2; // random type: how many next-tiles are 精 (1=正精 only, 2=正精+副精)
public List<string>? Tiles { get; set; }

View File

@ -27,6 +27,7 @@ deal:
# 翻到X则X+1为正精X+2为副精。字牌按序循环。
wildcard_rules:
type: random
meld_mode: any
random_count: 2
wildcard_encoding: 50
behavior: substitute