パックマンのゴースト動作

私は昨日のトピックリンクのHabréへの翻訳を試みました。 言葉遣いがあなたに曲がっていると思われる場合は、事前に謝罪します。建設的な批判を喜んで受け入れます。 行こう...

そもそも私にインスピレーションを与えたテーマでこのブログを始めようと思っています。 少し前に、Jamey Pittmanによる「 Pac-Man Dossier 」という記事に出くわしました。これは、Pac-Manゲームの仕組みの非常に詳細な説明を提供しました。 それは私にとって非常に興味深いように思えたので、このサイトは残りのゲームについて同じ詳細な情報を収集する試みです。 しかし、敬意を表して、Pac-Man、特にゴースト動作アルゴリズムの説明から始めます。 これは非常に興味深いトピックであり、行動にのみ焦点を当てるので、私の説明がジェイミーの説明よりも少し理解しやすく、アクセスしやすいことを願っています。

ゲームについて:
「当時、利用可能なすべてのゲームは非常に残酷でした-戦​​争と宇宙侵略者に関するゲーム。 誰もが一度に楽しめるゲームは一度もありませんでした。特に女の子が望むゲームはありませんでした。 女の子でも楽しめる「コミック」ゲームを思いつきました。」
-パックマンのクリエイター、岩谷徹



パックマンは昔からの象徴的なビデオゲームの1つであり、ほとんどの人(ゲーマーでさえない)は少なくともそれに慣れています。 ゲームの目標は非常に単純です-プレイヤーは「食べ物」(点で描かれている)で満たされた迷路にあり、次のレベルに進むにはすべてを食べる必要があります。 4人のゴーストがパックマンを追いかけているため、タスクは複雑です。 パックマンが幽霊の1人に会った場合、彼は自分の命を失い、食べたポイントのように最初に戻ります。 幽霊から逃げるだけでなく、パックマンの唯一の保護は、迷路の隅にある4つのエナジャイザー顆粒です。 食べた場合、幽霊は少しの間恐れて退却し始め、初期レベルではパックマンがボーナスポイントを獲得するためにそれらの1つを食べることができます。 食べた幽霊はそれを完全に除去するのではなく、迫害を再開するために初期位置に戻ります。 ポイントとゴーストを食べることに加えて、ボーナスポイントを獲得する別の機会があります-迷路の真ん中に近い各レベルで現れる果物。 パックマンが迷路で70ポイントを食べたときに最初の果物が表示され、2番目の果物は170のときに表示されます。

画像

各パックマンレベルでは、240ポイント(食物)と4つのエナジャイザーを備えた同じ迷路を使用しています。 パックマンとゴーストは、画面の左端と右端から続くトンネルを画面の反対側への遷移として使用できますが、トンネルの通過中のゴーストの速度は大幅に低下します。 ラビリンスは常に同じですが、パックマンの速度の変化とゴーストの加速により、レベルはより難しくなっています。 レベル21以降、ゲームは変更されないため、他のすべてのレベルの複雑さは同じです。

すべてのゴーストの動作の共通要素


「まあ、食べ物についてのゲームはそれほど面白くないので、少し興奮して緊張を吹き込み、敵を追加することにしました。 プレイヤーは食べ物を得るために彼らと戦わなければなりませんでした。 敵にはそれぞれ独自のキャラクターがあります。 敵は幽霊の形をした4つの小さなモンスターで、それぞれが青、オレンジ、ピンク、赤の色をしています。 私は主に女の子をゲームに引き付けるために4つの異なる色を使用しましたが、彼らは異なる色を好むと思いました。」
-パックマンのクリエイター、岩谷徹


各ゴーストは個別であり、それぞれ独自のアルゴリズムを使用してルートを決定します。 各ゴーストの動作を理解することは、それらを効果的に回避するために非常に重要です。 ただし、個々の特性の説明に進む前に、最初にそれらに類似する動作の側面を調べます。

ゴーストハウス


ゲームが始まると、パックマンは4人の幽霊すべてにすぐには攻撃されません。 ゲームの初期位置の図に示されているように、1人の幽霊だけが彼を悩まし始め、残りは迷路の中央にある「幽霊の家」と呼ばれる小さな部屋に座っています。 「初心者」以外の難易度では、ゴーストはパックマンに食べられた後(エナジャイザーを受け入れた後)、パックマンが死んだ場合もそこに戻ります。 他のすべての場合、ゴーストハウスはプレイヤーとゴースト自身の両方にアクセスできません。 以下に別途説明する場合を除き、家を出る幽霊は常に左に移動し始めます。

残り3人のゴーストがいつ家を出るかを決定する条件は、実際には非常に複雑です。 したがって、特に最初の数レベル以降は関連性がなくなるため、これらの説明はこの記事の範囲外とします。 まだ興味がある場合は、記事の冒頭で言及したパックマン文書がそれらをカバーしています



標的細胞


パックマンのメカニズムのほとんどは、迷路がセルに分割されているという事実に基づいています。 このコンテキストでの「セル」は、画面上の8x8ピクセルの正方形です。 元のゲームの画面解像度は224x288で、合計サイズは28x36セルになりますが、それらのほとんどはゴーストやペックマンには使用できません。 例として、ゴーストはパックマンが彼と同じケージを占領したときにパックマンを飲み込んだと考えられています。 さらに、迷路の各ポイントは、独自のセルの中心にあります。 ゴーストスプライトとパックマンスプライトは複数のセルであるため、1つだけではないことに注意してください。 したがって、ゲームでは、スプライトが中心を占める場合、キャラクターがこのセルを占めると考えられています。 これは、ゴーストがパックマンと同じセルに中心点を移動した場合にのみパックマンを捕まえるため、ゴーストから効果的に逃げるために重要です。

ゴーストアルゴリズムを理解する鍵は、「ターゲットセル」の概念です。 ほとんどの場合、各ゴーストには到達しようとしているセルがあり、彼の行動は自分の位置からターゲットセルに到達することで構成されています。 各ゴーストは、ターゲットセルへの移動に同じアルゴリズムを使用しますが、それぞれのゴーストは、それぞれのターゲットセルが異なるということです。 ターゲットセルがそこに移動するためにアクセス可能でなければならないという制限はないことに注意してください(アクセスできない場合が多いのですが)、ゴースト動作の多くの側面はこの機能の直接的な結果です。 セルはさらに影響を受けますが、現時点では、ゴーストはターゲットセルに到達しようとする動機がほとんど常にあることに留意してください。

ゴーストムーブメントモード


ゴーストは常に、チェイス、スキャター、または恐怖の3つのモードのいずれかです。 「通常」モードは追跡モードです。このモードでは、ゴーストはパックマンを捕まえようとするゲームのほとんどであり、ターゲットセルを選択する要因として彼の位置を使用します。 散乱モードでは、各ゴーストは、迷路の角に近接して位置する独自の固定ターゲットセルを持ちます。 これは、このモードでは、ゴーストが隅に散らばるという事実につながります。 恐怖モードは、ゴーストが移動中にターゲットセルを持たないという点でユニークです。 代わりに、彼らは各交差点のどこに行くかを擬似ランダムに決定します。 恐怖モードでは、ゴーストは濃い青になり、よりゆっくりと動き、パックマンに食べられます。 ただし、このモードの継続時間はレベルの増加とともに徐々に減少し、レベル19で完全に消えます。

「ゲームに緊張を加えるために、ゲームの特定の段階でモンスターがパックマンを囲むようにしました。 しかし、プレイヤーが常に幽霊に囲まれていると、プレイヤーにストレスがかかると感じました。 そのため、私は怪物に波で彼を囲むようにしました:最初に攻撃、そして退却。 彼らが再編成されたとき、攻撃が再び始まりました。 絶え間ない攻撃よりも自然に思えた」
-パックマンのクリエイター、岩谷徹


追跡モードから暴走モードへの変更は、固定タイマーに従って発生し、岩谷が説明する「波」を引き起こします。 このタイマーは、各レベルの開始時またはパックマンの死亡後にリセットされます。 また、ゴーストが恐怖モードになっているときにも一時停止します。これは、パックマンがエナジャイザーを食べると発生します。 その後、ゴーストは再び以前のモードに戻り、タイマーが再開します。 ゴーストは実行モードで開始され、追跡/実行の変更の4つの波があります。その後、ゴーストは無期限に(タイマーがリセットされるまで)追跡モードのままになります。 最初のレベルでは、これらの波の持続時間:

1. 7秒以内の暴走、20秒の追跡。
2. 7秒以内の暴走、20秒の追跡。
3. 5秒以内の暴走、20秒の追跡。
4. 5秒間暴走した後、絶え間ない追跡。

これらのフェーズの期間は、プレイヤーが2番目のレベルに移動するとわずかに変化し、5番目のレベルに再び変化します。 2番目のレベルから開始して、追跡の3番目の波は1033秒(17分13秒)に大幅に増加し、次のモードでは分散は1/60秒しか続かず、その後ゴーストは一定の追跡モードに入ります。 5番目のレベルの後、変更は、最初の2回の「実行」を5秒にさらに短縮し、追跡の第3波に4秒を追加して1037秒に延長することに基づいています。 各レベルでの1/60秒の暴走モードについては、最初のレベルを除き、このような短い時間はゲームプレイに影響を与えないようですが、この理由はさらに実証されます。

ゴースト動作の基本的なルール


次のステップは、ゴーストがターゲットセルにどの程度正確に到達しようとしているのかを理解することです。 ゴーストAIは非常にシンプルで近視眼的であるため、さらに印象的です。 幽霊は、迷路の中で動くとき、未来への一歩だけだと考えます。 ゴーストがケージに足を踏み入れるたびに、彼は次のケージを楽しみにし、ケージに到達したときにどこを向くかを探します。 これらの決定には1つの非常に重要な制限があります。ゴーストは方向を逆にすることができません。 つまり、ゴーストは左側のケージに入ることができず、離れた方向に動き始めて左側に出ることにします。 この制限の意味は、ゴーストが出口が2つしかないセルに入った場合、元のセルを選択することはできず、常に同じ方向に進むことです。

ただし、このルールには1つの例外があります。ゴーストがモードを追跡または散乱から他のモードに変更する場合、次のセルに移動するとすぐに方向を変更する必要があります。 この義務は、以前の移動方向に関する決定を取り消します。 これは、ゴーストがモードを変更したことをプレイヤーに効果的に通知する役割を果たします。これは、この動作が可能な唯一の時間だからです。 驚leモードを終了するとき、方向を変えないことに注意してください。 そのため、最初のレベルの後の各レベルでの1/60秒モードは、たとえターゲットがそこに残っていても、すべてのゴーストに動きの方向を再検討させる。 ちなみに、「家」のゴーストには同じ動作が特別に規定されているため、最初のモード切り替え時に家を出ていないゴーストは反対方向に出て行きます。 これにより、通常どおり左に移動し、すぐに方向を変えて右に移動します。



上の図は、迷路の簡略版を示しています。 意思決定が必要なセルは緑色でマークされています。

決定を下す必要がある場合、ゴーストは隣接するケージを選択し、ターゲットに直線で近づけます。 可能なモーションセルからターゲットまでの距離が測定され、最も近いセルが選択されます。 次の図では、2つのセルがターゲットから同じ距離にある場合、ゴーストは交差点で上になり、優先度に従って選択されます:上>左>下。 この選択方法では、他のオプションの方が間違いなく優れているので、正しい選択をすることはできません。



距離はターゲットまでの直線で選択されるため、直線の距離が短い場合にゴーストが間違った方向を選択する可能性がありますが、迷路の距離は大きくなる可能性があります。 以下に例を示します。直線で測定すると出口が左に出ますが、これは最良の選択ではありません。 これにより、目標を達成するために28個のセルが得られますが、右へのパスには8個しかかかりません。



最後の特定のケースは、図で黄色で示されているセルです。 具体的には、これらの交差点には追加の制限があります。ゴーストはこれらのセルからの道を選択できません。 それらを右または左に入力すると、ゴーストはさらに進むことができます(モードを変更するときの強制回転の場合を除く)。 ただし、この制限は恐怖モードでは機能しません。ゴーストは毎回ランダムに動作するためです。 また、モードを切り替えるときにゴーストが上から来た場合は、ゴーストが上がる可能性があります。 したがって、この制限は「通常の」動きでのみ機能し、例外はありません。 そのため、パックマンがこれらのセルの隣のゴーストから逃げた場合、ゴーストはより長い道のりを選択せざるを得ないので、彼は駆け上がって有利にスタートできます。

行動の個々の側面


「これがゲームの中心です。 私はすべての敵が自分の動きの独自の特定のキャラクターを持つようにしたかったので、彼らは同じ道に沿ってパックマンを追いかけません、それは疲れて面白くないでしょう」
-パックマンのクリエイター、岩谷徹



前述のように、ゴーストの唯一の違いは、追跡モードと後退モードでターゲットセルを選択する方法です。 まず、ゴーストが非常にシンプルなので、スキャッターモードでのゴーストの動作を確認してから、チェイスモードでの移動へのアプローチを見てみましょう。

実行モード


このモードでは、各ゴーストには、コーナー近くの迷路の境界の外側に事前定義されたターゲットセルがあります。 このモードが開始されると、各ゴーストは目標角度に向かって頭を回し、通常の経路探索アルゴリズムに従って動き始めます。 しかし、彼らの目標は利用できず、幽霊は止まることも向きを変えることもできないため、彼らは目標を達成しようとし始め、向きを変えて再びそれに戻ります。 その結果、各ゴーストのパスは、最終的にコーナー付近でループになります。 分散モードにとどまると、彼らは無限に回転し続けます。 実際には、後退モードは非常に短いため、ゴーストはコーナーに到達したり、ループ内で完全に一回転する時間すらありません。 以下の図は、各キャラクターのターゲットセルとそれらが記述するループを示しています。



レッドゴースト


レッドゴーストはゴーストハウスの外で始まり、通常、パックマンへの最短経路をほぼ瞬時に舗装するため、最初の脅威は脅威と見なされます。 彼の名前はブリンキーであり、ゲームは彼の性格を影として説明しています。 日本語では、彼女は「ストーカー」または「ハンター」と訳される追ikと呼ばれます。 追跡モードのBlinkyターゲットセルは現在のパックマンセルによって決定されるため、両方の言語の記述は正確です。 これは、近視眼的な意思決定のために非効率的な経路を選択するまで、Blinkyはほとんど常にパックマンを直接追跡することを意味します。



Blinkyのターゲット選択方法は非常にシンプルですが、他のゴーストにはない1つの機能があります。各レベルの2つの特定の座標(残りのポイントに依存)で、速度が5%増加し、散布モードの動作が変わります。 速度の変化の用語はレベルによって異なり、プレーヤーの進行度が上がるにつれて早くなります。

暴走モードでの変更は、速度の変更よりもおそらく重要です。これは、暴走モードでも、右上隅の固定セルではなく、Blinkyのターゲットセルが常にパックマンの位置になるためです。 これは実際、Blinkyを常に追跡モードに保ちますが、政権が変わったときは振り向く必要があります。 この拡張状態では、Blinkyは一般に「クルーズエルロイ」と呼ばれますが、この用語の起源は不明のようです。 偉大な全能のガイドであるパックマン・ドシエでさえ、私たちに答えを与えません。 ブリンキーがクルーズエルロイモードのときにパックマンが死亡した場合、他のゴーストがゴーストハウスを離れるまで一時的に通常の動作に戻ります。

ピンクゴースト


ピンクのゴーストはゴーストハウスから始まりますが、最初のレベルであっても常にすぐに離れます。 自我は「ピンキー」という名前で、彼の性格は「スピーディ」と表現されています。 これは、日本人の性格の説明である「待伏せ」と解釈される町伏とは大きく異なります。 ピンキーは他のゴーストよりも速く移動せず(クルーズエルロイモードのブリンクよりも遅く)、ターゲット検索システムは、パックマンが現在いる場所ではなく、パックマンが向かっている場所に移動しようとするため、日本語版はより真実です。 ピンキーのターゲットセルは、パックマンの現在の位置と方向に従って決定され、彼の前の4つの正方形の位置を選択します。 少なくともそれがデザインであり、パックマンが左、下、または右に向かったときに機能しました。 しかし、Pakmanがコードのオーバーフローエラーのために立ち上がったとき、PinkyのターゲットセルはPakmanの前の4つのセルと左の4つのセルに設定されていました。 プログラミングに慣れていない人を怖がらせたくはありませんが、このバグの技術的な詳細に興味がある場合、Don Hodgesは素晴らしい説明Googleのキャッシュへのリンク 、サーバーは負荷から随時であるため)を書き、ピンキーのターゲットを見つけるための元のコードと修正バージョン。





ピンキーのゴール選択方法の重要な結果の1つは、パックマンがチキンゲームで彼をしばしば倒す可能性があることです(ウィキペディアでは、2人のドライバーがラムに行き、そのうちの1人が最後の瞬間にターンするときのハリウッドの例を挙げています。)- 。
ターゲットセルはパックマンの前の4つのセルに設定されているため、パックマンが彼に向けられ、それらが4セル未満離れている場合、ターゲットピンキーセルは彼の後ろにあります。 これにより、ピンキーは目標を達成するためにバイパスします。 したがって、ピンキーが近づきすぎるとすぐに混乱するための一般的な戦略でした。 これはしばしば彼をまったく異なる方向に送りました。 (下の写真では明確です。-約transl。)



ブルーゴースト


インカという名前の幽霊は、最初のレベルで短時間家の中にとどまり、パックマンが少なくとも30ポイントを食べるまで追いかけません。 英語では、彼は「シャイ」、「シャイ」(恥ずかしがり屋)、日本語では「気まぐれ」(不機嫌、奇妙)と表現されています。 インカの行動を予測することは困難です。なぜなら、これはパックマンの位置だけでなく、彼の追跡で使用する唯一の幽霊だからです。 Incaは、packmanとBlinky(赤いゴースト)の両方の位置と方向を使用します。 インカのターゲティング方法は次のようなものです。パックマンの2セル前のセル(ほぼピンキー)を選択し、Blinkyからこのポイントまでのベクトルを想像して2倍にします。 ベクターの最後がターゲットのIncaセルになります。

したがって、インカの目標は、ブリンカーがパックマンに近づくまでどこでもかまいませんが、ブリンカーがなんとか近づいたら、インカも同じことをします。 「パックマンの前の2つのセル」の計算は、ピンキーとまったく同じオーバーフローエラーに苦しんでいることに注意してください。したがって、パックマンが上に移動すると、Blinkyからのベクトルの終わり(2倍になる前)は実際にはパックマンの左側の2タイルになります。



オレンジゴースト


オレンジ色のゴースト、クライド、最後のゴーストは家の中に最も長く残り、少なくとも3分の1のドットが食べられるまで消えません。 英語では、彼の身元は「看守」(o_O-解説付き翻訳)(ポケ)として説明されますが、日本語ではそれは音ぼけ-「無視するふり」です。 いつものように、日本語版はより正確です。クライドのターゲティング方法は、パックマンとはまったく関係なく、単に「仕事をしている」という印象を与えます。 クライドのユニークなターゲティング機能は、パックマンからの距離に応じて切り替わる2つのモードです。 クライドはターゲットセルを計算するたびに、まずパックマンまでの距離を計算します。 8セルを超える場合、Blinkyのように動作します。つまり、その目標はパックマン自身です。 ただし、パッカーまでの距離が8セル未満になるとすぐに、ターゲットセルは、迷路の左下隅から遠くない散乱モードになる場所に設定されます。

これら2つの方法の組み合わせにより、クライドは常にパックマンに向かう方向、または他の方向に方向を変えています。 上の図で、十字はモードが切り替わる場所を示しています。 そのため、パックマンがなんとかして自分の場所に留まると、Clydeはこのループを無限に回します。 プレイヤーが迷路の左下隅にいない限り、あなたのコーナーへの彼の後退のパスをブロックしなければ、クライドを避けることができるという保証があります。 packmanが左下隅から8セルにある限り、Clydeループは暴走モードの場合と同じ形状になります。







おわりに


ここまで読んでいただければ、パックマンのゴーストの動きのロジックをかなり完全に理解しているはずです。 おそらく彼らの行動を理解することが、優れたパックマンプレイヤーになるための最も重要なステップです。 私はパックマンが得意ではありませんでしたが、この記事を調べていくつかのことをテストしているうちに、以前よりも簡単にゴーストを回避できることがわかりました。 スキャターモードでは、幽霊が意識的にあなたを殺そうとしていないときに数秒あることを理解するなど、少しの知識でもゲームでは大いに役立ちます。

Pac-Manは、非常に興味深いゲームプレイを実現する巧妙に設計されたいくつかのルールに起因する、一見複雑な動作の驚くべき例であり、リリース後30年経ってもプレーヤーにプレイを強いています。

ソース


Pac-Man Dossier、Jamey Pittmanは、実際にあなた自身の研究に役立つ唯一の情報源です。 正直なところ、この記事の大部分はThe Pac-Man Dossierの言い換えです。 この記事を楽しんだ場合は、読むことを強くお勧めします。

パックマンのゴースト行動の分析と修正、ドンホッジス -ピンキーとインカの行動のバグの説明。

パックマン博物館

Source: https://habr.com/ru/post/J109406/


All Articles