首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pacman Ghost AI

Pacman Ghost AI
EN

Stack Overflow用户
提问于 2011-11-16 02:28:30
回答 5查看 16.7K关注 0票数 8

我目前正在用java制作一款吃豆人游戏。不过,我有一个关于鬼魂的问题。

我知道鬼魂并不都有相同的攻击风格。我首先想做的是让幽灵去追逐吃豆人的基础知识,而不是担心它们之间的差异。

我对你们这些聪明的人的问题是,让鬼魂追逐吃豆人的最好方法是什么,但有时会随机改变路径。我目前正在使用一个21 * 21的2D数组来告诉你墙的位置,所以我想让它更多地尝试并前往pacman当前的网格位置。(例如,转到10,14)当然,同时避免像吃豆人那样穿过墙壁。我在想,我怎么才能让它做到这一点,同时让鬼魂有时停下来,走到另一个方向,这样它就不会总是不断地追逐,吃豆人有机会逃脱。也许你们中的一些人已经编写了一个吃豆人游戏,或者只是知道一个很好的方法。任何帮助都将不胜感激。

(请注意,我目前正在上11年级的计算机科学课程,学习java的第一个学期已经过半了。)

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-11-16 02:48:24

如果你只是想让幽灵的行为不尽相同,那么每次他们遇到交叉点时,让他们的决定随机混合一些合理的追逐默认值(例如继续以最短的距离到达吃豆人-在所有后继者上使用Dijkstra's algorithm来挑选最好的)和一个随机选择。

票数 6
EN

Stack Overflow用户

发布于 2011-11-16 02:34:16

我发现这篇文章非常有用:Understanding Pac-Man Ghost Behavior,因为它解释了您所需要的东西。

票数 4
EN

Stack Overflow用户

发布于 2011-11-16 02:50:15

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

如果您有一个数组steps,其中的第一个n_closing_in步骤表示将使幽灵更接近Pacman的步骤,那么您可以使用以下命令为这些步骤分配prob_closing_in的总概率

代码语言:javascript
复制
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中剩下的内容分配到将使幽灵远离吃豆人的步骤上。

代码语言:javascript
复制
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。)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8141223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档