PacMan角色AI建议为最佳下一个方向

时间:2010-07-29 20:25:40

标签: java artificial-intelligence a-star breadth-first-search path-finding

首先,对于PacMan而言,这是 AI而不是幽灵

我正在写一个Android动态壁纸,围绕你的图标播放PacMan。虽然它通过屏幕触摸支持用户建议,但大部分游戏都将由AI播放。我99%完成了游戏的所有编程,但PacMan自己的AI仍然非常弱。我正在寻找帮助来开发一个好的AI来确定PacMan的下一个旅行方向。

我最初的计划是:

  1. 为每个方向初始化一个得分计数器,其值为零。
  2. 从当前位置开始,并使用BFS通过将它们添加到队列中以四个可能的初始方向向外移动。
  3. 从队列中弹出一个元素,确保它尚未被“看到”,确保它是一个有效的电路板位置,并根据以下内容添加到相应的初始方向为当前单元格评分值:

    1. 有一个点:加10
    2. 上电:加50
    3. 有水果:加水果价值(因水平而异)
    4. 鬼魂向PacMan旅行:减去200
    5. 有一个幽灵离开PacMan:什么都不做
    6. 鬼魂垂直移动:减去50
    7. 将单元格的值乘以基于单元格步数的百分比,从初始方向开始的步数越多,单元格的值越接近零。
    8. 并将当前单元格的三个可能方向排入队列。

    9. 队列为空后,找到四个可能的初始路线中每一个的最高分,然后选择该分数。
    10. 这对我来说听起来不错,但幽灵非常迅速地围绕着PacMan,他在相同的两三个细胞中来回抽搐,直到一个人到达他身边。调整重影存在的值也无济于事。在游戏结束前,我最近的点BFS至少可以达到2级或3级。

      我正在寻找代码,想法和/或资源链接来开发适当的AI - 最好是前两者。我想在本周末的某个时间在市场上发布这个,所以我有点匆忙。非常感谢任何帮助。


      仅供参考,这是在GameDev.StackExchange上手动交叉发布的

6 个答案:

答案 0 :(得分:1)

如果PacMan卡在一个位置并开始来回抽动,那么它表明在你运行指标后,对他开放的不同动作的分数非常相似。然后幽灵的小位置变化将导致最佳的移动来回翻转。您可能需要考虑添加一些hysteresis来阻止这种情况发生。

设置:选择随机移动并将其记录为得分0。

每一步:

  1. 对可用的移动运行评分功能。
  2. 如果最高分数比记录分数大x%,则覆盖记录分数并随此移动。
  3. 申请搬家。
  4. 这会导致PacMan不再选择每一步的“最佳”动作,但看起来贪婪的本地搜索似乎不是最佳选择。这将使PacMan更加稳定并停止抽搐。

答案 1 :(得分:0)

有办法将PacMan改为“路径追踪”模式。计划是您检测某些情况,计算PacMan要遵循的预先绘制的路径,然后计算出该路径的早期退出条件。您可以在几种情况下使用它。

当PacMan在一定距离内被四个方向中的三个方向的鬼魂包围时,然后创建一个退出路径,导致PacMan远离鬼魂或加电。退出的情况是当他吃掉电源或不再被包围时。

当PacMan吃掉电源时,创造一条吃掉附近鬼魂的路径。出口情况是路径上没有鬼魂,重新计算路径。或者如果附近没有鬼魂,请完全退出该模式。

如果剩下的点数少于一半,或者附近没有点,请输入一条路径去吃掉一些点,避开幽灵。当鬼魂到达附近时重新计算路径,或者如果附近有几个鬼魂则完全退出。

当没有可保证路径的情况时,您可以恢复到之前编程的默认AI。

答案 2 :(得分:0)

您可以使用Ant Colony Optimisation技术找到最短的可见路径,这会导致许多图标被吃掉或者可以获得很多分数。

答案 3 :(得分:0)

我不太了解人工智能或特定的算法,但是你可以尝试一些可能让你足够接近政府工作的东西:)

对于快速围绕他的鬼魂的问题,也许幽灵AI太强大了?我知道古典Pacman中每个幽灵都有特定的行为,所以如果你没有把它包含在内,你可能会想要。

为了消除回溯,你可以为最近遍历的节点创建一个权重惩罚,所以他不太愿意回到以前的路径。如果这还不足以让他朝着一个方向或另一个方向踢,那么你可以以对数方式增加吸引力惩罚,因此一条路径将以非常快的速度变得比另一条路径更具吸引力。

对于他被幽灵抓住的问题,一旦幽灵到达危险的节点附近,你就可以从一般的基于目标的算法改为回避算法。

答案 4 :(得分:0)

你可能会因为知道机器人如何“推理”而受益(正如这篇优秀的dossier中所解释的那样)。例如,知道鬼魂的追逐/散射模式将允许您在“危险”位置获取点,等等。

我正在添加这个答案,因为它知道它不是你想要的最佳解决方案(因为你想在下周交付......)但是对未来读这篇文章的人来说可能会有用。排序时间胶囊:)

答案 5 :(得分:0)

你应该查看Antiobjects的这个描述,这是Pacman幽灵穿越迷宫所使用的技术。特别要注意:

  

这些反对象或代理人中的每一个   有一个相同和简单的算法   它在每一个转弯处运行   游戏。而不是让Ghosts聪明   足以解决“最短路径”   迷宫周围的问题,一个概念   反而创造了“吃豆人的气味”   每个瓷砖负责说   它的瓷砖上有多少吃豆人的香味。

因此,您考虑使用类似的基于香味的技术来控制Pacman,也许Pacman首选穿越具有较少香味的路径;这会减少他过去的可能性。