想象一下一个非常简单的射击游戏,众所周知:
您是玩家(绿色)。您的运动仅限于X
轴。我们的一个或多个敌人位于屏幕的顶部,他的移动也仅限于X
轴心。玩家向敌人发射子弹(黄色)。
我想为敌人实施一种AI,该AI应该真正擅长避免玩家的子弹。我的第一个想法是将屏幕分成多个独立的部分,并为其分配权重:
有两种重量:“子弹重量”(灰色)是子弹施加的危险。子弹离敌人越近,“子弹重量”(0..1
,其中1是最高危险)越高。没有子弹的车道的权重为0。第二权重是“距离权重”(灰绿色)。对于每条车道,我都会增加0.2
移动成本(此值现在是任意的,可以调整)。
然后,我简单地添加权重(白色)并转到权重最低的通道(红色)。但是这种方法有一个明显的缺陷,因为它很容易错过局部最小值,因为最佳的去处只是在两个传入的子弹之间(如白色箭头所示)。
所以这就是我要寻找的:
- 即使在没有没有施加子弹威胁的地方的情况下,也应该找到解决方法。
- 敌人可以通过选择最佳(或几乎最佳)解决方案来可靠地躲避子弹。
- 算法应该能够考虑子弹的移动速度(因为它们可能以不同的速度移动)。
- 调整算法的方法,以便可以应用不同级别的难度(对超级智能敌人是愚蠢的)。
- 算法应该允许不同的目标,因为敌人不仅想躲避子弹,还应该能够射击玩家。这意味着在躲避子弹时,应该优先选择敌人可以向玩家射击的位置。
那么您将如何解决呢?与这种类型的其他游戏相反,我只希望有几个但非常“熟练”的敌人,而不是愚蠢的敌人。