首页 文章

2 Pacman的寻路算法

提问于
浏览
3

我正在尝试实施Pacman . 它运行正常,但到目前为止,鬼魂没有使用任何寻路,而是在每个路径交叉点上随机决定采用哪条路径 . 所以你可以想象,Pacman赢得比赛并不困难;)

所以我在Pacman中阅读了一些关于路径查找算法的内容,在这里我发现了一个非常好的答案:Pathfinding Algorithm For Pacman

答案是指http://home.comcast.net/~jpittman2/pacman/pacmandossier.html#Chapter%204

这一切都很好,但在我的Pacman实施中,有两个Pacman由两个不同的玩家玩 . 所以我想知道如何调整寻路算法,以便幽灵并不总是追逐一个玩家 .

有关如何修改算法的任何想法,以便幽灵对两个玩家或多或少同等公平?

5 回答

  • 5

    我认为最简单的策略是让每个幽灵追逐最接近它的玩家 . 可以使用曼哈顿距离(在寻路问题中存在与其相关的链接)或欧几里德距离或通过玩家的路径长度来计算邻近度 . 最后一个选项意味着您必须计算两个玩家的路径 . 尝试所有这些选项,并根据您的口味选择一个 .

    另外,在旁注 . 所有回答pathfinding question的人都没有提到Dijkstra's algorithm,它甚至比BFS慢:)但只允许搜索所有最短路径 . 也就是说,如果你实现A *或BFS并且有n个ghost,你将至少进行n次寻路查询 . 使用Dijkstra,你只能从玩家开始做一次 . 但这一切都取决于 . 如果您的游戏区域太大,Dijkstra不是最佳选择 . 尝试,尝试,也许它会适合你 .

  • 2

    (还没看过但是)我猜测所有幽灵算法的基础都是鬼魂和“玩家”的相对位置 - 好吧,简单地让每个幽灵都改变主意关于它使用的两个玩家中的哪一个经常在算法中使用“玩家” .

    确定“每隔一段时间*这意味着什么就是游戏测试的问题 - 它应该是固定的时间表吗?每个幽灵都不一样?根据两个玩家的相对接近程度而变化?随机 - 在制服/泊松/上其他发行?

    你可以看到许多可能性 . 请记住,您要避免“太好”的行为和“过于愚蠢”的行为......

  • 1

    如果你可以从任何一个Ghost查询任何一个Pacman的距离和方向,以及Ghosts(和Ghosts)目前正在追逐任何一个Pacman的数量,你应该能够用一些创造力制作一个非常好的和简单的AI .

  • 3

    我想你保留了你提到的描述on this web page的寻路算法 . 这将使游戏感觉更加真实 . 那么唯一的问题是确定有多少鬼追逐特定的吃 beans 子 . 我认为这种行为应该包括所有鬼魂追逐一个玩家的场景 . 因此,需要一种算法来确定1,2,3或4个鬼魂是否在追逐玩家 . 该算法可以基于玩家之间的点差异 . 因此,领先的玩家将被更多的鬼魂追逐 . 算法应该考虑到玩家剩下的生命数量 . 因此,如果领先的玩家生命较少,则算法应该延迟增加追逐玩家领先的幽灵数量 . 追逐玩家的鬼魂数量的变化频率也不应经常发生 . 如果幽灵改变了被追逐的玩家太多,那么幽灵似乎也不会真正追逐 . 就像上面提到的网页一样,获得良好的行为需要进行一些实验 . 我认为一开始保持简单是关键,因为有时通过使用一些简单的规则可以实现复杂的外观行为 . 祝你好运,我很想看看你想出了什么 . 完成后请发布链接!

  • 1

    我不知道这是否与你的“公平”概念相吻合,但是我想有人想要防止一个玩家碰巧成为所有4个鬼的接近目标的情况,所以他们最终联合起来并跟随他他身边,再也没有追逐过其他球员 . 这可能是让幽灵始终跟随最近的玩家的规则的结果 .

    你可能会考虑首先将2个幽灵分配给玩家1和2个其他幽灵给玩家2,然后让他们追逐他们的目标(并且每隔一段时间重新分配一次) . 虽然,如果我是一个现实世界中的幽灵,如果我和我的所有朋友在一个pacman上联合起来我都不在乎 .

    而不是BFS或Dijkstra,我会使用深度优先搜索到深度3或4,使用你的幽灵和Pacman在这个搜索树的叶子之间的笛卡尔距离,并选择最佳叶子的值到根 . 对于小型前瞻,与BFS和Dijkstra相比,编码更快更容易 . 深度限制搜索应该为你的幽灵提供非常智能的行为,假设你的游戏板没有螺旋式走廊,其中逃离螺旋所需的移动次数大于3或4.这也意味着算法的运行时间不会与BFS和Dijkstra一样,随着越来越大的板块而增加,再次假设您没有螺旋式走廊 .

相关问题