地图教程 ======== > 游戏规则
你很快就会想靠自己去遍历 Leek Wars 的地图。但要做到这一点,先得明白它是怎么运作的。
也许你觉得它有点奇怪,甚至有点复杂。其实,只要理解了它的排布方式,用起来相当简单。
游戏地图采用等距视角。格子其实都是正方形,只是我们从它的一个角、略高一点的位置去看它们。
这个视角会让人以为地图是长方形的。但如果把它“放平”,就会得到:
地图其实是一个倾斜 45° 的正方形,看上去更像一个菱形。
把它放进坐标系里,位于地图中心的格子坐标是 [0;0]。地图的四个角分别在坐标 [0;-17]、[0;17]、[-17;0] 和 [17;0]。
由于地图的形状,可以这么写:
其中 x 和 y 是某个格子的坐标,abs() 是取绝对值的函数。
一个格子坐标的绝对值之和不能超过 17。也就是说,比如坐标为 [0;18]、[9;12]、[-12;10] 等等的格子并不存在。
在 Leek Wars 里,你可以直接拿格子的坐标来做运算。函数 getCellX 和 getCellY 分别返回指定格子的 x 坐标和 y 坐标。函数 getCellFromXY 则反其道而行,返回位于所给坐标处的格子。 注意,如果传给它的坐标在地图之外,函数会返回 null。
也可以由格子的编号反过来算出坐标:
要知道两个格子是否在同一条线上,可以使用函数 isOnSameLine。对角线则要用下面这个公式,设两个格子的坐标为 (x1, y1) 和 (x2, y2):
最后,你也许需要把整张地图遍历一遍。但地图的形状让按坐标遍历稍微麻烦一些。
用坐标的话,得写成这样:
不过地图一共有 613 个格子,编号从 0 到 612。
因此,遍历格子还有一种简单得多、也省下大量操作数的写法:
地图的形状加上格子的编号顺序,带来了一个有趣的性质:格子可以直接由坐标推出来,公式是 306 + 18 * x + 17 * y。也就是说,在 x 轴上偏移一格,格子编号就变化 18;在 y 轴上偏移一格,编号就变化 17。 这个性质能在不少算法里省下大量操作数,但要小心处理地图的左右边界:本想移动一格,却可能错误地得到地图另一侧的格子!
在战斗中,你可以显示格子的编号:在选项里勾选 _显示格子编号_(用来看编号)和 _战术模式_(用来隐藏障碍物)。
格子的编号如下:
你可以用函数 getCellContent(cell)、isObstacle(cell)、isEntity(cell) 和 isEmptyCell(cell) 查看某个格子里有什么。 你也可以用函数 getObstacles() 取得本场战斗中的全部障碍物。
Impossible de charger les données du jeu.
Vérifiez votre connexion et réessayez.