示例 三:跨牌型压制¶
承接示例 二,假设规则中已存在「单张」与「炸弹」两个牌型。本章说明如何让炸弹压过单张。
配置方式¶
在炸弹牌型的「可压过」列表里勾选「单张」。该项配置即完成。
平台的判定逻辑¶
理解后端如何在出牌时作压制判定,有助于设计更复杂的规则。
平台收到玩家出的一组牌后,依次执行所有牌型的 build_flow,以第一个返回「匹配」的牌型作为当次出牌的牌型。随后将本次牌型与上一手成功出牌的牌型相比较。
如果两者是同一牌型,直接执行该牌型的 compare_flow。
如果不同,平台检查本次牌型的「可压过」列表是否包含上一手的牌型;包含则视为压过,否则出牌无效,玩家需要重新选择。
因此压制关系是从进攻方视角声明的:「我能压谁」,而不是「我会被谁压」。配置时务必从进攻方处勾选,容易反向配置导致行为相反。
常见配置示例¶
| 场景 | 配置 |
|---|---|
| 炸弹压过所有普通牌型 | 在炸弹的「可压过」中勾选单张、对子、三张、三带一、顺子、连对、飞机 |
| 王炸压过所有 | 在王炸的「可压过」中勾选所有其它牌型(包括炸弹) |
| 顺子不与其它牌型互比,只能同型比较 | 顺子的「可压过」留空。玩家只能在轮到自己的第一手(即「上一手由自己出」)或同顺子时出 |
| UNO 的 +2 可叠加上一手 +2 | 「+2」牌型的「可压过」勾选自己同名牌型,等价于同型比较中允许压过 |
注意:这是有向图,不是层级¶
「可压过」关系构成一个有向无环图,而非线性层级。理论上可以设计循环平衡型规则,例如 A 压 B,B 压 C,C 压 A(类似石头剪刀布)。
平台允许此类配置,但不建议在常规规则中使用,玩家难以记忆,游戏体验通常不佳。规则的可玩性优先于「理论上能实现」。
同牌型必须能比较¶
跨牌型关系可以缺省,但同牌型必须配置 compare_flow。
若缺省,平台无法判定两张同型谁优先,会拒绝出牌。最简单的兜底方式是按编号或时间戳定义一个全序关系,保证比较函数总能返回结果。
读到这里你应该会做什么¶
读完三个示例后,以下类型的规则都可以基于现有组件拼出。
- 比大小型:扑克、24 点等
- 特殊牌型 + 压制关系型:斗地主、UNO、跑得快等
- 带动作选择的:抢地主、跳过出牌、使用技能等
后续建议: