前言
在公司做flash有一段时间了,在这几个月做的功能中,有几个存在敌人移动的小游戏,发现敌人移动AI是一个值得学习与研究的方向,于是把学习记录于此。
格子类型游戏
简介
常见的格子类型游戏,可以理解为就是指把50X50(宽*高)的面板分成25个格子,每个格子的宽高为10*10,一个敌人初始化在某一个格子中,之后移动都是从某一个格子移动到临近的格子,不存在移动半格的情况。一般游戏中还会存在障碍物,敌人与自己均不能移动到存在障碍物的格子当中。
创建地图(格子)结构
由于地图结构是固定的格子,因此可以直接使用二维数组来进行存储。数组元素的值可以用来代表格子的不同状态,这里0代表空格子,1代表存在障碍物的格子。代码如下所示:
1 | // 为了方便,以3 * 3 大小格子为例 |
判断临近格子是否可以移动
临近格子一般为上下左右四个方向,向每个方向移动只需要判断格子是否可行即可。
1 | /** |
上述代码逻辑虽然是以计算上下左右四个方向为例的,但其实也同样适用于八个方向(加左上、左下、右上、右下四个方向),只需要改变下nextPos数组的值即可。后续还是以四个方向为例。
1 | // 用于计算临近8个方向,后续代码逻辑同上,无需变动 |
移动方向选择(下个格子选取)
完全随机选择
也就是说每次走完一个格子,都重新从上下左右四个格子中选取,但是由于选取的格子不一定是可移动的,因此当遇到不可移动的格子时,需选取下一个方向
1 | var nextPos:Array = [[0, 1], [0, -1], [1, 0], [-1, 0]]; |
最近移动的方向优先选择
只需要把最近的方向存起来优先判断即可。
1 | var nextPos:Array = [[0, 1], [0, -1], [1, 0], [-1, 0]]; |