吃豆子鬼AI

时间:2011-11-15 18:28:30

标签: java artificial-intelligence pacman

我目前正在使用java进行pacman游戏。我对鬼有疑问。

我知道鬼魂并不都有同样的攻击方式。我首先要研究让幽灵去追逐pacman的基础知识,而不是担心会出现差异。

我向你提出的问题聪明的人有什么最好的办法让幽灵追逐吃豆子,但有时会随机转移路径。我目前正在使用一个21乘21的二维阵列来说明墙壁的位置,所以我正在考虑让它更多尝试并前往pacman的当前网格位置。 (例如,转到10,14)当然,虽然避免穿过像pacman这样的墙。我想知道我怎么能做到这一点,并且鬼魂有时会停下来并朝着另一个方向或某个方向发展,以至于它并不总是一直追逐而且pacman有机会逃脱。也许你们中的一些人编写了一个pacman游戏,或者只是知道一个很好的方法。任何帮助将不胜感激。

(请注意我目前正在读11年级的计算机科学课程,并且在学习java的第一学期中途。)

5 个答案:

答案 0 :(得分:6)

如果你只是希望幽灵并非所有人都表现相同,那么每次他们遇到一个交叉点时,都要将他们的决定随意混合一些合理的追逐默认值(例如继续使用距离Pacman最短的距离 - 使用{{ 3}}关于选择最佳选择的所有后继者和随机选择。

答案 1 :(得分:4)

我发现这篇文章非常有用:Understanding Pac-Man Ghost Behavior,因为它解释了你需要什么。

答案 2 :(得分:4)

这是一种可能性:对于幽灵可以采取的所有步骤,计算该步骤是否会使它更接近Pacman。这可以使用Manhattan distance完成,{2}网格中的x距离+ y距离。然后随机选择一个步骤,将更高的概率分配给那些实际上会更接近的步骤。

如果您有一个数组steps,其中第一个n_closing_in步骤表示将幽灵更接近Pacman的步骤,那么您可以将这些概率分配给prob_closing_in < / p>

double total_probility = 1.;
for (int i=0; i<n_closing_in; i++) {
    step_prob[i] = prob_closing_in / n_closing_in;
    total_probability -= prob_closing_in / n_closing_in;
}

然后同样分发total_probability中剩下的那些将使幽灵远离Pacman的步骤。

Step random_step(Step[] possible_steps, double[] step_prob) {
    double r = Math.random();

    int i;
    for (i=0; i<possible_steps.length(); i++) {
        if (r < step_prob[i])
            break;
        r -= step_prob[i];
    }
    return possible_steps[i];
}

如果迷宫不是太复杂而且关闭的可能性是>.5,那么幽灵似乎会追逐吃豆子,但却是偶然的。

prob_closing_in提升到1.将使游戏更加困难。

(以上所有代码都是未经测试的,可能包含错误。我不太擅长Java。)

答案 3 :(得分:1)

对于我的大学级AI课程,我使用较旧版本的Pacman Ghost AI框架进行了一些工作。看起来可以在http://www.pacman-vs-ghosts.net/software (Now DEAD)找到当前版本。在此,您将开发自己的Ghost代理,以尝试捕获代理或用户控制的Pacman。

这对于玩不同的AI技术非常有用。

更多问题,该框架中的级别实际上是由图形而不是2d数组构建的。您可以查看代码,看看他们是如何做到的。

原来的链接已经死了,到目前为止还没有找到官方镜像。但是,以下内容可能会有所帮助:

Understanding Pac Man Ghost Behavior Ms Pac Man Vs Ghost AI (GitHub) PacMan_v6.2 (GitHub)

答案 4 :(得分:0)

这种AI的最简单实现是使用朴素图搜索算法。 BFS将是一个简单的工作。但是,你想要实现一个启发式算法来更好地优化运行时,所以从ghost代理到Pac-man的简单曼哈顿距离就足够了。

摘要:具有曼哈顿距离启发式的BFS。

如果你想获得更好的体验,并让你的鬼魂在狩猎时更加高效,你可以实施游戏状态启发式(基于从幽灵到吃豆人的距离,以及Pac-man到目前为止吃了多少点,例如,当鬼必须选择下一步采取的时候使用。在这种情况下,您可以使用pruning techniques缩短运行时间。