游戏AI-2:移动模式

代码https://resources.oreilly.com/examples/9780596005559/

移动模式是制造智能行为幻觉的简单方式。

实现移动模式的标准做法是选取想要的模式,再将控制数据填入某个数组或多个数组。控制数据由特定的移动指令组成,比如向前移动再转弯,借此迫使计算机控制的物体或者角色按所需模式移动。利用这些算法,你可以建立圆形、方形、蛇形、曲线以及任何类型的模式,将之编制成一组精确的移动指令。

标准算法

控制指令数据结构

ControlData {
   double turnRight;    // 角度
   double turnLeft;
   double stepForward;  // 距离
   double stepBackward;
}

通过编写指令数组来实现移动

砖块环境中的移动模式

比如猎物在以矩形移动模式完成守卫或巡逻,路径由几条线段构成。你必须确保最后一条线段的终点是第一条线段的起点。

entityList[1].InitializePathArrays(); //初始化路径
// 构建路径线段    	
entityList[1].BuildPathSegment(4, 2, 4, 11);
entityList[1].BuildPathSegment(4, 11, 2, 24);
entityList[1].BuildPathSegment(2, 24, 13, 27);
entityList[1].BuildPathSegment(13, 27, 16, 24);
entityList[1].BuildPathSegment(16, 24, 13, 17);
entityList[1].BuildPathSegment(13, 17, 13, 13);
entityList[1].BuildPathSegment(13, 13, 17, 5);
entityList[1].BuildPathSegment(17, 5, 4, 2);
//
entityList[1].NormalizePattern();
entityList[1].patternRowOffset=5;
entityList[1].patternColOffset=2;

其中BuildPathSegment是修改后的Bresenham算法

NormalizePattern将模式标准化,使其以相对坐标表示,而非绝对坐标。需要把存储在模式数组中的所有位置都减去起始位置即可。

仿真物理环境中的移动模式

结合物理模型

控制结构

移动模式控制数据结构体

struct ControlData {
   bool PThrusterActive;
   bool SThrusterActive;
   double dHeadingLimit;
   double dPositionLimit;
   bool LimitHeadingChange;
   bool LimitPositionChange;
}

 

你可能感兴趣的:(游戏)