示例 二:斗地主炸弹¶
本示例在极简对局的基础上,演示牌型属性与同型比较的写法。具体的牌型选为斗地主里的炸弹:四张相同点数的牌组成一个炸弹,两个炸弹相比,点数大的胜。
主流程几乎不变,仅在牌型这部分新增一个炸弹。
炸弹牌型¶
属性¶
bomb_point(整数),记录这个炸弹由哪个点数构成。
build_flow¶
需要识别「数量为 4 且点数全部相同」。
「数量为 4」直接用集合大小组件比较即可。
「点数全部相同」有两种写法,推荐第二种,因为更直观,也方便后续调试。
平台有意不支持任意循环,因此当遍历的元素数量是变化的(例如顺子长度不固定),要么使用集合逻辑组件,要么针对常见长度分别写判定分支。
compare_flow¶
炸弹之间比大小:
注意比较返回组件的 result=0 表示 A 胜,result=1 表示 B 胜。这与直觉相反,容易写反。
主流程的微调¶
主流程沿用示例 一,只需把发牌组件的 count 改大,例如改为 5,让玩家手中更可能凑出四张相同点数的牌。
上手建议¶
可以在规则构建器中先复制示例 一的规则,改名为「斗地主炸弹示例」,然后删掉单张牌型,新建炸弹牌型,按上述步骤拖出 build_flow 与 compare_flow。进入对局,手动凑两个不同点数的炸弹,验证比较行为是否符合预期。
这与真实的斗地主还差多少¶
本示例只演示了一个特殊牌型。完整的斗地主还需要以下内容。
- 多种牌型:单张、对子、三张、三带一、连对、顺子、飞机、炸弹、王炸
- 跨牌型压制(下一示例):炸弹压过普通牌型,王炸压过包括炸弹在内的全部牌型
- 抢地主流程:使用动作选择组件让每个玩家叫分,挑选分高者作为地主
- 底牌发放:发牌阶段为地主额外发三张
每一项都是同一套组件的不同拼法。
下一章引入跨牌型压制:示例 三:跨牌型压制。