Spaces:
Sleeping
Sleeping
Delete 麻将游戏mGDL通用语法_v1.2.txt
Browse files- 麻将游戏mGDL通用语法_v1.2.txt +0 -281
麻将游戏mGDL通用语法_v1.2.txt
DELETED
|
@@ -1,281 +0,0 @@
|
|
| 1 |
-
(game "<Variant_Name>" (version "1.2.0")
|
| 2 |
-
;; =========================
|
| 3 |
-
;; 1. 元信息 & 大类标签
|
| 4 |
-
;; =========================
|
| 5 |
-
|
| 6 |
-
;; 玩法大类:血战 / 血流 / 普通一局一胡制 / 多回合小玩法 / 自定义
|
| 7 |
-
(game_variant "blood_war" | "blood_flow" | "round" | "multi_round" | "<custom_variant>")
|
| 8 |
-
|
| 9 |
-
;; 规则轮廓,用于 LLM / 引擎快速判断模块
|
| 10 |
-
(rule_profile
|
| 11 |
-
(blood_mode "none" | "xuezhan" | "xueliu") ; 是否血战/血流流局方式
|
| 12 |
-
(scoring_mode "multiplier" | "fan_exponent" | "horse_only" | "hybrid")
|
| 13 |
-
(has_horse true|false) ; 是否有翻马/买马机制
|
| 14 |
-
(has_contract true|false) ; 是否有承包/包牌
|
| 15 |
-
(has_wildcard true|false) ; 是否有赖子/鬼牌/皮子等
|
| 16 |
-
(has_multi_round true|false)) ; 是否包含多小局(如妙手七星)
|
| 17 |
-
|
| 18 |
-
;; =========================
|
| 19 |
-
;; 2. Rule-Core:玩法本体
|
| 20 |
-
;; =========================
|
| 21 |
-
|
| 22 |
-
(players 4)
|
| 23 |
-
|
| 24 |
-
;; ---- 牌组定义 ----
|
| 25 |
-
(tileset
|
| 26 |
-
(suits { "wan" "tong" "tiao" }) ; 基本花色
|
| 27 |
-
(ranks 1..9)
|
| 28 |
-
(copies 4) ; 序数牌默认每张 4 张
|
| 29 |
-
|
| 30 |
-
;; 字牌:0 表示不用,1 表示启用一整套(东南西北中发白)
|
| 31 |
-
;; honor_copies:可选,覆盖默认的“每种 4 张”
|
| 32 |
-
(honors 0|1)
|
| 33 |
-
(honor_copies 4) ; 可选:如广东鸡平胡=4,海底捞月=8
|
| 34 |
-
|
| 35 |
-
;; 花牌:如经典推倒胡的春夏秋冬梅兰竹菊
|
| 36 |
-
(flowers 0|8)
|
| 37 |
-
|
| 38 |
-
;; 红中张数 / 总牌张数:可按房间配置
|
| 39 |
-
(hongzhong 0) ; 简单玩法:固定红中张数
|
| 40 |
-
(hongzhong_by_room { ("room_id" N) ... })
|
| 41 |
-
(total 108)
|
| 42 |
-
(total_by_room { ("room_id" N) ... })
|
| 43 |
-
|
| 44 |
-
;; 额外特殊牌:如“月亮牌”等
|
| 45 |
-
(special_tiles
|
| 46 |
-
(moon (count 12)) ; 例如海底捞月
|
| 47 |
-
;; ... 可以继续扩展其他特殊牌
|
| 48 |
-
)
|
| 49 |
-
)
|
| 50 |
-
|
| 51 |
-
;; ---- 特殊机制:幺鸡 / 红中 / 皮子 / 赖子 / 其他鬼牌 ----
|
| 52 |
-
(special_mechanics
|
| 53 |
-
;; 幺鸡类:如幺鸡血战 / 海底捞月
|
| 54 |
-
(yaoji
|
| 55 |
-
(enabled false)
|
| 56 |
-
(tile_id "tiao-1") ; 具体是哪张牌作为幺鸡
|
| 57 |
-
(as_wild true|false) ; 是否当赖子用
|
| 58 |
-
(add_fan_if_present 0)) ; 作为加番时的番数(可选)
|
| 59 |
-
|
| 60 |
-
;; 红中赖子:疯狂血流
|
| 61 |
-
(hongzhong
|
| 62 |
-
(enabled false)
|
| 63 |
-
(as_wild true)
|
| 64 |
-
(can_discard true)
|
| 65 |
-
(count_as_zimo_if_win_on_discard false)) ; 打出红中可否被胡(广东/武汉为 false)
|
| 66 |
-
|
| 67 |
-
;; 皮子 / 赖子:广东鸡平胡 / 武汉麻将
|
| 68 |
-
(pizi
|
| 69 |
-
(enabled false)
|
| 70 |
-
(determine_by_flip true) ; 通过翻牌确定
|
| 71 |
-
(exclude_in_meld true) ; 不能吃碰杠
|
| 72 |
-
(can_discard true)
|
| 73 |
-
(each_discard_count_as_kong true)) ; 皮子杠:每打出1张算1杠
|
| 74 |
-
|
| 75 |
-
(laizi
|
| 76 |
-
(enabled false)
|
| 77 |
-
(determine_by_flip true)
|
| 78 |
-
(as_any_tile_on_win true) ; 胡牌时可当任意牌
|
| 79 |
-
(exclude_in_meld true) ; 不能吃碰杠
|
| 80 |
-
(can_discard true)
|
| 81 |
-
(cannot_be_pizi true)) ; 不能同时当皮子用
|
| 82 |
-
|
| 83 |
-
;; 其它鬼牌类型(海底捞月的月亮牌等)
|
| 84 |
-
(moon
|
| 85 |
-
(enabled false)
|
| 86 |
-
(as_any_tile_on_win true)) ; 举例:可配置为赖子
|
| 87 |
-
)
|
| 88 |
-
|
| 89 |
-
;; ---- 座位与出牌顺序 ----
|
| 90 |
-
(seats { "A1" "A2" "A3" "A4" })
|
| 91 |
-
(turn_order cyclic A1 A2 A3 A4)
|
| 92 |
-
|
| 93 |
-
;; ---- 多回合结构(支持妙手七星 / 多小局玩法) ----
|
| 94 |
-
(round_structure
|
| 95 |
-
(mode "single" | "fixed_rounds" | "until_target_score")
|
| 96 |
-
(round_count 1) ; 如妙手七星为 7
|
| 97 |
-
(carry_over
|
| 98 |
-
(scores true) ; 上局积分是否结转
|
| 99 |
-
(dealer_position true|false) ; 庄是否连庄/轮庄
|
| 100 |
-
(multipliers false)) ; 是否结转倍数状态
|
| 101 |
-
)
|
| 102 |
-
|
| 103 |
-
;; ---- 游戏阶段 ----
|
| 104 |
-
(phases [ "choose_que" "exchange_three" "play" "settle" ])
|
| 105 |
-
;; 非血战类玩法可以只开启 [ "play" "settle" ]
|
| 106 |
-
;; 多回合玩法可在 round_structure 中控制
|
| 107 |
-
|
| 108 |
-
;; ---- 起手 & 翻牌等 ----
|
| 109 |
-
(setup
|
| 110 |
-
(dealer "random" | "dice" | "fixed") ; 庄家确定方式
|
| 111 |
-
(initial_hand 13) ; 起手牌数(庄家可为14)
|
| 112 |
-
|
| 113 |
-
;; 定缺 / 换三张(四川血战血流)
|
| 114 |
-
(choose_que
|
| 115 |
-
(enabled true|false))
|
| 116 |
-
(exchange_three
|
| 117 |
-
(enabled true|false)
|
| 118 |
-
(mode "clockwise" | "counterclockwise" | "across" | "random"))
|
| 119 |
-
|
| 120 |
-
;; 开局翻牌(广东鸡平胡 / 武汉麻将)
|
| 121 |
-
(flip_tile
|
| 122 |
-
(enabled false)
|
| 123 |
-
(for_pizi true|false)
|
| 124 |
-
(for_laizi true|false)
|
| 125 |
-
;; 牌面 +/-1 轮转映射
|
| 126 |
-
(rank_cycle [1 2 3 4 5 6 7 8 9 1])
|
| 127 |
-
(honor_cycle ["dong" "nan" "xi" "bei" "zhong" "fa" "bai" "dong"])
|
| 128 |
-
;; 红中特殊跳转:如“红中只能做皮子不能做赖子”等
|
| 129 |
-
(hongzhong_special
|
| 130 |
-
(hongzhong_only_pizi true)
|
| 131 |
-
(skip_for_laizi_use_fa true)
|
| 132 |
-
(if_flip_bei_use_fa_as_laizi true))
|
| 133 |
-
)
|
| 134 |
-
|
| 135 |
-
;; ---- 行为规则:摸打 / 吃碰杠 / 一炮多响 ----
|
| 136 |
-
(actions
|
| 137 |
-
(allow_chi true|false)
|
| 138 |
-
(allow_peng true|false)
|
| 139 |
-
(allow_gang { "concealed" "melded" "added" }) ; 暗杠 / 直杠 / 补杠
|
| 140 |
-
(one_tile_multi_claim true|false) ; 一张牌可否同时被胡与碰杠(血流= true,鸡平胡= false)
|
| 141 |
-
)
|
| 142 |
-
|
| 143 |
-
;; ---- 胡牌规则 ----
|
| 144 |
-
(win_rules
|
| 145 |
-
;; 基本胡法:可点炮 / 自摸 / 杠上开花 /
|
| 146 |
-
(allow_discard_win true) ; 允许点炮胡
|
| 147 |
-
(allow_self_draw_win true) ; 允许自摸胡
|
| 148 |
-
(allow_rob_kong true) ; 抢杠胡
|
| 149 |
-
(allow_gang_shoot true) ; 杠上炮
|
| 150 |
-
(allow_multi_win true) ; 一炮多响
|
| 151 |
-
;; 胡牌要求与特殊机制
|
| 152 |
-
(pattern_constraints
|
| 153 |
-
(must_open true) ; 必须开口胡
|
| 154 |
-
(min_suit_for_win 8) ; 任意花色达到8张
|
| 155 |
-
)
|
| 156 |
-
(post_win_continuation
|
| 157 |
-
(mode "round")
|
| 158 |
-
(winner_exit true) ; 胡牌玩家视为本局“完成”,但整局直接结束
|
| 159 |
-
(end_round_after_win true) ; 任意玩家胡牌后,结算本局
|
| 160 |
-
(allow_multi_winner true)) ; 一炮多响:多家同时胡
|
| 161 |
-
)
|
| 162 |
-
|
| 163 |
-
;; =========================
|
| 164 |
-
;; 3. Scoring:计分与番型
|
| 165 |
-
;; =========================
|
| 166 |
-
|
| 167 |
-
;; 支持三种计分模式:
|
| 168 |
-
;; 1)multiplier:血战/血流类倍数制(疯狂血战/血流/幺鸡血战/海底捞月/妙手七星)
|
| 169 |
-
;; 2)fan_exponent:番数制指数计分(武汉麻将、部分广东番数玩法)
|
| 170 |
-
;; 3)horse_only:完全依赖翻马(经典推倒胡)
|
| 171 |
-
;; 4)hybrid:如“番数制+倍率封顶+马会加成”,广东鸡平胡这类可用
|
| 172 |
-
|
| 173 |
-
(scoring
|
| 174 |
-
(mode "hybrid")
|
| 175 |
-
(base_point 1)
|
| 176 |
-
(pattern_cap_multiplier 0)
|
| 177 |
-
(explosion_cap_multiplier 0)
|
| 178 |
-
(formula
|
| 179 |
-
;; 总分 = 基础倍数合计 × 鸟倍 × 骰倍 × 基数
|
| 180 |
-
;; 其中自摸/点炮不自带额外倍数(自摸不算倍数)
|
| 181 |
-
(define mult_sum (sum mult)) ; 由 fan_table 产生
|
| 182 |
-
(define bird_mult (from_policy "bird_multiplier" default 1))
|
| 183 |
-
(define dice_mult (from_policy "dice_multiplier" default 1))
|
| 184 |
-
(score = base_point * mult_sum * bird_mult * dice_mult)
|
| 185 |
-
)
|
| 186 |
-
)
|
| 187 |
-
|
| 188 |
-
;; ========= 番型与倍数(stacking=multiply;按“倍数制”叠乘) =========
|
| 189 |
-
(fan_table
|
| 190 |
-
(stacking "multiply")
|
| 191 |
-
|
| 192 |
-
;; —— 起手胡:开局即结算为“小胡事件”,每项×1 ——
|
| 193 |
-
(yaku qishou_sixi (category "init_small") (mult 1)
|
| 194 |
-
(desc "起手四喜:手牌中4张点数一样"))
|
| 195 |
-
(yaku qishou_66shun (category "init_small") (mult 1)
|
| 196 |
-
(desc "起手六六顺:手牌有两个刻子"))
|
| 197 |
-
(yaku qishou_queyise (category "init_small") (mult 1)
|
| 198 |
-
(desc "起手缺一色:万/条/筒任缺一门"))
|
| 199 |
-
(yaku qishou_banbanhu (category "init_small") (mult 1)
|
| 200 |
-
(desc "起手板板胡:无2/5/8"))
|
| 201 |
-
(yaku qishou_danwuzhihua (category "init_small") (mult 1)
|
| 202 |
-
(desc "起手单五一枝花:某花色仅一张且为5"))
|
| 203 |
-
(yaku qishou_jiejiegao (category "init_small") (mult 1)
|
| 204 |
-
(desc "起手节节高:三对同花连续点数"))
|
| 205 |
-
(yaku qishou_santong (category "init_small") (mult 1)
|
| 206 |
-
(desc "起手三同:三花色同点数的对子"))
|
| 207 |
-
(yaku qishou_jintongyunu (category "init_small") (mult 1)
|
| 208 |
-
(desc "起手金童玉女:二筒、二条各一对"))
|
| 209 |
-
(yaku qishou_jiangzhihua (category "init_small") (mult 1)
|
| 210 |
-
(desc "起手将一枝花:仅一张将牌(2/5/8)"))
|
| 211 |
-
|
| 212 |
-
;; —— 中途胡事件:对局中形成亦按小胡事件×1 ——
|
| 213 |
-
(yaku zhongtu_sixi (category "mid_small") (mult 1)
|
| 214 |
-
(desc "中途四喜:对局中4张同点数"))
|
| 215 |
-
(yaku zhongtu_66shun (category "mid_small") (mult 1)
|
| 216 |
-
(desc "中途六六顺:对局中形成两个刻子"))
|
| 217 |
-
|
| 218 |
-
;; —— 小胡本体(需258作将) ——
|
| 219 |
-
(yaku pinghu (category "small") (mult 1)
|
| 220 |
-
(require (pair_258 true))
|
| 221 |
-
(desc "平胡:将258,其余成刻子或顺子"))
|
| 222 |
-
|
| 223 |
-
;; —— 大胡(6倍起) ——
|
| 224 |
-
(yaku pengpenghu (category "big") (mult 6)
|
| 225 |
-
(desc "碰碰胡:四坎+将"))
|
| 226 |
-
(yaku qidui (category "big") (mult 6)
|
| 227 |
-
(require (no_melded_sets true))
|
| 228 |
-
(desc "七对:七个对子,无碰杠"))
|
| 229 |
-
(yaku quanqiuren (category "big") (mult 6)
|
| 230 |
-
(require (all_open true) (win_type "discard"))
|
| 231 |
-
(desc "全求人:手牌全被吃碰明杠,仅单吊点炮"))
|
| 232 |
-
(yaku qingyise (category "big") (mult 6)
|
| 233 |
-
(desc "清一色:全同一花色"))
|
| 234 |
-
(yaku jiangjianghu (category "big") (mult 6)
|
| 235 |
-
(require (all_tiles_in {2 5 8}))
|
| 236 |
-
(desc "将将胡:全由2/5/8组成"))
|
| 237 |
-
(yaku haohua_qidui (category "big") (mult 12)
|
| 238 |
-
(require (qidui_base true) (quadruplet_count_at_least 1))
|
| 239 |
-
(desc "豪华七对:七对中含1个四张"))
|
| 240 |
-
(yaku shuanghao_qidui (category "big") (mult 18)
|
| 241 |
-
(require (qidui_base true) (quadruplet_count_at_least 2))
|
| 242 |
-
(desc "双豪华七对:含2个四张"))
|
| 243 |
-
(yaku sanhao_qidui (category "big") (mult 24)
|
| 244 |
-
(require (qidui_base true) (quadruplet_count_at_least 3))
|
| 245 |
-
(desc "三豪华七对:含3个四张"))
|
| 246 |
-
|
| 247 |
-
;; —— 事件成立即视作大胡(若本体为小胡,仍需258作将) ——
|
| 248 |
-
(yaku di_hu (category "event_big") (mult 6)
|
| 249 |
-
(require (first_draw_of "non_dealer") (win_type "self_draw"))
|
| 250 |
-
(desc "地胡:第一圈内闲家自摸,仅计本项(仍需一门≥8张)"))
|
| 251 |
-
(yaku tian_hu (category "event_big") (mult 6)
|
| 252 |
-
(require (seat "dealer") (start_hand_win true))
|
| 253 |
-
(desc "天胡:庄家起手胡"))
|
| 254 |
-
(yaku gangkai (category "event_big") (mult 6)
|
| 255 |
-
(require (win_type "self_draw") (after_kong true))
|
| 256 |
-
(desc "杠开:杠后自摸胡"))
|
| 257 |
-
(yaku qianggang (category "event_big") (mult 6)
|
| 258 |
-
(require (rob_added_kong true))
|
| 259 |
-
(desc "抢杠胡:补杠被胡"))
|
| 260 |
-
(yaku gangpao (category "event_big") (mult 6)
|
| 261 |
-
(require (after_kong_discard true) (win_type "discard"))
|
| 262 |
-
(desc "杠炮:杠后打出放炮"))
|
| 263 |
-
(yaku haidilao (category "event_big") (mult 6)
|
| 264 |
-
(require (source "sea_draw") (win_type "self_draw"))
|
| 265 |
-
(desc "海底捞:最后一张自摸胡"))
|
| 266 |
-
(yaku haidipao (category "event_big") (mult 6)
|
| 267 |
-
(require (source "sea_draw") (win_type "discard"))
|
| 268 |
-
(desc "海底炮:最后一张放炮"))
|
| 269 |
-
)
|
| 270 |
-
|
| 271 |
-
;; ========= 结算 / Settlement =========
|
| 272 |
-
(settlement
|
| 273 |
-
(score_formula
|
| 274 |
-
(on_self_draw (payer "all_others") (count 3))
|
| 275 |
-
(on_discard (payer "shooter_only") (count 1))
|
| 276 |
-
(multi_win "split_by_pairs_with_shooter") ; 一炮多响分别与放炮者结算
|
| 277 |
-
(apply_horse true) ; 套用扎鸟加倍
|
| 278 |
-
(apply_policy "dice_policy")
|
| 279 |
-
)
|
| 280 |
-
)
|
| 281 |
-
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|