基础规则 101

本节将教你如何使用 PuzzleScript 的独特规则机制,从推箱子游戏开始,探索更多可能的机制。
一个推箱子的简单示例
对于推箱子来说,它只有一条简单的规则:
  1. 1.
    当玩家正走向一个箱子时,尝试去推动它
通常来说的实现方法是:用一个二维数组记录下当前状态下的箱子和人物位置,检测人物的移动。当人物即将和箱子碰撞时,查看箱子的后一个位置,如果已经有箱子或墙壁,则人物停止移动;否则就将箱子移动到其后一个位置,人物同理。
但在 PuzzleScript 的规则引擎中,有一种更简洁的方式来表达上面这条规则:
[ > Player | Crate ] -> [ > Player | > Crate ]
规则引擎采用了一种类似 模式匹配 的机制,当发现有符合左侧方括号(Left hand side)的内容时,就替换成右侧方括号(Right hand side)的内容。
这里的 > 表示向右的方向,另外的3个方向也可以用 <, ^, v 来表示。
比如说,当把上述的方向箭头都替换成 < (向左),就会得到如下的规则:
[ < Player | Crate ] -> [ < Player | < Crate ]
这样的话,当你远离箱子,它就会跟着你移动,形成了一种独特的 “拉箱子” 规则。
一个“拉箱子”的规则示例
PuzzleScript 的规则引擎作用原理:
  1. 1.
    用 Player 来标记玩家想要控制移动的人物
  2. 2.
    规则结算:在满足条件下,会尽可能地应用每条规则
  3. 3.
    移动结算
  4. 4.
    移动后规则结算:最后会有个额外可选的阶段,应用一些特殊的规则
如果想要在移动之后,应用一些规则,比如说要将三个连续的箱子消除,就可以增加这样的一条后处理规则:
late [ Crate | Crate | Crate ] -> [ | | ]
如果没有 late 关键字,箱子的消除时机,就会在下一个回合的开始阶段。
除了设定相邻的规则,还可以实现射线类的规则,比如说在这个规则中,当眼球怪看到玩家时,就会追赶玩家:
[ Eyeball | ... | Player ] -> [ > Eyeball | ... | Player ]
一个眼球怪追逐玩家的规则示例
上面的内容涵盖了 PuzzleScript 的基础知识,点击下面的链接,做些修改来创造你自己的游戏吧。如果你想了解更多的话,可以参考基础规则 102,但更建议是在遇到困惑时再来学习其他内容。
PuzzleScript
开始编辑你的游戏
毕竟了解 PuzzleScript 的所有细节并没有什么奖励——它只是一个制作游戏的工具,只有使用它,才能发挥它最大的潜力。