跳转至

示例 三:跨牌型压制

承接示例 二,假设规则中已存在「单张」与「炸弹」两个牌型。本章说明如何让炸弹压过单张。

配置方式

在炸弹牌型的「可压过」列表里勾选「单张」。该项配置即完成。

平台的判定逻辑

理解后端如何在出牌时作压制判定,有助于设计更复杂的规则。

平台收到玩家出的一组牌后,依次执行所有牌型的 build_flow,以第一个返回「匹配」的牌型作为当次出牌的牌型。随后将本次牌型与上一手成功出牌的牌型相比较。

如果两者是同一牌型,直接执行该牌型的 compare_flow

如果不同,平台检查本次牌型的「可压过」列表是否包含上一手的牌型;包含则视为压过,否则出牌无效,玩家需要重新选择。

因此压制关系是从进攻方视角声明的:「我能压谁」,而不是「我会被谁压」。配置时务必从进攻方处勾选,容易反向配置导致行为相反。

常见配置示例

场景 配置
炸弹压过所有普通牌型 在炸弹的「可压过」中勾选单张、对子、三张、三带一、顺子、连对、飞机
王炸压过所有 在王炸的「可压过」中勾选所有其它牌型(包括炸弹)
顺子不与其它牌型互比,只能同型比较 顺子的「可压过」留空。玩家只能在轮到自己的第一手(即「上一手由自己出」)或同顺子时出
UNO 的 +2 可叠加上一手 +2 「+2」牌型的「可压过」勾选自己同名牌型,等价于同型比较中允许压过

注意:这是有向图,不是层级

「可压过」关系构成一个有向无环图,而非线性层级。理论上可以设计循环平衡型规则,例如 A 压 B,B 压 C,C 压 A(类似石头剪刀布)。

平台允许此类配置,但不建议在常规规则中使用,玩家难以记忆,游戏体验通常不佳。规则的可玩性优先于「理论上能实现」。

同牌型必须能比较

跨牌型关系可以缺省,但同牌型必须配置 compare_flow

若缺省,平台无法判定两张同型谁优先,会拒绝出牌。最简单的兜底方式是按编号或时间戳定义一个全序关系,保证比较函数总能返回结果。

读到这里你应该会做什么

读完三个示例后,以下类型的规则都可以基于现有组件拼出。

  • 比大小型:扑克、24 点等
  • 特殊牌型 + 压制关系型:斗地主、UNO、跑得快等
  • 带动作选择的:抢地主、跳过出牌、使用技能等

后续建议:

  • 阅读组件总览,逐一了解每个组件的用法
  • 阅读常见错误,提前规避新手常踩的问题
  • 自行设计一套小规则,与朋友联机验证