关卡

我们需要一种人类可读的、可编辑的方法来指定关卡。因为一切最开始都可以在网格,所以我们可以使用大型字符串,其中每个字符代表一个元素,要么是背景网格的一部分,要么是可移动元素。

小型关卡的平面图可能是这样的:

  1. var simpleLevelPlan = `
  2. ......................
  3. ..#................#..
  4. ..#..............=.#..
  5. ..#.........o.o....#..
  6. ..#.@......#####...#..
  7. ..#####............#..
  8. ......#++++++++++++#..
  9. ......##############..
  10. ......................`;

句号是空的位置,井号(#)字符是墙,加号是岩浆。玩家的起始位置是 AT 符号(@)。每个O字符都是一枚硬币,等号(=)是一块来回水平移动的岩浆块。

我们支持两种额外的可移动岩浆:管道符号(|)表示垂直移动的岩浆块,而v表示下落的岩浆块 —— 这种岩浆块也是垂直移动,但不会来回弹跳,只会向下移动,直到遇到地面才会直接回到其起始位置。

整个游戏包含了许多关卡,玩家必须完成所有关卡。每关的过关条件是玩家需要收集所有硬币。如果玩家碰到岩浆,当前关卡会恢复初始状态,而玩家可以再次尝试过关。