这次来简单说一下上次提到的Example里面提到的控制器,虽然本来是不准备说的,但是为了后续算法在测试中有对比,在这里先提一下。
·RandomPacMan / RandomGhosts:这两个就是全部随机走法的没什么可说的,这里试讲所有走法(上下左右)存入allMoves这个列表里面,然后随机取一个,这了不管这个动作是否可行。
·RandomNonRevPacMan:这个也是随机的,但是与之前有个不同,就是在可选的随机值不再是全部走法而是可行的走法,就意味着吃豆人不会直接装上魔鬼了(如果某个方向有魔鬼或者墙那么这个走法将不在可选的步骤之中)
·NearestPillPacMan / VS:这个就是将所有的豆子和能量药的位置保存下来,然后找最近的一个,VS则是将魔鬼的路线可视化出来
·AggressiveGhosts:这个是进攻性魔鬼,会先判定魔鬼是否会处于被吃等不能移动状态,如果不是这个状态就会向大致吃豆人的方向移动(这里有些距离度量方法参数如欧几里得距离等)。
·Legacy:这个其实是提供一种不同魔鬼走不通方法的框架,这里返回的是三个进攻性+一个随机走法的。(四个魔鬼的区分是根据出动的先后顺序)
·Legavy2TheRechoning:判断魔鬼之间是否太近且离吃豆人很远,那么久去接近能量豆;如果处于被吃状态或吃豆人离能量豆很近则原理吃豆人;不是可被吃状态则接近吃豆人
·StarterPacMan:代码上有注释 1. Get away from any non-edible ghost that is in close proximity 2. Go after the nearest edible ghost 3. Go to the nearest pill/power pill
·StarterGhosts:1. If edible or Ms Pac-Man is close to power pill, run away from Ms Pac-Man 2. If non-edible, attack Ms Pac-Man with certain probability, else choose random direction
以上就是所有Example的控制器,可以看到这里的控制器要不是随机要不也都是属于简单的有限状态自动机的形式,其中路径规划上也有算法如其中求最短距离便使用了A*算法。说起来很简单,实现起来难点主要在于路径规划上,之后我们会用代码来介绍这些控制器所用到的路径规划算法。