4

首先,这是吃豆人的人工智能,而不是幽灵

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

我最初的计划是这样的:

  1. 用零值初始化每个方向的分数计数器。
  2. 从当前位置开始,使用 BFS 通过将四个可能的初始方向添加到队列中向外遍历。
  3. 从队列中弹出一个元素,确保它还没有被“看到”,确保它是一个有效的棋盘位置,并在相应的初始方向上添加一个基于当前单元格的值:

    1. 有一个点:加10
    2. 拥有力量:加50
    3. 有果实:加果实值(因等级而异)
    4. 有一个幽灵向吃豆人移动:减去 200
    5. 有鬼离开吃豆人:什么都不做
    6. 有鬼垂直行进:减去 50
    7. 将单元格的值乘以基于到单元格的步数的百分比,从初始方向开始的步数越多,单元格的值越接近零。

    并将当前单元格中的三个可能方向排入队列。

  4. 一旦队列为空,为四个可能的初始方向中的每一个找到最高分数并选择它。

这在纸上听起来不错,但 PacMan 周围的幽灵非常迅速,他在相同的两三个牢房中来回抽搐,直到一个到达他身边。调整幽灵存在的值也无济于事。我最近的点BFS至少可以在游戏结束前达到2级或3级。

我正在寻找用于开发适当 AI 的代码、想法和/或资源链接——最好是前两者。我想在这个周末的某个时候在市场上发布这个,所以我有点着急。任何帮助是极大的赞赏。


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

4

6 回答 6

1

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

设置:选择一个随机移动并以分数 0 记录它。

对于每个步骤:

  1. 对可用动作运行评分函数。
  2. 如果最高分数比记录分数高 x%,则覆盖记录分数并与该分数一起移动。
  3. 应用移动。

这样做的效果是,PacMan 将不再在每一步中选择“最佳”移动,但似乎贪婪的本地搜索无论如何都不是最佳的。这将使 PacMan 更加一致并停止抽搐。

于 2010-07-30T22:43:24.363 回答
0

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

当 PacMan 在一定距离内被四个方向中的三个方向上的幽灵包围时,创建一条退出路径,引导 PacMan 远离幽灵或通向电源。退出情况是当他吃掉力量或不再被包围时。

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

当剩下的点不到一半或附近没有点时,进入一条路径去吃一些点,避开鬼魂。当附近有鬼时重新计算路径,如果附近有多个鬼,则完全退出路径。

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

于 2010-07-29T20:35:42.617 回答
0

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

这些反对象或代理中的每一个都有一个相同且简单的算法,它在游戏的每一个回合都运行。与其让幽灵足够聪明以解决迷宫周围的“最短路径”问题,而是创建了“吃豆人气味”的概念,每个图块负责说明其图块上有多少吃豆人气味。

因此,您考虑使用类似的基于气味的技术来控制 Pacman,也许 Pacman 更喜欢穿过气味较少的路径;这将减少他越过旧地的机会。

于 2010-08-11T14:13:46.983 回答
0

您可以使用蚁群优化技术来找到导致许多图标吃或可以获得许多分数的最短可见路径。

于 2010-07-29T22:11:19.570 回答
0

您可能会受益于了解机器人是如何“推理”的(如这个优秀的档案中所解释的)。例如,了解鬼魂的追逐/分散模式将使您能够在“危险”位置获得点,等等。

我添加了这个答案,知道这不是您正在寻找的最佳解决方案(因为您想在下周交付......)但可能对将来阅读此内容的人有用。有点像时间胶囊:)

于 2010-08-11T09:31:23.240 回答
0

我不太了解 AI 或特定算法,但这里有一些你可以尝试的东西,它们可能会让你足够接近政府工作:)

对于鬼快速包围他的问题,也许是鬼AI太强大了?我知道经典 Pacman 中的每个幽灵都应该有特定的行为,所以如果你还没有整合它,你可能想要。

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

对于他被鬼抓住的问题,一旦鬼到达危险节点附近,您也许可以从基于目标的通用算法更改为回避算法。

于 2010-07-31T06:36:56.640 回答