基础规则 101

本节将教你如何使用 PuzzleScript 的独特规则机制,从推箱子游戏开始,探索更多可能的机制。

对于推箱子来说,它只有一条简单的规则:

  1. 当玩家正走向一个箱子时,尝试去推动它

通常来说的实现方法是:用一个二维数组记录下当前状态下的箱子和人物位置,检测人物的移动。当人物即将和箱子碰撞时,查看箱子的后一个位置,如果已经有箱子或墙壁,则人物停止移动;否则就将箱子移动到其后一个位置,人物同理。

但在 PuzzleScript 的规则引擎中,有一种更简洁的方式来表达上面这条规则:

[ > Player | Crate ] -> [ > Player | > Crate ]

规则引擎采用了一种类似 模式匹配 的机制,当发现有符合左侧方括号(Left hand side)的内容时,就替换成右侧方括号(Right hand side)的内容。

这里的 > 表示向右的方向,另外的3个方向也可以用 <, ^, v 来表示。

比如说,当把上述的方向箭头都替换成 < (向左),就会得到如下的规则:

[ < Player | Crate ] -> [ < Player | < Crate ]

这样的话,当你远离箱子,它就会跟着你移动,形成了一种独特的 “拉箱子” 规则。

PuzzleScript 的规则引擎作用原理:

  1. 用 Player 来标记玩家想要控制移动的人物

  2. 规则结算:在满足条件下,会尽可能地应用每条规则

  3. 移动结算

  4. 移动后规则结算:最后会有个额外可选的阶段,应用一些特殊的规则

如果想要在移动之后,应用一些规则,比如说要将三个连续的箱子消除,就可以增加这样的一条后处理规则:

late [ Crate | Crate | Crate ] -> [ | | ]

如果没有 late 关键字,箱子的消除时机,就会在下一个回合的开始阶段。

除了设定相邻的规则,还可以实现射线类的规则,比如说在这个规则中,当眼球怪看到玩家时,就会追赶玩家:

[ Eyeball | ... | Player ] -> [ > Eyeball | ... | Player ]

上面的内容涵盖了 PuzzleScript 的基础知识,点击下面的链接,做些修改来创造你自己的游戏吧。如果你想了解更多的话,可以参考基础规则 102,但更建议是在遇到困惑时再来学习其他内容。

毕竟了解 PuzzleScript 的所有细节并没有什么奖励——它只是一个制作游戏的工具,只有使用它,才能发挥它最大的潜力。

最后更新于