【问题标题】:Pathfinding Algorithm For 2 Pacmans2 个吃豆人的寻路算法
【发布时间】:2011-03-07 07:03:56
【问题描述】:
【问题讨论】:
标签:
artificial-intelligence
path-finding
pacman
【解决方案1】:
我认为最简单的策略是让每个幽灵追逐离它最近的玩家。可以使用曼哈顿距离(在寻路问题中有指向它的链接)或欧几里德距离或到玩家的路径长度来计算接近度。最后一个选项意味着您必须计算两个玩家的路径。尝试所有这些选项,然后根据自己的喜好选择一个。
另外,顺便说一句。所有回答pathfinding question 的人都没有提到Dijkstra's algorithm,它比BFS 还要慢:) 但只允许搜索所有最短路径一次。也就是说,如果您实施 A* 或 BFS 并有 n 个重影,您将至少进行 n 个寻路查询。使用 Dijkstra,您只能从播放器开始执行一次。但这一切都取决于。如果你的游戏领域太大,Dijkstra 不是最好的选择。尝试,试验,也许它会适合你。
【解决方案2】:
(没看过,但是)我猜所有的幽灵算法都基于幽灵和“玩家”的相对位置来做出行为——好吧,让每个幽灵改变主意,决定两个玩家中的哪一个它经常在其算法中用作“玩家”。
确定确切“每隔一段时间*意味着什么,这将成为游戏测试的一个问题 - 它是否应该在固定的时间表上?每个幽灵有所不同?根据两者的相对接近程度而有所不同球员?随机 - 在制服/泊松/其他分布上?
您可以看到许多可能性。请记住,您要避免“太好”的行为和“太愚蠢”的行为......
【解决方案3】:
如果你可以查询任何一个 Ghost 到任何一个 Pacman 的距离和方向,以及当前正在追逐任何一个 Pacman 的 Ghost 数量(以及哪些 Ghost),你应该可以用一些创意。
【解决方案4】:
我认为您保留了您提到的on this web page 描述的寻路算法。这将使游戏感觉更真实。唯一的问题是确定有多少鬼魂追逐一个特定的吃豆人。我认为这种行为应该包括所有鬼都在追逐一个玩家的场景。因此,需要一种算法来确定是否有 1、2、3 或 4 个幽灵在追逐玩家。该算法可以基于玩家之间的点差。所以,领先的玩家会被更多的鬼追赶。该算法可能应该考虑玩家剩余的生命数量。因此,如果领先玩家的生命较少,算法应该延迟增加追赶领先玩家的幽灵数量。追逐玩家的鬼魂数量的变化频率也不应该太频繁。如果一个幽灵对被追逐的玩家变化太大,那么幽灵似乎也不是真的在追逐。就像上面提到的网页一样,获得良好的行为需要一些实验。我认为一开始保持简单是关键,因为有时可以通过使用一些简单的规则来实现复杂的外观行为。祝你好运,我很想看看你想出了什么。完成后请发布链接!
【解决方案5】:
我不知道这是否与您的“公平”概念相吻合,但我想人们想防止一名玩家碰巧成为所有 4 个幽灵的更近目标,因此他们最终联合起来他并跟随他,再也不会追逐其他玩家。这可能是让幽灵始终跟随最近的玩家的规则的可能结果。
您可以考虑首先将 2 个幽灵分配给玩家 1,将 2 个其他幽灵分配给玩家 2,然后让他们追逐目标(并经常重新分配)。不过,如果我是现实世界中的鬼魂,我不会在意我和我所有的朋友都在联手搞一个吃豆人。
我会使用深度优先搜索而不是 BFS 或 Dijkstra,使用深度优先搜索到深度 3 或 4,使用您的幽灵和 Pacman 在此搜索树的叶子之间的笛卡尔距离,并选择最佳叶子的值直到根。对于一个小的前瞻,与 BFS 和 Dijkstra 相比,它的编码会更快、更容易。深度有限搜索应该为您的鬼魂提供非常智能的行为,假设您的游戏板没有螺旋走廊,其中逃离螺旋所需的移动次数大于 3 或 4。这也意味着算法的运行时间不会与 BFS 和 Dijkstra 一样,随着越来越大的电路板增加,再次假设您没有螺旋走廊。