13.抽象移动过程

一、前言

上一章我们看到了角色向一个方向移动就很繁琐,有近百行的代码。

而四个方向其实都差不多,只不过坐标方向不一样而已,写起来太麻烦了!

所以这个时候我们就像将其抽象一下,能不能将4个函数转换为一个函数?

二、抽象

所谓抽象,就是模糊掉一些具体的东西,从全局上观察。

比如前一章,我们一直拿的是向上移动为例,那能不能模糊掉这个方向感呢?

比如,无论向上下左右哪个方向走,总的来说就是朝一个特定的方向移动而已。

而如果我们想要让角色在这个特定的方向上移动,就需要知道这个方向上的前一个位置是空地、金蛋、还是箱子。

如果前一个位置是箱子,那我们还需要知道再向前一个位置是空地、金蛋、还是箱子。

也就是说,如果我们想要朝某个方向移动,就需要知道该方向前两个位置的状态。

进一步来说就是,我们需要的仅仅只是这个方向上前两个位置的坐标,然后角色根据这个坐标移动即可。

三、代码

有了上面的推测,下面我们就来尝试一下写代码。

首先我们写一个通用的move函数:

void Move(int map[10][12], char direction){

}

这个函数返回值void类型,即没有返回值。

然后它有两个参数,第一个参数为地图,第二个参数为具体想要移动的方向。

方向就是前面从按键所接收到字符,a为左,d为右,w为上、s为下。

然后还是老规矩,第一步先找到角色的位置。

代码与前文top_move完全相同,不再展示。

有了角色当前位置的x,y以及状态的s这三个变量后。

下一步我们就需要根据不同的方向,计算出下一个点以及下下个点的位置坐标:

作者:余识
全部文章:0
会员文章:0
总阅读量:0
c/c++pythonrustJavaScriptwindowslinux