8

私は現在、Javaでパックマンゲームを作っています。でも幽霊について質問があります。

私は、幽霊がすべて同じ攻撃スタイルを持っているわけではないことを理解しています。私は最初に、幽霊がパックマンを追いかけるための基本に取り組みたいと思っています。まだ違いについて心配する必要はありません。

賢い人たちへの私の質問は、幽霊がパックマンを追いかけるが、時にはランダムに道をそらすための最良の方法は何であるかということです。私は現在、壁がどこにあるかなどを伝えるために21 x 21の2D配列を使用しているので、もっと試して、現在のpacmanのグリッド位置に向かうことを考えていました。(例えば、10,14に行きます)もちろん、pacmanのような壁を通り抜けることを避けながら。どうすればこれを実現でき、幽霊が立ち止まって別の方向に進むことがあるので、常に追跡しているとは限らず、pacmanが逃げるチャンスがあるのではないかと思っています。たぶん、あなたの何人かはパックマンゲームをプログラムしたか、これのための良い方法を知っています。どんな助けでも大歓迎です。

(私は現在、11年生のコンピュータサイエンスコースに参加しており、学習したJavaの最初の学期の途中にいることに注意してください。)

4

5 に答える 5

6

すべての幽霊が同じように振る舞わないようにしたい場合は、交差点に遭遇するたびに、合理的な追跡のデフォルトをランダムに組み合わせて決定を下します (パックマンまでの最短距離で道を進むなど、すべての後継者でダイクストラのアルゴリズムを使用します)。最適なものを選択する) とランダムな選択。

于 2011-11-15T18:48:24.453 に答える
4

この記事が非常に役に立ちました:パックマンゴーストの動作を理解する 、必要なものだけを説明しています。

于 2011-11-15T18:34:16.450 に答える
4

ここに可能性があります: ゴーストが取ることができるすべてのステップについて、そのステップがパックマンに近づくかどうかを計算します。これは、マンハッタン距離で行うことができます。これは、2D グリッドではx距離 +y距離です。次に、ランダムにステップを選択し、実際に近づくステップに高い確率を割り当てます。

stepsゴーストをパックマンに近づけるステップを表す最初のn_closing_inステップを含む配列がある場合、それらに の合計確率prob_closing_inを割り当てることができます

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、ゴーストをパックマンから遠ざけるステップに分配します。

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 があまり得意ではありません。)

于 2011-11-15T18:50:15.253 に答える
1

私の大学レベルの AI コースでは、古いバージョンの Pacman Ghost AI フレームワークを使用していくつかの作業を行いました。現在のバージョンはhttp://www.pacman-vs-ghosts.net/software (Now DEAD)にあります。この場合、独自の Ghost エージェントを開発して、エージェントまたはユーザーが制御する Pacman をキャプチャしようとします。

これは、さまざまな AI テクニックをいじるのに非常に役立ちました。

あなたの質問にさらに、そのフレームワークのレベルは、実際には2次元配列ではなくグラフから構築されています。コードを見て、彼らがどのようにそれを行うかを確認してください。

元のリンクは死んでおり、これまでのところ公式のミラーを見つけることができませんでした. ただし、次の情報が役立つ可能性があります。

パックマン ゴーストの動作を理解する ミズ パックマン Vs ゴースト AI (GitHub) PacMan_v6.2 (GitHub)

于 2011-11-15T18:51:46.147 に答える
0

このような AI の最も簡単な実装は、単純なグラフ検索アルゴリズムを使用することです。BFS は機能する単純なものです。ただし、もちろんランタイムを最適化するためにヒューリスティックを実装する必要があるため、ゴースト エージェントからパックマンまでの単純なマンハッタン距離で十分です。

概要: マンハッタン距離ヒューリスティックを使用した BFS。

より精巧になり、ゴーストのハンティングをさらに効率的にしたい場合は、ゲーム状態のヒューリスティックを実装できます (たとえば、ゴーストからパックマンまでの距離、およびパックマンがこれまでに食べたドットの数に基づく)。ゴーストが次の移動を選択する必要がある場合に使用します。この場合、プルーニング手法を使用してランタイムを短縮できます。

于 2016-04-26T21:52:43.893 に答える