xiaoou 5b60255f02 docs: AI-readable DSL规范+番型识别器清单
dsl-specification.md: 新玩法生成指南
- 全部支持的DSL字段+有效值+约束
- 39种引擎识别番型名
- 支持的条件字符串/action/pre_hook
- 已知限制清单
- 创建新DSL的完整流程+检查清单

fan-recognizer-inventory.md: 番型识别器清单
- 每种番型的检测条件
- 事件番型的标志位映射
- 未实现的番型列表(使用将得分为0)

验证: AI按规范生成的南昌麻将(fixed wildcard发财)
→ 100%合规零警告,正常运行
2026-07-04 20:53:40 +08:00

Card Game Engine — 棋牌规则引擎

YAML DSL 驱动的棋牌规则引擎。一份 DSL 配置文件 = 一种玩法, 引擎加载后自动运行,不需要写玩法特定代码。

项目结构

card-game-engine/
├── docs/
│   ├── architecture-plan.md        # 架构设计文档
│   └── demo-implementation-plan.md # Demo 实施计划
├── RuleEngine/                     # C# 规则引擎核心
│   ├── Core/                       # MahjongTile 编码 / Deck 牌堆 / GameState 状态
│   ├── Patterns/                   # MeldsSolver 胡牌判断 + 番型识别
│   ├── Phase/                      # PhaseMachine 回合状态机
│   ├── Scoring/                    # ScoreEngine 计分引擎
│   ├── Dsl/                        # DslLoader YAML 加载 + CapabilityRegistry
│   └── AI/                         # RandomMahjongAI 随机AI验证用
├── RuleEngine.Tests/               # 单元测试 (45个)
├── dsl-examples/                   # 玩法 DSL 配置 (YAML)
│   ├── xuezhandaodi.yaml           # 四川麻将血战到底 (108张)
│   ├── guangdong_jipinghu.yaml     # 广东麻将鸡平胡 (136张 + 花牌)
│   ├── guobiao.yaml               # 国标麻将 (144张81番种)
│   └── wuhan.yaml                 # 武汉麻将 (136张红中癞子 + 258将)
└── Demo/                           # 控制台 Demo

核心设计

  • 规则引擎 ≠ 游戏引擎纯逻辑库C#),不依赖图形框架。输入状态 → 输出合法操作
  • 扑克/麻将引擎分离:各自精专,共享基础层
  • int 编码4 bytes/tile性能优先
  • 加载时能力检查DSL 声明 requires,引擎 CapabilityRegistry 自动验证

已实现能力

胡牌判断 (MeldsSolver)

能力 状态 说明
标准胡牌 (4面子+1对) 回溯搜索,含 wildcard 缺口填充
七对 纯对子形态wildcard 配对支持
十三幺 13种幺九+1重复
全不靠 14牌从16位置模板选wildcard 补位
一色双龙会 同色1-9各至少2张wildcard 支持
鬼牌/癞子 缺口填充式回溯 O(w×2^w)
258将检查 武汉麻将专用

番型识别 (IdentifyFans)

自动识别 16 种结构性番型:清一色、混一色、字一色、对对胡、暗七对、带幺九、混幺九、缺一门、平胡、断幺九、全大、全中、全小、大于五、小于五、全双、碰碰和

回合控制

能力 状态
摸→打→碰杠胡回合
优先级仲裁 (胡>杠>碰>吃)
血战到底 (胡后不结束)
查叫/查花猪
花牌 (摸到即补)

DSL 热切换

4 种麻将变体 100% 覆盖率,--dsl 参数切换

Demo 用法

# 交互模式(逐局展示)
dotnet run --project Demo
dotnet run --project Demo -- --dsl wuhan
dotnet run --project Demo -- --dsl guobiao
dotnet run --project Demo -- --dsl guangdong_jipinghu

# 压测模式
dotnet run --project Demo -- --auto --count 1000

# 运行测试
dotnet test                              # 全部 45 个

测试覆盖

  • 45 个单元测试 全部通过
  • 覆盖:牌编码、牌库构建、标准胡牌、七对、十三幺、全不靠、一色双龙会、 wildcard 补位、258将检查、番型识别清一色/混一色/字一色/对对胡/ 带幺九/缺一门/平胡/断幺九/全大/全小/全双)
  • 1000 局压测 0 报错

开源参考

  • q_algorithm (C# 胡牌算法库)
  • majiang_algorithm (Java 麻将引擎 + AI)
  • MahjongKit (Python 牌谱分析)
Description
YAML DSL 驱动的棋牌规则引擎 — 麻将 + 扑克,玩法即配置
Readme 1 MiB
Languages
C# 100%