一、前言
上一章我们看到了角色向一个方向移动就很繁琐,有近百行的代码。
而四个方向其实都差不多,只不过坐标方向不一样而已,写起来太麻烦了!
所以这个时候我们就像将其抽象一下,能不能将4个函数转换为一个函数?
二、抽象
所谓抽象,就是模糊掉一些具体的东西,从全局上观察。
比如前一章,我们一直拿的是向上移动为例,那能不能模糊掉这个方向感呢?
比如,无论向上下左右哪个方向走,总的来说就是朝一个特定的方向移动而已。
而如果我们想要让角色在这个特定的方向上移动,就需要知道这个方向上的前一个位置是空地、金蛋、还是箱子。
如果前一个位置是箱子,那我们还需要知道再向前一个位置是空地、金蛋、还是箱子。
也就是说,如果我们想要朝某个方向移动,就需要知道该方向前两个位置的状态。
进一步来说就是,我们需要的仅仅只是这个方向上前两个位置的坐标,然后角色根据这个坐标移动即可。
三、代码
有了上面的推测,下面我们就来尝试一下写代码。
首先我们写一个通用的move函数:
void Move(int map[10][12], char direction){
}
这个函数返回值void
类型,即没有返回值。
然后它有两个参数,第一个参数为地图,第二个参数为具体想要移动的方向。
方向就是前面从按键所接收到字符,a为左,d为右,w为上、s为下。
然后还是老规矩,第一步先找到角色的位置。
代码与前文top_move完全相同,不再展示。
有了角色当前位置的x,y以及状态的s这三个变量后。
下一步我们就需要根据不同的方向,计算出下一个点以及下下个点的位置坐标: