Pacman 的寻路算法

Posted

技术标签:

【中文标题】Pacman 的寻路算法【英文标题】:Pathfinding Algorithm For Pacman [closed] 【发布时间】:2011-02-05 22:28:40 【问题描述】:

我想实现游戏吃豆人。对于 AI,我正在考虑使用 A* 算法,在许多论坛上都看到过。但是,我为一些简单的寻路(从 a 点到 b 点,中间有某些障碍物)实施了广度优先搜索,并发现它总是给出最佳路径。我想这可能是因为在像吃豆人这样使用简单寻路的游戏中,图表中没有成本的概念。那么,如果我在 Pacman 中使用 BFS 而不是 A* 进行寻路可以吗?

【问题讨论】:

【参考方案1】:

这取决于,你真的想让幽灵像在吃豆人中那样工作吗?

Here's a description of how the ghosts' chase AI works(它们各自的工作方式不同)。请务必阅读以上章节,了解他们如何实际尝试访问他们的target tile。该页面是对吃豆人的精彩深入分析,读起来很有趣。

【讨论】:

谢谢乍得。我以前没有读过那篇文章。 web.archive.org/web/20151006023914/http://home.comcast.net/…【参考方案2】:

关于寻路,请注意以下事项

BFS 将查看比 A* 更多的节点,这使得它慢得多 A* 将得出与 BFS 相同的答案 A* 真的很容易实现 使用 Manhattan Distance 作为您的启发式方法 - 这非常容易实现,并且可以带来非常有效的搜索 查看http://theory.stanford.edu/~amitp/GameProgramming/Heuristics.html了解更多信息(整个系列真的很有趣)

如果您在谈论幽灵 AI,请查看 Chad 提到的页面:The Pac-Man Dossier - 在确定如何到达目标图块时,幽灵实际上只是使用欧几里德距离,这使得它们非常不擅长寻找在某些情况下吃豆人。

【讨论】:

很遗憾,吃豆人的拆解已经被移除了。 正如您所说,A* 在一般情况下并不是最优的。只有给定一个可接受的和一致的启发式,才能保证找到最佳解决方案。 @b3bop 您对一般情况是正确的;我说的是在网格(即吃豆人迷宫)上使用曼哈顿距离的情况。在这种情况下,启发式既可接受又一致,A* 将得出与 BFS 相同的答案。【参考方案3】:

这取决于。 BFS 既完整又最优(从某种意义上说,它找到了最优解)

缺点?可能需要很长时间才能找到它!此外,根据问题的影响因素,您可能会很快耗尽内存。

如果你没有性能问题,那就保留 BFS,但如果你想在一个巨大的迷宫中尝试它,那么可能需要一段时间才能得到解决方案。

我建议您尝试 A*,恕我直言,这是最好的搜索策略。即使 BFS 没有问题,A* 也是一个很好的算法,你会学到很多很酷的东西。

【讨论】:

【参考方案4】:

您可能想考虑一下 Pacman 的原始设计者使用的反对象方法,您可以阅读 here 和 here。

但是,要回答您的问题,请使用有效的方法!如果您从 BFS 获得了良好的结果,请使用它。只要记住对寻路进行足够的抽象,以便以后找到更好的东西时可以替换它。

祝你好运!

【讨论】:

【参考方案5】:

如果不使用边权重,BFS 将始终给出最短路径。如果您不需要边缘权重,我会使用它。以后随时可以切换。

【讨论】:

谢谢!我有一种预感,可能是这样的 bfs 太慢了 对于一个简单的吃豆人游戏来说,这不太重要。【参考方案6】:

相关问题,大概回答了你的问题:Path finding in a Java 2d Game?

【讨论】:

以上是关于Pacman 的寻路算法的主要内容,如果未能解决你的问题,请参考以下文章

基于深度优先搜索的寻路算法及其进一步的探究

具有时间限制的图上的寻路(路由、旅行计划……)算法

5 X 5 方阵引出的寻路算法 之 路径遍历(完结)

Unity A星(A Star/A*)寻路算法

Unity专题_简单的寻路导航

教程翻译-理解基于矢量场寻路算法