当前位置:嗨网首页>书籍在线阅读

20-自定义简单人工智能概述

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

9.3.11 自定义简单人工智能概述

敌方坦克追踪玩家对象基于一个简单的规则。在gameStateEnemyMove()函数中对这个规则进行编码。这个函数是本书中最长也是最复杂的函数之一。首先介绍创建函数所使用的逻辑,读者将会在例9-2中看到完整的代码。

这个函数首先遍历enemy数组。函数必须为每个敌人选择一个新的区块作为移动目标。为了实现这个目的,函数将遵循几个简单的规则来判断testBounds()函数检测出的移动方向的顺序。

(1)首先,函数检测玩家是在垂直方向上更靠近敌人还是水平方向上更靠近敌人。

(2)如果是垂直方向,并且玩家在敌人上方,函数将在directionToTest数组中先放入up,然后再放入down。

(3)如果是垂直方向,并且玩家在敌人下方,函数将在directionToTest数组中先放入down,然后再放入up。

提示

在directionToTest数组中——先放入up再放入down,或者先放入down再放入up——可以简化人工智能处理过程。这个逻辑是,如果玩家在敌人上方,但是敌人被另一个对象阻挡,那么敌人可以先尝试相反的方向。在本章的游戏中,在敌方坦克前进的方向上没有任何对象可以阻挡。这是因为,只有移出屏幕边界外面才是非法的移动。如果在游戏区域中添加一些“阻挡”区块,那么整套人工智能将变得非常有用而且必要。将整套“自定义人工智能追踪算法”加入游戏中,以防备在游戏中添加更多类型的区块。

(4)函数接着检查是否应添加left和right方向。函数进行该操作的依据是哪个方向更接近玩家。

(5)如果是水平方向为最短路径而不是垂直方向为最短路径,函数将使用相同的逻辑,只不过这次是先使用left,然后是right,接着是up,最后是down。

(6)当这个操作完成时,所有4个方向都会放入directionToTest数组。

接下来的逻辑是找到一个0~99之间的随机数,检测这个数值是否小于chanceRandom EnemyMovement的值。如果小于,函数将忽略directionToTest数组,随机选择一个前进方向。无论是哪种情况,将检测所有的方向(不论是在directionToTest数组中的方向还是按照上、下、左、右的顺序),直到testBounds()函数返回true。

这就是对代码的全部介绍。在例9-2中,读者可以找到游戏的全套代码。