关卡
我们需要一种人类可读的、可编辑的方法来指定关卡。因为一切最开始都可以在网格,所以我们可以使用大型字符串,其中每个字符代表一个元素,要么是背景网格的一部分,要么是可移动元素。
小型关卡的平面图可能是这样的:
var simpleLevelPlan = `
......................
..#................#..
..#..............=.#..
..#.........o.o....#..
..#.@......#####...#..
..#####............#..
......#++++++++++++#..
......##############..
......................`;
句号是空的位置,井号(#
)字符是墙,加号是岩浆。玩家的起始位置是 AT 符号(@
)。每个O
字符都是一枚硬币,等号(=
)是一块来回水平移动的岩浆块。
我们支持两种额外的可移动岩浆:管道符号(|
)表示垂直移动的岩浆块,而v
表示下落的岩浆块 —— 这种岩浆块也是垂直移动,但不会来回弹跳,只会向下移动,直到遇到地面才会直接回到其起始位置。
整个游戏包含了许多关卡,玩家必须完成所有关卡。每关的过关条件是玩家需要收集所有硬币。如果玩家碰到岩浆,当前关卡会恢复初始状态,而玩家可以再次尝试过关。