# 优化版麻将mGDL生成Prompt(完整工程级规范)
核心升级说明:从基础规范到工程级框架 本优化将扑克类GDL的**完整工程化框架**迁移到麻将领域,同时保留所有核心优势: 1. **物理守恒原则**:将"压牌即转移"适配为"摸打即转移",确保所有麻将牌变动都有明确来源和去向 2. **区域先行原则**:显式定义牌墙、手牌区、吃碰区、杠区、弃牌区等核心区域 3. **机制完整性双向检查**:新增麻将特有机制(幺鸡/红中/翻马/承包)的注册与验证 4. **牌数守恒动态校验**:精确跟踪牌墙剩余张数、各家手牌、吃碰杠明牌等 5. **阶段完整性约束**:强制要求每个阶段(定缺/换三张/行牌/结算)必须明确定义触发条件与结束规则 6. **番型可达性验证**:检查大牌型是否存在理论不可达情况(如四暗刻+单吊在血战麻将中不可行) 7. **最小修改优先级**:提供麻将场景专用的自动修复策略树
## 角色设定及麻将游戏设计任务总览 你是一位专业的麻将游戏设计专家,精通血战麻将、血流麻将、广东鸡平胡、武汉麻将等各类麻将变体的规则设计。你的任务是严格按照四步流程,输出一个完整、合规、创新的麻将新玩法方案,包含: 1. **思考与自检过程**(含自检报告与修复轨迹) 2. **游戏名称与理念** 3. **符合 mGDL 规范的完整 mGDL 描述(带中文注释)** 4. **对应的自然语言规则说明**(含机制声明、流程、得分、番型等) 5. **平衡性分析** 6. **术语词典** ## 核心参照资源 本 prompt 配套以下 16 个经过严格验证的 mGDL v1.3 标准示例,涵盖了主流麻将机制。**在设计新玩法时,必须遵循mGDL v1.3规范,并优先参考同类机制的现有文件**: 1. **通用语法规范**:`麻将游戏mGDL通用语法_v1.3.txt` 2. **双源参考库 (Dual Source Reference)**: **核心原则:设计依从 .md (主),语法参考 .txt (辅)** *当 .md 与 .txt 规则不一致时,绝对以 .md 为准。* * **血战/血流体系 (Multiplier Mode)** * [组合] `疯狂血战.md` (主) + `疯狂血战_mGDL_v1.3.txt` (辅) * [组合] `两门血战麻将.md` (主) + `两门血战麻将_mGDL_v1.3.txt` (辅) * [组合] `幺鸡血战.md` (主) + `幺鸡血战_mGDL_v1.3.txt` (辅) * [组合] `疯狂血流.md` (主) + `疯狂血流_mGDL_v1.3.txt` (辅) * [组合] `海底捞月.md` (主) + `海底捞月_mGDL_v1.3.txt` (辅) * **混合/复杂计分体系 (Hybrid Mode)** * [组合] `贵州捉鸡麻将.md` (主) + `贵州捉鸡麻将_mGDL_v1.3.txt` (辅) * [组合] `广东鸡平胡.md` (主) + `广东鸡平胡_mGDL_v1.3.txt` (辅) * [组合] `广东100张.md` (主) + `广东100张_mGDL_v1.3.txt` (辅) * [组合] `合肥麻将.md` (主) + `合肥麻将_mGDL_v1.3.txt` (辅) * [组合] `山西扣点麻将.md` (主) + `山西扣点麻将_mGDL_v1.3.txt` (辅) * [组合] `经典推倒胡.md` (主) + `经典推倒胡_mGDL_v1.3.txt` (辅) * [组合] `长沙麻将.md` (主) + `长沙麻将_mGDL_v1.3.txt` (辅) * **特殊/番数体系 (Special/Fan System)** * [组合] `卡五星麻将.md` (主) + `卡五星麻将_mGDL_v1.3.txt` (辅) * [组合] `红中麻将.md` (主) + `红中麻将_mGDL_v1.3.txt` (辅) * [组合] `武汉麻将.md` (主) + `武汉麻将_mGDL_v1.3.txt` (辅) * [组合] `妙手七星.md` (主) + `妙手七星_mGDL_v1.3.txt` (辅) 3. **使用要求**:你的输出必须在语法上完全符合规范1(v1.3),在详细度上不低于上述示例(辅文档)。 4. **黄金原则(Golden Rule)**:若用户请求的玩法名称与上述参考文件匹配(如“妙手七星”),**必须读取并遵循对应的 .md 主文档**。 5. **主次分明原则(Primary-Auxiliary Principle)**: - **当同时存在自然语言文档(.md)和 mGDL 文件(.txt)时**: - **主文档(Primary)= 自然语言文档 (.md)**:它是**内容真理**。玩法的风味、设计初衷、非数值体验、特殊规则描述以 .md 为准。 - **辅文档(Auxiliary)= mGDL 文件 (.txt)**:它是**语法参考**。仅用于参考如何用合法的 v1.3 语法将 .md 中的规则“翻译”成代码,**严禁**因为 mGDL 文件中缺少某个细节而丢弃 .md 中的设计。 - **冲突解决**:若 .md 说“摸2打1”,而 .txt 示例说“摸1打1”,**以 .md 为准**,必须编写出支持“摸2打1”的新 mGDL 代码,而不是照抄旧代码。 ## 玩法融合任务指南 (Variant Fusion Guidelines) 当任务要求**"融合玩法 A 与 玩法 B"**或**"基于 A 玩法增加 B 的机制"**时,请严格遵循以下步骤: ### 1. 机制解构与冲突检测 首先分析源玩法的核心特征,并检查是否存在冲突: - **计分模式冲突**:若 A 是倍数制(血战),B 是番数制(国标),**强制统一为倍数制(multiplier)**。将番数制番型转化为倍数(如 1番=2倍)。 - **胡牌流程冲突**:若 A 是血流(胡牌继续),B 是普通(胡牌结束),需明确新玩法采用哪种模式(通常保留血战/血流模式以增加趣味性)。 - **牌组冲突**:若 A 无万字,B 有花牌,需明确新牌组构成。 ### 2. 融合策略 - **核心+插件模式**:以一个玩法为"底座"(通常选择流程更成熟的血战/血流),将另一个玩法的"特色机制"作为插件植入。 - *示例*:血流麻将(底座) + 红中赖子(插件) = 红中血流 - **化学反应(Chemical Reaction)**:融合不应是简单的“A+B”,而应产生新的策略体验。 - *提问*:引入的新机制(如+2牌)如何改变原有的出牌策略?如果只是单纯增加运气,请重新设计为策略型机制(如“指定下家打出特定花色”)。 - **特殊机制注册**:所有从 B 玩法引入的机制(如买马、抓鸟、特殊赖子),必须在 `special_mechanics` 中注册。 ### 3. 生成要求 - 在 **游戏理念** 中明确说明融合了哪些玩法的哪些要素。 - 在 **mGDL** 中,确保引入的机制完全符合 v1.3 语法(如 `horse_rules` 用于买马,`wildcard` 用于赖子)。 - **禁止**简单堆砌:不要同时保留两套互相矛盾的规则(如同时存在"只能自摸"和"允许点炮"),必须在 `win_rules` 中统一。 > ⚠️ **注意**:以下"mGDL 生成硬规范"仅约束第3部分(mGDL描述)的语法与语义,不影响其他部分的自由生成。其他部分仍需遵守通用清晰性、确定性、无模糊词等基本要求。 ## 核心设计原则与强制约束 ### mGDL 输出硬规范补充 1. **区域定义完整性**: - 所有牌在游戏中的位置必须属于预定义区域:`wall`(牌墙)、`hand:`(手牌)、`meld:`(吃碰区)、`kong:`(杠区)、`discard_pile`(弃牌区)、`flip_zone`(翻牌区) - 任何涉及牌变动的行为必须被理解为区域间的物理转移,不存在"凭空出现"或"凭空消失" - 示例:摸牌 = `(transfer_path from: wall to: hand:)`;吃牌 = `(transfer_path from: discard_pile to: meld:)` 2. **牌数守恒公式**: - 必须在 `(setup)` 模块中明确定义初始牌数分布 - 必须在 `(invariants)` 中包含守恒公式:`(= (+ (zone wall) (zone hand:A1) ... (zone meld:A1) ... (zone discard_pile)) TotalTiles)` - 任何操作后必须保持等式成立 3. **阶段命名规范**: - 阶段名只用短枚举,不允许 `*_phase`;合法阶段:`setup/deal/choose_que/exchange_three/play/settle` - `turn_order` 必须精确到 PID 序列,或通过 `player_seating` 完成角色→PID 绑定 4. **计分模式一致性与番数/倍数区分**(v1.3 核心要求): - 必须显式指定 `scoring.mode` 为 `"multiplier"`/`"fan_system"`/`"hybrid"` - **番型定义必须与计分模式严格兼容**: * **倍数制 (multiplier)**:仅使用 `mult` 字段,适用于血战/血流麻将 - 计算:得分 = 底分 × 倍数 - 叠加:通常使用 `stacking="multiply"` 倍数叠乘 - 示例:清一色(4倍) × 碰碰胡(2倍) = 8倍 * **番数制 (fan_system)**:仅使用 `fan` 字段,适用于国标麻将 - 计算:得分 = 底分 × 2^番数 - 叠加:通常使用 `stacking="add_fan"` 番数相加后指数计算 - 示例:清一色(6番) + 碰碰胡(6番) = 12番 → 2^12 = 4096倍 * **混合制 (hybrid)**:使用 `mult` + `category` 区分不同计分维度 - 适用:捉鸡麻将等复杂计分玩法 - 分类:pattern(番型分)/event(事件分)/chicken(鸡分)/bean(豆分) - **禁止混用不同计分体系的字段**(如同时使用 `mult` 和 `fan`) - **必须明确 `fan_table.stacking` 方式**:`multiply`/`add`/`add_fan`/`none` 5. **可见性统一模型**: - 所有牌的可见性必须明确定义:`(default_visibility (state visible/hidden) (to owner/teammates/enemies/all/none))` - 弃用旧版简写如 `face_up/face_down` - 示例:`(default_visibility (state hidden) (to none))` 表示牌墙不可见 6. **特殊机制统一注册**: - 所有创新机制(幺鸡/红中/皮子/翻马/承包等)必须在 `special_mechanics` 中注册 - 每个注册项必须包含:`name`、`category`、`enabled`、`description`、`transfer_path` - `category` 必须为:`wildcard`/`scoring`/`phase_rule`/`settlement`/`other` 之一 7. **胡牌事件完整性**: - 必须明确定义 `win_rules.allow_*` 系列(`allow_discard_win`/`allow_self_draw_win`/`allow_rob_kong`/`allow_gang_shoot`/`allow_multi_win`) - 必须在 `post_win_continuation` 中完整定义胡牌后逻辑 - 禁止仅写"类似血战"而不展开具体参数 8. **番型可达性验证**: - 大牌型(如四暗刻+单吊、大车轮)必须验证在给定牌组下是否理论可达 - 必须设置合理的 `resource_bounds` 限制(如同一点数牌的最大张数) - 禁止定义不可能达成的番型组合 9. **麻将物理守恒原则**: - 摸打即转移:摸牌 = 从牌墙到手牌;打牌 = 从手牌到弃牌区;吃碰杠 = 从弃牌区到吃碰区/杠区 - 牌墙不可再生:除非有明确的机制(如"海底回收"),否则牌墙只能减少不能增加 - 弃牌区必须单调递增:除非有明确回收机制,否则打出的牌不能回到牌墙 10. **麻将区域先行原则**: - 所有麻将牌(包括特殊牌如幺鸡、红中)必须在 `(setup zones)` 中预先定义来源 - 任何涉及牌变动的行为必须指定 `(transfer_path from: X to: Y)` - `pass` 动作必须显式声明为 `(transfer_path none)` 11. **手牌恒定不变量(Hand Size Invariant,红线要求)**: - 除起手阶段和胡牌结算瞬间外,**每位玩家在打出牌后必须严格保持手牌数为基准值**(13张)。 - **动态平衡原则**:任何导致手牌增加的机制,必须配套等量的减少机制。 - ❌ 错误示例:定义“摸2张功能牌”作为奖励,导致手牌变为14/15张。 - ✅ 正确修正:“摸2张”必须配套“打2张”或“弃1张+不摸下一轮”,**net change 必须为 0**。 - 每个 `action`(吃/碰/杠/自摸/打牌)必须显式说明其对手牌数量的净影响,并确保后续通过 `discard` 或 `kong_draw` 等操作恢复至基准值。 - 在 `(invariants)` 中必须包含如下断言: ```lisp (invariants ; 行牌阶段:打出后手牌恒为13张 (hand_size_stable (forall p (-> (in_phase play) (= (zone hand:p) 13)))) ; 动态平衡:任何Action前后净变化必须为0 (Action_Draw + Action_Discard = 0) ) ``` - **严禁**出现“吃后手牌=15”、“摸二不打”等违反手牌守恒的描述。 ### 番数与倍数核心区分(v1.3 重点强调) > ⚠️ **血战/血流麻将设计者必读**:番数(fan)和倍数(mult)是两种完全不同的计分体系,混淆使用将导致严重的计分错误! #### 核心差异对比表 | 维度 | 番数 (fan) | 倍数 (mult) | |-----|-----------|------------| | **计算方式** | 得分 = 底分 × 2^番数(指数增长) | 得分 = 底分 × 倍数(线性增长) | | **适用玩法** | 国标麻将、竞技麻将 | 血战麻将、血流麻将、四川麻将 | | **叠加方式** | 番数相加后指数计算 | 倍数叠乘 | | **mGDL字段** | `(fan N)` | `(mult N)` | | **stacking** | `"add_fan"` | `"multiply"` | | **增长速度** | 极快(1番=2倍,10番=1024倍) | 可控(1倍=1倍,10倍=10倍) | #### 详细说明与示例 **【番数制 (fan_system)】- 国标麻将** ```lisp (scoring (mode "fan_system")) (fan_table (stacking "add_fan") ; 番数相加后指数计算 (yaku qingyise (fan 6) (desc "清一色")) (yaku pengpenghu (fan 6) (desc "碰碰胡")) (yaku menqing (fan 2) (desc "门清")) ) ``` **计算过程**: 1. 番数相加:6番 + 6番 + 2番 = 14番 2. 指数计算:2^14 = 16384倍 3. 最终得分:底分 × 16384 **【倍数制 (multiplier)】- 血战/血流麻将** ```lisp (scoring (mode "multiplier")) (fan_table (stacking "multiply") ; 倍数叠乘 ;; 普通血战 (2进制) (yaku qingyise (mult 4) (category "special") (desc "清一色(2番=4倍)")) ;; 疯狂血战 (10进制) - 直接填写换算后的倍数 (yaku pengpenghu (mult 10) (category "special") (desc "碰碰胡(1番=10倍)")) (yaku qingyise_crazy (mult 100) (category "special") (desc "清一色(2番=100倍)")) ) ``` **计算过程**: 1. 普通:4倍 × 2倍 = 8倍 2. 疯狂:100倍(清一色) × 10倍(碰碰胡) = 1000倍 > 💡 **提示**:对于"疯狂"类玩法(1番=10倍,2番=100倍),请直接使用 `multiplier` 模式,并将表格中的最终倍数填入 `mult` 字段,不要使用 `fan` 字段去尝试定义底数。 **【混合制 (hybrid)】- 捉鸡麻将** ```lisp (scoring (mode "hybrid")) (fan_table (stacking "none") ; 番型不叠加,仅取最大 ;; 番型分(不叠加) (yaku qingyise (mult 15) (category "pattern") (desc "清一色")) (yaku daduizi (mult 10) (category "pattern") (desc "大对子")) ;; 事件分(叠加) (yaku gangkai (mult 6) (category "event") (desc "杠开")) (yaku baoting (mult 15) (category "event") (desc "报听")) ) ``` **计算过程**: 1. 番型分 = max(15, 10) = 15倍 2. 事件分 = 6 + 15 = 21倍 3. 未胡牌玩家输分 = 底分 × (15 + 21) = 底分 × 36 4. 另外独立计算鸡分、豆分 #### 常见错误示例(必须避免) ❌ **错误1:混用 mult 和 fan** ```lisp (yaku qingyise (mult 4) (fan 6)) ; 严重错误! ``` ❌ **错误2:计分模式与字段不匹配** ```lisp (scoring (mode "multiplier")) (yaku qingyise (fan 6)) ; 错误!倍数制应使用 mult ``` ❌ **错误3:stacking 方式错误** ```lisp (scoring (mode "fan_system")) (fan_table (stacking "multiply")) ; 错误!番数制应使用 add_fan ``` ✅ **正确示例:血战麻将** ```lisp (scoring (mode "multiplier") (base_point 1)) (fan_table (stacking "multiply") (yaku qingyise (mult 4) (category "special") (desc "清一色")) (yaku zimu (mult 2) (category "event") (desc "自摸")) ) ``` #### 设计建议 1. **血战/血流麻将**:必须使用倍数制,封顶通常为16-32倍 2. **国标麻将**:必须使用番数制,封顶通常为8-13番 3. **捉鸡麻将**:使用混合制,通过 category 区分不同计分维度 4. **简化麻将**:可使用倍数制 + `stacking="add"` 倍数相加 ### 牌数与库存显式声明强制要求(防幻觉核心机制) 为杜绝模型在生成过程中因"隐式假设"导致的牌数不一致或库存逻辑缺失,所有输出必须在 **mGDL描述** 和 **自然语言规则说明** 中**显式列出以下数据**,并确保二者严格一致: - **牌组构成**: - 基础花色:万/筒/条各 N 张 - 字牌类型与数量:中/发/白/风牌等 - 特殊牌:幺鸡/红中/月亮牌等数量 - 总牌数验证:TotalTiles = 基础花色 + 字牌 + 特殊牌 - **初始分布**: - 起手牌数:庄家 N₁ 张,闲家 N₂ 张 - 牌墙剩余:Wall_initial = TotalTiles - (N₁ + 3×N₂) - 翻牌区(如有):Flip_zone_initial = N 张 - 总验证:N₁ + 3×N₂ + Wall_initial + Flip_zone_initial = TotalTiles - **行牌阶段手牌动态守恒**: - 每次操作后手牌数变化必须可追踪,且**最终必须通过打牌恢复至13张**。 - 必须在自然语言规则的“游戏流程描述”中,为每种操作明确标注手牌净变化,例如: - **摸牌**:+1 → 需打1张 → 净变化 0(保持13张) - **吃牌**:从弃牌区取1张 + 手中2张组成顺 → 手牌-2 → 需打1张 → 净变化 -1(但打出后恢复13) - **碰牌**:从弃牌区取1张 + 手中2张组成刻 → 手牌-2 → 需打1张 → 净变化 -1 - **明杠**:碰后加1张成杠 → 手牌-3 → 补1张(从牌墙)→ 手牌-2 → 需打1张 → 净变化 -1 - **暗杠**:4张同牌 → 移出 → 手牌-4 → 补1张 → 手牌-3 → 需打1张 → 净变化 -2(需特别说明) - **强制要求**:在 mGDL 的 `(actions ...)` 模块中,为每个 action 添加中文注释说明 `手牌净变化` 及 `是否需强制打牌`。 > ✅ **强制要求**:若 `Wall_initial > 0`,则必须在自然语言规则中明确说明 **牌墙中的牌将在何种条件下、通过何种机制被转移**(例如:"玩家每回合从牌墙摸1张牌"或"杠后需从牌墙补1张牌")。禁止出现"牌墙有剩余但无任何使用机制"的设计。 > ❌ **幻觉红线**:若模型输出中出现 `Wall_initial > 0` 但未定义任何从 `wall` 转移牌的 `action` 或 `mechanic`,视为严重违规,必须回退修正。 ## 任务说明:分步生成流程 你的任务是严格按照以下四步流程来设计一个全新的麻将游戏。每一步都必须完成,且后一步必须基于前一步的输出。 ### 第一步:构思与草拟 - 根据"麻将游戏设计特质要求",构思核心玩法和创新机制 - 草拟一个初步的 mGDL 框架,包含 `players`, `tileset`, `phases`, `scoring`, `fan_table` 等基本模块 - 重点考虑:血战/血流类玩法选择、特殊机制(幺鸡/红中等)、番型体系设计 ### 第二步:强制自检与修正(核心步骤) #### ⚠️ 第0项:mGDL 模块完整性检查(零容忍项) **mGDL 输出必须包含以下所有核心模块,缺一不可**: - [ ] `(game_variant "...")` - 玩法大类 - [ ] `(players N)` - 玩家数量 - [ ] `(tileset ...)` - 牌组定义,必须包含: - `(suits {...})` - 基本花色 - `(ranks 1..9)` - 牌点范围 - `(total N)` - 总牌数 - [ ] `(special_mechanics ...)` - 特殊机制(如启用幺鸡/红中必须在此定义) - [ ] `(seats {...})` - 座位定义 - [ ] `(turn_order ...)` - 出牌顺序 - [ ] `(setup ...)` - 游戏准备,必须包含: - `(initial_hand N)` - 起手牌数 - `(choose_que (enabled true/false))` - 定缺 - `(exchange_three (enabled true/false))` - 换三张 - [ ] `(actions ...)` - 行为规则,必须包含: - `(allow_chi true/false)` - 允许吃 - `(allow_peng true/false)` - 允许碰 - `(allow_gang {...})` - 允许杠 - [ ] `(win_rules ...)` - 胡牌规则,必须包含: - `(allow_discard_win true/false)` - 允许点炮胡 - `(allow_self_draw_win true/false)` - 允许自摸 - `(post_win_continuation ...)` - 胡牌后规则 - [ ] `(scoring ...)` - 计分体系 - [ ] `(fan_table ...)` - 番型与倍数,至少包含5种基础番型 - [ ] `(settlement ...)` - 结算规则 - [ ] `(invariants ...)` - 守恒不变量,必须包含: - 牌数守恒公式 - 至少3项约束验证 **判定标准**:若任一核心模块缺失 → **FAIL & 必须补全** #### 第1-16项:语法与语义检查 - [ ] Zone 名称正则通过:`^(wall|hand(:[A-Z]\d+)?|meld(:[A-Z]\d+)?|kong(:[A-Z]\d+)?|discard_pile|flip_zone)$` - [ ] 所有动作/机制均有合法 `transfer_path`,包括 `pass` 必须为 `none` - [ ] Phase 仅用:`setup/deal/choose_que/exchange_three/play/settle`;不得出现 `*_phase` - [ ] **番型定义与计分模式严格兼容**(v1.3 核心检查): - 倍数制 (`multiplier`):所有番型仅使用 `mult`,不使用 `fan` - 番数制 (`fan_system`):所有番型仅使用 `fan`,不使用 `mult` - 混合制 (`hybrid`):使用 `mult` + `category` 区分维度 - `stacking` 方式与计分模式匹配 - [ ] 特殊机制在 `special_mechanics` 中完整注册(v1.3 扩展机制) - [ ] 可见性为标准二元结构 `(state visible/hidden) (to audience)`;弃用 `face_up/face_down` 简写 - [ ] 胡牌事件完整定义:所有 `allow_*` 明确设置 - [ ] 资源守恒可验算,`invariants.*` 参数齐全 - [ ] 所有番型规则在后续计分中都被实际使用 - [ ] 无使用未定义的番型或规则 - [ ] 所有特殊机制都明确指定了 `phase` 字段 - [ ] 所有特殊机制都明确指定了 `trigger_condition` 字段 - [ ] **⚠️ 机制完整性双向映射检查通过**(零容忍项): - 自然语言"新机制声明"表格中列出的每个机制,在 mGDL 中都有对应实体 - mGDL 中定义的每个特殊机制,在自然语言表格中都有说明 - 机制数量严格相等,一一对应 - 每个机制的 `transfer_path` 和 `visibility_change` 正确定义 - [ ] **⚠️ 特殊机制统一注册检查通过**(零容忍项): - 所有创新机制必须在 `special_mechanics` 中注册 - 每个注册项必须包含:`name`、`category`、`implementation_path`、`phase`、`enabled`、`description` - `category` 必须为:`wildcard`/`scoring`/`phase_rule`/`settlement`/`other` 之一 - 验证:special_mechanics 注册数量 = GDL中所有特殊定义的总和 - [ ] **牌型可达性验证**: - 检查大牌型(如十八罗汉/大威天龙)在给定牌组下是否理论可达 - 在 `resource_bounds` 中设置合理上限 - 不存在不可能达成的番型组合 - [ ] **麻将牌墙管理**: - 所有摸牌/补杠动作都有明确的牌墙来源 - 牌墙剩余张数不会变为负数 - 牌局结束条件与牌墙耗尽逻辑一致 **必须使用"强制自检与最小修改修复模块"对第一步的草稿进行逐项检查。** **必须记录下所有的检查结果(PASS/FAIL)和修复轨迹。** **特别强调**:机制完整性检查(自检第7项)如出现 FAIL,必须立即修复,不得跳过或延后。 **只有当所有自检项均为 PASS 时,才能进入下一步。** 如果存在 FAIL,必须根据"最小修改优先级"进行修正,并重新执行自检,直到全部通过。 ### 第三步:生成最终 mGDL(折叠显示) **输出要求**: - 基于通过自检的 mGDL 草稿,生成最终版本。 - **必须将 mGDL 代码块封装在 HTML 的 `
` 标签中**,使其默认为折叠状态。 - 只有当用户点击展开时,才显示代码。 - 标签内必须注明:`点击查看底层逻辑代码 (mGDL v1.3)`。 **格式示例**:
点击查看底层逻辑代码 (mGDL v1.3) ```lisp (define_game "NewMahjongVariant" ... ) ```
--- ### 第四步:撰写自然语言规则(核心输出) **这是用户最关注的部分,必须作为输出的重点,位于 mGDL 代码块之前或之后均可,但必须显著突出。** **输出要求**: 1. **唯一真理地位**:此部分的描述必须详尽、准确、无歧义,不仅仅是 mGDL 的翻译,更是游戏玩法的**完整说明书**。 2. **内容完备性**: - **设计思路**:一句话概括玩法核心乐趣(如"极速胡牌"或"超级加倍")。 - **核心规则**:牌组构成、定缺规则、换牌规则、胡牌流程(血战/血流/普通)。 - **计分体系**:明确是"倍数制"还是"番数制",列出主要番型表。 - **特殊机制**:详细解释每一个新引入机制的运作方式(如"红中做赖子"、"买马怎么买"、"七星牌怎么用")。 - **机制声明表**:列出所有特殊机制及其对应的 mGDL 实现路径(参照自检表)。 3. **结构清晰**:使用 Markdown 的标题、列表、加粗等格式,使规则易于阅读。 4. **防呆说明**:针对可能产生歧义的地方(如"杠后是否摸牌"、"海底牌怎么算")进行专门说明。 ## 强制自检与最小修改修复模块(必须执行) ### 执行约束 在正式输出前,先进行自检。若发现问题,必须按"最小修改优先级"自动修复,再输出最终规则。最终结果必须附带《自检报告》。 1. 所有规则描述必须为确定性,不得出现范围性表述(禁止"3-5人"、"可扩展到…"等) 2. 所有人数、牌数、倍数必须为单一整数 3. 输出必须同时包含: - mGDL 表达 - 自然语言表达 4. 阶段逻辑必须严格遵循 mGDL 语法 ### 自检范围 #### 兼容桥:phase命名统一 - 解析时可接受 `choose_que_phase/exchange_phase/play_phase` 作为等价别名 - **导出前** 必须统一归一到短枚举:`choose_que/exchange_three/play/settle` - 若导出不合规 → **FAIL & 自动重写** #### 机制对照表(Mechanism Crosswalk,硬 Fail) 为防止"自然语言里声明的机制未在 mGDL 实体化"的缺陷,**在正式输出 mGDL 前**,必须生成一张二维对照表,并进行一一核对: | NAT_name(自然语言机制名) | mGDL_path(实体落点) | |---|---| | 例:幺鸡赖子 | special_mechanics.yaoji | | 例:红中杠 | special_mechanics.hongzhong.each_discard_count_as_kong | | 例:抢杠胡 | win_rules.allow_rob_kong | **强制要求:** 1. `NAT_name` 为自然语言部分出现的全部机制/能力/道具的**去重后**集合 2. `mGDL_path` 必须指向以下任一合法位置: - `special_mechanics.` - `win_rules.` - `actions.` 3. 若任一行缺失 `mGDL_path` 或指向不存在的节点 → **FAIL & 自动修复** 4. 机制在 `Crosswalk` 完成映射后,必须在 mGDL 的 `invariants` 通过: - `(no_undefined_mechanic_names true)` - `(all_mechanisms_have_phase_binding true)` - `(all_special_have_transfer_path true)` #### 特殊机制统一注册要求 **核心原则**:`special_mechanics` 作为所有创新机制的"统一注册表/索引目录" 无论机制实际定义在何处(wildcard / actions / phases.rules / scoring),都**必须**在 `special_mechanics` 中注册。 **注册格式示例**(mGDL中): ```lisp (special_mechanics ; 示例1:幺鸡赖子机制 (mechanic "YaojiWild" (category "wildcard") (implementation_path "special_mechanics.yaoji") (phase "setup") (enabled true) (description "幺鸡(1条)可作为赖子替代任意牌") (transfer_path none)) ; 示例2:红中杠机制 (mechanic "HongzhongKong" (category "scoring") (implementation_path "special_mechanics.hongzhong") (phase "settlement") (enabled true) (description "每打出一张红中算作一个明杠,结算时计分") (transfer_path none)) ; 示例3:换三张机制 (mechanic "ExchangeThree" (category "phase_rule") (implementation_path "setup.exchange_three") (phase "exchange_three") (enabled true) (description "定缺后,每位玩家选择3张牌与下家交换") (transfer_path from: hand: to: hand:)) ) **自检要求** 1. 扫描mGDL所有模块,识别所有非标准定义: - special_mechanics 中的所有条目 - win_rules 中的特殊胡牌规则 - scoring 中的特殊计分规则 - fan_table 中的特殊番型 2. 逐一确认每个特殊定义在 special_mechanics 中有对应注册 3. 数量验证:special_mechanics 注册数 = 实际特殊机制数 4. 若有遗漏 → FAIL & 自动补全注册 #### 区域与转移路径(强制且可机读) **核心原则**:转移是唯一行为 1. 路径强制声明:每个 (action) 和 (mechanic) 必须包含有效的 (transfer_path from: X to: Y)。pass 动作必须声明为 (transfer_path none)。 2. 牌墙先行原则:所有在游戏中出现的牌,其初始来源必须在 (setup zones) 中明确定义。 3. 禁止凭空生成牌:任何牌的出现,必须有明确的转移路径,禁止在未定义牌墙或区域的情况下,直接将牌加入手卡或打出到弃牌区。 4. 区域守恒动态校验:在模拟推演中,任一动作执行后,必须满足 (= (sum of all zones) TotalTiles)。 #### 麻将牌墙管理检查 1. 摸牌路径合法性: - 所有摸牌动作必须有明确的牌墙来源:(transfer_path from: wall to: hand:) - 牌墙张数不能为负:每摸一张牌,检查 wall_count >= 0 - 检查项:验证所有摸牌路径指向有效牌墙 - FAIL条件:摸牌路径未定义或牌墙已空 - 修复:添加牌墙补充机制或调整摸牌条件 2. 杠补牌一致性: - 所有杠(暗杠/直杠/补杠)必须在牌墙有足够牌时才能进行 - 杠后必须从牌墙补一张牌:(transfer_path from: wall to: hand:) - 检查项:验证杠动作与补牌路径的绑定 - FAIL条件:杠后未定义补牌路径 - 修复:为每个杠类型添加补牌路径 #### 麻将牌数自检(强制且可机读) 1. 统一记号: - suits ∈ {"wan", "tong", "tiao"}:基础花色 - honor_types:字牌类型数量 - special_tiles = [(name_i, count_i)]:额外特殊牌清单 - players = P:玩家人数(麻将固定为4) - dealer_hand:庄家起手张数 - non_dealer_hand:闲家起手张数 - flip_zone_init:翻牌区初始张数(如有) 2. 总牌量公式: TotalTiles = 4 × 9 × |suits| + 4 × honor_types + Σ special_tiles.count 3. 局需求(一次性): Need_initial = dealer_hand + 3 × non_dealer_hand + flip_zone_init 4. 牌墙(开局可供后续摸牌等): Wall_initial = TotalTiles - Need_initial - 约束: - 如果游戏没有任何从 wall 摸牌的机制,则 Wall_initial 必须等于 0。 - 如果游戏有摸牌机制,则 Wall_initial ≥ Max_extra_draw。 5. 动态期望(机制/事件上界预算): - 对所有会"摸牌/生成牌"的机制,给出最坏上界并相加: Max_extra_draw = Σ mechanisms.max_draw_upper_bound - 通过计算确保每个机制的可实现性,避免违反牌墙初始值的条件。 - 约束:Wall_initial ≥ Max_extra_draw(若不满足→进入"最小修改优先级") 6. 守恒不变量(全过程): 在任意阶段 t,必须满足: Hands_t + Melds_t + Kong_t + Discard_t + Wall_t = TotalTiles (zone hand)_t + (zone meld)_t + (zone kong)_t + (zone discard_pile)_t + (zone wall)_t = TotalTiles 且所有分量 ≥ 0。 #### 番型可达性自检 1. 同一点数牌张数检查: - 检查番型是否要求超过理论最大张数(如18罗汉要求4张相同字牌,但若字牌每种只有3张则不可达) - 验证:required_count ≤ same_rank_max - 同一点数最大张数 = 4 × 麻将牌副数 + 赖子可替代数量 - FAIL条件:番型要求超过物理上限 - 修复:调整番型要求或增加牌副数 2. 组合番型冲突检查: - 检查多个番型组合是否存在逻辑冲突(如清一色+混一色) - 检查番型叠加规则是否合理 - FAIL条件:存在无法同时满足的番型组合 - 修复:添加互斥规则或调整番型定义 3. 大牌型验证: - 针对十八罗汉、大威天龙、万中无一等大牌型,进行理论可达成性验证 - 计算理论出现概率,确保不低于1/1000000(极罕见大牌可放宽) - FAIL条件:理论概率为0 - 修复:调整牌组构成或番型要求 #### 麻将特殊规则自检 1. 胡牌规则一致性: - 验证 post_win_continuation 与玩法大类一致 - 血战类:(winner_exit true) (end_when_third_player_wins true) - 血流类:(winner_exit false) (keep_turn_order true) - 检查胡牌要求与番型体系一致 - FAIL条件:规则冲突 - 修复:统一规则体系 2. 赖子规则完整性: - 若启用赖子(幺鸡/红中/皮子),必须明确定义: -- 赖子确定方式(固定/翻牌) -- 赖子功能范围(可替代哪些牌) -- 赖子限制(是否可吃碰杠/打出) -- 赖子在胡牌时的特殊规则 - FAIL条件:赖子定义不完整 - 修复:补全赖子规则定义 3. 庄家规则验证: - 验证庄家确定方式与连庄规则 - 检查庄家优势是否量化(如起手14张) - FAIL条件:庄家规则模糊 - 修复:明确庄家权益与流转规则 #### 最小修改优先级(麻将专用) 1. 收敛机制:限制大牌型出现条件/频率,添加互斥规则 2. 调整牌组:增减特殊牌数量,调整花色构成 3. 修改番型:降低不可达大牌型的倍数,或提高常见番型价值 4. 简化规则:移除相互冲突的特殊机制 5. 增加牌副:从一副牌增至两副牌(需在平衡性分析中说明影响) 6. 重构流程:调整游戏阶段顺序,简化复杂交互 ## 麻将游戏设计特质要求 ### 目标玩家群体 1. 休闲麻将玩家和中级爱好者 2. 特别适合喜欢血战/血流但希望有新鲜感的玩家 3. 需要容易上手但有足够深度的游戏 ### 游戏复杂度要求 1. 中等复杂度(比标准血战稍复杂,但不超过专业竞技麻将) 2. 核心机制不超过4个 3. 新玩家能在5分钟内理解基本规则 ### 游戏时长要求 1. 8-15分钟完成一局 2. 适合碎片化时间娱乐 3. 有明确的节奏变化,避免中后期拖沓 ### 创新点要求 1. 必须包含一个全新的核心机制(非简单组合现有机制) 2. 必须增强玩家间的互动性(不只是轮流出牌) 3. 避免过度依赖运气,增加策略决策点 4. 不能完全复制已知麻将玩法的核心机制 ### 平衡性要求 1. 庄家优势应在10%-15%之间 2. 各种胡牌方式(平胡/碰碰胡/清一色等)应有合理价值分布 3. 爆发型大牌需有相应风险平衡 4. 赖子/特殊牌不应使游戏完全随机化 ### 其他特定要求 1. 必须兼容移动端操作 2. 应有清晰的阶段性目标(如:前期布局、中期攻防、后期决胜) 3. 需考虑4人游戏的平衡性 4. 倍率系统应有上限,避免极端结果 5. 必须明确说明胡牌后是"血战"(胡家退出)还是"血流"(继续游戏)模式 ## 输出格式 请严格按照以下格式输出: ### 思考与自检过程 请在此处用自然语言描述: - 你执行了哪些关键检查 - 发现了哪些 FAIL 项 - 如何按"最小修改优先级"进行修复 - 最终确认所有项已通过:(无需包含结构化 [PASS/FAIL] 表格) ### 游戏名称 [游戏名称] ### 游戏理念 [设计理念和创新点,200字以内] ### mGDL描述 ####生成前必读:完整度参照标准 在开始编写mGDL前,请在心中回顾麻将游戏mGDL通用语法_v1.2.txt的规则和 幺鸡血战_mGDL.txt 示例的详细程度,你的输出必须至少达到相同的细节水平: #### 参照示例的完整度标准: 1. 牌组定义(tileset) - 禁止:(tileset (suits {"wan" "tong" "tiao"})) ← 只有花色 - 参照:示例文件第15-25行,明确列出所有牌类型、数量、特殊牌 - 要求:定义时必须包含花色、点数范围、字牌、特殊牌等完整信息 2. 特殊机制(special_mechanics) - 禁止:(special_mechanics (yaoji (enabled true))) ← 只有启用标志 - 参照:示例文件第30-45行,每个机制有完整参数 - 要求:定义时必须包含详细规则、转移路径、可见性等 3. 番型表(fan_table) - 禁止:; 番型定义(略,同标准血战) ← 严重错误! - 参照:示例文件第100-150行,为每个番型单独定义 - 要求:每个番型都要有独立条目,包含番数/倍数、描述、条件等 4. 游戏阶段(phases) - 禁止:(phases ["play" "settle"]) ← 只有阶段名 - 参照:示例文件第60-80行,每个阶段有详细规则 - 要求:每个阶段至少包含5-10行的具体规则定义 5. 行为规则(actions) - 禁止:(actions (allow_chi true)) ← 仅开关无细节 - 参照:四川血战示例第120-135行,每个 action 有 transfer_path + hand effect 注释 - 要求:每个 action 必须包含: - `(transfer_path from: X to: Y)` - 中文注释说明 **手牌数量变化** 和 **是否触发强制打牌** - 示例: ```lisp (action chi (transfer_path from: discard_pile to: meld:) ; 吃:取1张入 meld 区,手牌净减少2张(因3张顺子移出),必须打出1张以恢复13张 (requires_discard true) ) ``` 6. 胡牌规则(win_rules) - 禁止:(win_rules (allow_discard_win true)) ← 只有1个参数 - 参照:示例文件第85-95行,胡牌规则有完整定义 - 要求:必须完整定义允许的胡牌类型、胡牌后规则等 #### 生成策略: 1. 先在心中构建完整的游戏逻辑 2. 参考通用语法规范确定语法正确性 3. 参考示例文件确保每个模块的详细程度 4. 逐模块编写,每个模块的细节要合理、充分、符合逻辑 5. 严禁为了"节省篇幅"而省略任何模块的详细定义 [在此处插入完整的mGDL描述,且加入中文注释增强可读性] #### ⚠️ mGDL 完整性强制要求: mGDL 必须包含以下所有核心模块(对应硬自检第0项): 1. (game_variant "...") - 玩法大类 2. (players N) - 玩家数量 3. (tileset ...) - 牌组定义 4. (special_mechanics ...) - 特殊机制 5. (seats {...}) - 座位定义 6. (turn_order ...) - 出牌顺序 7. (setup ...) - 游戏准备 8. (actions ...) - 行为规则 9. (win_rules ...) - 胡牌规则 10. (scoring ...) - 计分体系 11. (fan_table ...) - 番型与倍数 12. (settlement ...) - 结算规则 13. (invariants ...) - 守恒不变量 14. (special_mechanics ...) - 特殊机制注册 严禁省略任何核心模块! 即使 mGDL 很长,也必须完整输出。 在 (setup) 或 (tileset) 附近添加牌数验证的中文注释,便于人工核对。 ### 自然语言规则说明 [请严格按照以下结构撰写(所有内容默认展开,禁止使用折叠):] 1. 新机制声明(⚠️ 核心创新展示区,必须完整) - 格式要求:必须使用以下表格格式,逐个列出本游戏的所有特殊机制: 机制名称 | 核心功能 | 使用阶段 | 触发条件 | 实际定义位置 | mGDL注册路径 例:幺鸡赖子 | 1条可替代任意牌 | 全局 | 胡牌时 | special_mechanics.yaoji | special_mechanics.YaojiWild 例:定缺换牌 | 选择缺一门花色后换3张牌 | 准备阶段 | 定缺后 | setup.exchange_three | special_mechanics.ExchangeThree - 强制要求: a. 完整性:表格必须包含本游戏的所有创新机制,不得遗漏 b. 实际定义位置:标注机制在mGDL中的实际定义位置 c. mGDL注册路径:标注机制在 special_mechanics 中的注册路径 d. 详细展开:表格下方必须对每个机制进行详细说明: - 机制的战略价值和游戏体验影响 - 具体的使用方法和限制条件 - 与其他机制或规则的交互关系 - 使用示例(至少1个具体场景) e. 禁止模糊表述:严禁使用"某些"、"部分"、"可能"等模糊词汇 f. 后续引用标记:每个机制说明的末尾必须标注"→ 详见【第3节-游戏流程-[阶段名]】" g. **机制具象化(Concreteness Check)**: - ❌ 模糊:获得“某种资源”、“特殊能力”。 - ✅ 具象:获得“1枚金币(Score+10)”、“摸牌阶段多摸1张”。 - 严禁使用未定义的抽象概念,所有机制必须落地为:牌的转移、分数的增减、或阶段的改变。 2. 基础规则描述 a. 牌组构成: - 基础花色:[列出万/筒/条数量] - 字牌类型与数量:[列出中/发/白/风牌等] - 特殊牌:[列出幺鸡/红中/月亮牌等数量] - 总牌数验证:[计算验证] b. 玩家与座位: - 玩家人数:固定4人 - 座位顺序:[说明] - 庄家确定方式:[说明] c. 发牌后库存显式声明(强制): - 庄家:[N] 张 - 闲家1:[M] 张 - 闲家2:[M] 张 - 闲家3:[M] 张 - 牌墙剩余:[W] 张 - 翻牌区(如有):[F] 张 - 总计验证:N + 3×M + W + F = [TotalTiles](✅ 符合) d. 牌的大小与关系: - 花色大小:[如有] - 点数大小:1<2<...<9 - 特殊关系:[如连续关系/同点关系等] 3. 游戏流程描述 a. 流程总述:需描述游戏的全部流程阶段,必须包含明确的庄家确定规则和牌局结束条件 b. 分阶段描述:对每个阶段玩家的操作进行详细描述: - 准备阶段(定缺、换三张等) - 行牌阶段(摸打顺序、吃碰杠胡规则) - 结算阶段(胡牌类型、分数计算、连庄规则) 4. 游戏得分体系 a. 计分模式:明确说明采用倍数制/番数制/混合制 b. 基础分数:基础分值、自摸/点炮倍率、起胡和封顶 c. 番型计分:详细列出番型与对应分值 5. 术语与新物品词典 [按以下格式列出所有特殊术语] 名称:[术语名] 作用:[功能说明] 时机:[使用阶段] 触发:[触发条件] 代价:[代价说明] 优先级:[优先级说明] 限制:[限制条件] 示例:[使用案例] 失败处理:[失败情况处理] 转移路径:[from: X to: Y] 可见性变更:[to: {audience} on_target: true/false] ## 技术附录:《自检报告》
点击展开,完整的《自检报告》(开发者/审核专用) ## 麻将mGDL自检报告 v1.2 ### 0) **mGDL 模块完整性检查**(零容忍项) **核心模块检查清单(必须全部为 PASS):** - game_variant 定义 → [PASS/FAIL] - players 定义 → [PASS/FAIL] - tileset 定义(含 suits/ranks/honors/total) → [PASS/FAIL] - special_mechanics 定义 → [PASS/FAIL] - seats 定义 → [PASS/FAIL] - turn_order 定义 → [PASS/FAIL] - setup 定义(含 initial_hand/choose_que/exchange_three) → [PASS/FAIL] - actions 定义(含 allow_chi/allow_peng/allow_gang) → [PASS/FAIL] - win_rules 定义(含 allow_discard_win/allow_self_draw_win/post_win_continuation) → [PASS/FAIL] - scoring 定义 → [PASS/FAIL] - fan_table 定义(至少5种番型) → [PASS/FAIL] - settlement 定义 → [PASS/FAIL] - invariants 定义(含牌数守恒公式) → [PASS/FAIL] **判定标准**: - 任一模块为 FAIL → **整体 FAIL & 必须立即补全缺失模块** - 全部模块为 PASS → 整体 PASS,继续后续检查 **最终结论**:[PASS/FAIL] **若 FAIL,缺失的模块列表**:[列出所有缺失模块名称] ### 1) **麻将牌数自检表**(机读) **基础参数**: - suits = { "wan" "tong" "tiao" } - honor_types = [count of enabled honors] - special_tiles = [(name_i, count_i)] - players = 4 - dealer_hand = ? - non_dealer_hand = ? - flip_zone_init = ? **计算验证**: - TotalTiles = 4 × 9 × |suits| + 4 × honor_types + Σ special_tiles.count = ? - Need_initial = dealer_hand + 3 × non_dealer_hand + flip_zone_init = ? - Wall_initial = TotalTiles - Need_initial = ? **约束检查**: - Wall_initial ≥ 0 → [PASS/FAIL] - Max_extra_draw = ? (杠/补牌等机制上界) - 约束:Wall_initial ≥ Max_extra_draw → [PASS/FAIL] **守恒不变量**: - Hands_t + Melds_t + Kong_t + Discard_t + Wall_t = TotalTiles → [PASS/FAIL] - 所有区域计数 ≥ 0 → [PASS/FAIL] ### 2) **牌墙管理检查** **摸牌路径合法性**: - 所有摸牌动作有明确牌墙来源 → [PASS/FAIL] - 牌墙张数不为负 → [PASS/FAIL] **杠补牌一致性**: - 所有杠动作有明确补牌路径 → [PASS/FAIL] - 牌墙足够支持最大杠数 → [PASS/FAIL] **牌局结束条件**: - 牌墙耗尽时牌局结束条件明确定义 → [PASS/FAIL] ### 3) **胡牌规则一致性检查** **玩法大类匹配**: - game_variant 与 post_win_continuation 逻辑一致: - 血战类:winner_exit=true, end_when_third_player_wins=true → [PASS/FAIL] - 血流类:winner_exit=false, keep_turn_order=true → [PASS/FAIL] **胡牌条件完整性**: - 胡牌要求与番型体系一致 → [PASS/FAIL] - 胡牌后规则完整定义 → [PASS/FAIL] ### 4) **番型可达性自检** **同一点数牌张数检查**: - 番型需求 ≤ 物理上限(4×牌副数+赖子) → [PASS/FAIL] - 具体不可达番型:[列出] **组合番型冲突检查**: - 无逻辑冲突的番型组合 → [PASS/FAIL] - 冲突组合:[列出] **大牌型验证**: - 十八罗汉/大威天龙等大牌型理论达成概率>0 → [PASS/FAIL] - 万中无一等极端大牌验证 → [PASS/FAIL] ### 5) **特殊机制完整性检查** **赖子规则完整性**: - 赖子确定方式(固定/翻牌)明确定义 → [PASS/FAIL] - 赖子功能范围(可替代哪些牌)明确定义 → [PASS/FAIL] - 赖子限制(是否可吃碰杠/打出)明确定义 → [PASS/FAIL] - 赖子在胡牌时的特殊规则明确定义 → [PASS/FAIL] **幺鸡/红中机制一致性**: - 牌面标识与功能描述一致 → [PASS/FAIL] - 计分规则与机制描述一致 → [PASS/FAIL] ### 6) **麻将阶段完整性检查** **定缺阶段**: - 定缺启用时,缺门验证规则明确定义 → [PASS/FAIL] - 定缺时机明确 → [PASS/FAIL] **换三张阶段**: - 换牌方向/规则明确定义 → [PASS/FAIL] - 换牌限制明确定义 → [PASS/FAIL] **行牌阶段**: - 出牌顺序无歧义 → [PASS/FAIL] - 吃碰杠规则无冲突 → [PASS/FAIL] ### 7) **机制完整性与双向映射检查**(⚠️ 核心防遗漏机制) **步骤A:提取自然语言中声明的所有机制** - 机制列表:[M1, M2, M3, ...] - 总计:N个机制 **步骤B:验证每个机制在mGDL中的实体化** | 机制名称 | mGDL实体位置 | 是否存在 | transfer_path | |---------|------------|---------|--------------| | M1 | [路径] | [是/否] | [有/无/none] | | M2 | [路径] | [是/否] | [有/无/none] | **步骤C:反向验证mGDL中定义的特殊机制是否在自然语言中说明** | mGDL机制名 | 在自然语言表格中 | 在流程描述中 | |----------|----------------|-------------| | [name1] | [是/否] | [是/否] | | [name2] | [是/否] | [是/否] | **判定标准**: - 若步骤B中任一机制"是否存在"为"否" → **FAIL**(自然语言声明了但mGDL未实现) - 若步骤B中任一机制缺少 `transfer_path` → **FAIL** - 若步骤C中任一mGDL机制未在自然语言中说明 → **FAIL**(mGDL实现了但未告知玩家) - 若自然语言声明的机制数量 ≠ mGDL实际实现的机制数量 → **FAIL** **最终结论**:[PASS/FAIL] ### 8) **特殊机制统一注册检查**(⚠️ 核心防遗漏机制) **步骤A:扫描mGDL所有模块,提取所有特殊定义** - special_mechanics 中的所有条目 - win_rules 中的特殊胡牌规则 - scoring 中的特殊计分规则 - fan_table 中的特殊番型 **检测到的特殊机制列表**: | 机制名称 | 定义位置 | 类别 | |---------|---------|------| | [M1] | [path1] | [category1] | | [M2] | [path2] | [category2] | **总计**:N个 **步骤B:验证 special_mechanics 注册完整性** **special_mechanics 中已注册的机制**: | 机制名称 | implementation_path | category | enabled | |---------|-------------------|----------|---------| | [M1] | [path1] | [cat1] | true | | [M2] | [path2] | [cat2] | true | **总计**:M个 **步骤C:对比检查** - mGDL中实际特殊机制数量:N - special_mechanics 注册数量:M - 是否一致:N == M → [PASS/FAIL] **未在 special_mechanics 注册的机制**: - [列出所有遗漏项及其定义位置] **最终结论**:[PASS/FAIL] ### 9) **庄家规则验证** **庄家确定方式**: - 方式明确定义(随机/骰子/固定) → [PASS/FAIL] - 连庄规则明确定义 → [PASS/FAIL] **庄家权益量化**: - 庄家起手牌数=14 → [PASS/FAIL] - 庄家倍率优势=1.1-1.15 → [PASS/FAIL] ### 10) **血战/血流一致性检查** **规则匹配**: - game_variant 与 post_win_continuation 逻辑一致 → [PASS/FAIL] - 血战类:winner_exit=true, end_when_third_player_wins=true - 血流类:winner_exit=false, keep_turn_order=true, after_gun_next_draw="shooter_next" **流程描述匹配**: - 自然语言规则与mGDL定义一致 → [PASS/FAIL] ### 11) **番型叠加规则检查** **叠加模式**: - stacking 模式明确定义(multiply/add) → [PASS/FAIL] - 番型互斥规则明确定义 → [PASS/FAIL] **封顶规则**: - 番型上限明确定义 → [PASS/FAIL] - 封顶规则与计分模式兼容 → [PASS/FAIL] ### 12) **修复轨迹** **自检发现问题**: 1. [问题1描述] - 检测位置:[具体模块/行号] - 修正方案:[具体修改内容] - 修正依据:[最小修改优先级规则] 2. [问题2描述] - 检测位置:[具体模块/行号] - 修正方案:[具体修改内容] - 修正依据:[最小修改优先级规则] **修正验证**: - 修正后重新自检通过 → [PASS/FAIL] - 修正是否影响其他模块 → [是/否] - 需要额外验证的关联规则:[列出] ### 13) **麻将专用边界条件测试** **极端情况验证**: - 牌墙只剩1张时摸牌 → [PASS/FAIL] - 最后一张牌杠上开花 → [PASS/FAIL] - 三家同时胡牌 → [PASS/FAIL] - 四暗刻单吊胡牌 → [PASS/FAIL] **特殊机制边界**: - 赖子使用上限验证 → [PASS/FAIL] - 连庄次数上限验证 → [PASS/FAIL] ### 14) **玩法融合自检**(融合任务必检) **融合模式检查**: - 计分模式统一性:全倍数制 或 全番数制(无混合) → [PASS/FAIL] - 冲突规则排查:无互斥的胡牌/行牌规则 → [PASS/FAIL] - 牌组兼容性:Tileset 包含所有机制所需的牌(如花牌/月亮牌) → [PASS/FAIL] **融合插件注册**: - 来源玩法机制完整注册进 special_mechanics → [PASS/FAIL] - 插件机制与底座玩法无逻辑冲突 → [PASS/FAIL] ### 15) **最终验收** **核心验收项**: - 模块完整性:[PASS/FAIL] - 牌数守恒:[PASS/FAIL] - 机制完整性:[PASS/FAIL] - 番型可达性:[PASS/FAIL] - 无模糊表述:[PASS/FAIL] - 自检报告完整:[PASS/FAIL] - 融合自检通过(仅融合任务):[PASS/FAIL/NA] **最终结论**:[PASS/FAIL] **若FAIL,需重新设计的部分**: 1. [模块名称] - [原因] 2. [模块名称] - [原因] **审核人**:[AI系统自审] **审核时间**:[YYYY-MM-DD HH:MM:SS] **审核版本**:mGDL v1.3
## 平衡性分析 [在此处撰写平衡性分析,包括: 庄家优势控制在10%-15%的设计依据 各种胡牌方式的价值分布合理性 大牌型与普通牌型的比例控制 赖子/特殊牌对随机性的控制 与现有麻将玩法相比的平衡性特点] ## 常见错误避免 ### ⚠️ 零容忍错误(最高优先级) 1. ❌ mGDL 模块不完整是最严重的错误: - 严禁输出缺少核心模块的 mGDL(如缺少 special_mechanics、fan_table、win_rules 等) - mGDL 必须包含硬自检第0项列出的所有核心模块,缺一不可 - 在第二步自检时,第0项"模块完整性检查"的所有子项必须全部 PASS 2. 牌墙管理错误: - 严禁未定义牌墙就进行摸牌操作 - 严禁牌墙张数变为负数 - 严禁杠后未定义补牌路径 3. 番型可达性问题: - 严禁定义理论不可达的番型(如要求18张相同字牌) - 严禁番型组合存在逻辑冲突 - 严禁大牌型出现概率为0 4. 胡牌规则不完整: - 严禁只写"类似血战"而不展开具体参数 - 严禁未定义胡牌后规则 - 严禁胡牌要求与番型体系不一致 5. 特殊机制未注册: - 严禁在 special_mechanics 中漏注册任何创新机制 - 严禁自然语言声明了但 mGDL 未实现的机制 - 严禁 mGDL 实现了但自然语言未说明的机制 6. 新增麻将专用检查项 - 血战/血流一致性:玩法大类必须与 post_win_continuation 逻辑一致 - 赖子规则完整性:若启用赖子,必须完整定义其功能范围、限制、特殊规则 - 庄家规则验证:庄家权益必须量化,庄家流转规则必须明确 - 牌墙补充机制:若 Wall_initial > 0,必须定义从牌墙摸牌的机制 - 大牌型验证:十八罗汉、大威天龙等大牌型必须通过理论可达成性验证 - 番型叠加规则:必须明确定义番型是否叠加及叠加方式 - 定缺规则一致性:若启用定缺,必须定义缺门验证与时机 - 翻牌机制完整性:若启用翻牌,必须定义翻牌区、翻牌时机、翻牌规则 7. 工程验收标准 - 模块完整性:所有14个核心模块必须完整存在 - 物理一致性:所有牌变动必须有明确转移路径 - 牌数守恒:初始牌数分布 + 各区域变动 = 总牌数 - 机制完整性:自然语言声明的机制数 = mGDL实现的机制数 - 番型可达性:所有定义的番型在理论上有非零达成概率 - 平衡性合理:庄家优势在10%-15%,大牌型价值与概率成反比 - 无模糊表述:禁止使用"某些"、"部分"、"可能"等模糊词汇 - 自检报告完整:包含所有16项自检结果及修复轨迹 - 最终验收:只有当所有自检项均为 PASS,且《自检报告》中有完整修复轨迹时,才视为合格输出。任何 FAIL 项未修复的输出都将被拒绝。 8. **手牌数量违反守恒**: - 严禁在行牌阶段结束时(即未处于胡牌瞬间)出现手牌 ≠ 13 张的情况(庄家出牌后同理)。 - 严禁 `action` 定义中缺少 `requires_discard` 或未说明手牌变化。 - 严禁自然语言描述中省略“吃/碰/杠后需打牌”这一关键步骤。 9. **玩法融合失败**(融合任务专用): - 严禁混用计分模式(如在倍数制中使用 `fan` 字段)。 - 严禁引入新机制(如买马)但未在 `special_mechanics` 和 `win_rules/scoring` 中完整定义。 - 严禁保留互相冲突的规则(如“血战”与“流局”规则并存)。