程序设计需要将各种需要模拟计算的内容抽象为数字。
通常采用二维数组表示2D地图
又以不同的数字代表地图上不同类型的事物,让我们看一个地图设计的例子:
0 表示没有任何障碍的平坦区域
一个数字能够表示地图上的最小单位,多个数字一起则能表示出一片区域。
想象上面这片区域是一片平坦的区域,最外层的 0 则可以理解为区域的边界。这片只有数字 0 的区域仅仅是在程序计算时的样子,我们可以将地图更好的呈现出来,比如让 0 表示一块草地。
这块草地与我们之前看到的 0 字区域不一样,是视角发生了变化,看着更为立体些。
1 表示玩家扮演的角色
你能告诉我玩家扮演的角色在平坦区域的位置吗?
如果你看见了那个蓝色的角色…… 等等我们还是先给它取一个名字,毕竟“蓝色的角色”太拗口
呃,蓝色的1…… 就叫它 “蓝波丸” 吧
2 表示角色不可以通行的墙,让我们在地图上设置一些墙
经过这样的设定后,我们就可以约束角色的活动范围或者路线
想想看,你如果控制着角色 蓝波丸 该怎样行走才能到达地图的另一端?
蓝波丸:等下,我好像还不会走路
新任务1:控制角色移动
找到我们控制的角色,放大局部地图,如下:
看起来 蓝波丸 停在右下角的位置,现在我们要让 蓝波丸 动起来。虽然目前我们还无法控制 蓝波丸 不过可以先想象角色移动一步后的画面
蓝波丸 可以向3个方向移动。地图的边界也就是数组的边界,蓝波丸 和你一样无法穿越边界,角色无法穿越地图边界,而设计游戏的你无法穿越数组边界。
蓝波丸 目前站在平坦区域的右下角,由于地图边界的限制最多只能向3个方向移动,但如果 蓝波丸 不在平坦区域的边界附近则能向8个方向移动,如果将 蓝波丸 能移动的所有方向用线画出来刚好是个“米”字形状。
现在我们来制定一个具体的目标,向左移动 1 步
现在我们要在二维数组中模拟图中的变化,所以我们需要
1. 在 蓝波丸 位置左边写入蓝波丸
2. 清除初始位置的 蓝波丸
将这两步画出来应该是这样