このサイトは、只今WEB業界で活躍中のデザイナー、プログラマーの方々の情報を集めたweb統合情報サイトです。

Archives Details

パックマン 解析プログラム動画から見る 追跡アルゴリズム

AI・Bot・algorithm

2020.09.23

この記事は最終更新日から1年以上が経過しています。

どもです。

4連休はいかがお過ごしでしたか?

私ぐらいになると、4連休もあっという間よ。

と言うことで、いきなりですが、今から5年ほど前にこちらの動画がアップされ、皆さんテンションが上がったことかと思います。

いや。俺だけか。

なにはともあれ動画を見てもらえればと。

言わずと知れたパックマンの解析動画なのですが、よくわからない方も動画を見てみると「なんとなく解析しているなぁ」と雰囲気は掴めるかと思います。

こちらLua言語を用いて解析しているみたいなのですが、実際何をやっているか(表示しているのか)を見ていきたいと思います。

 

パックマン

まず、パックマンをざっと説明すると、1980年5月2日にナムコが発表されたアーケードゲームで、ドットイートゲームと言われるジャンルの一つで、ドットをすべて食べると1ステージクリアとなります。

また、パワーエサといわれるちょっと大きめのエサを食べると、通常は逃げて回避するしかないモンスターを一定時間食べる事が可能となります。

国内のみならず海外でもブームとなり大ヒットとなったナムコの代表作品のひとつです。

モンスターは4種類存在し、それぞれに特徴があるのもパックマンの面白さの一つでしょう。

そのモンスターの特徴は以下のとおりとなっております。

ニックネーム 縄張り 追跡パターン
オイカケ(アカベエ) 右上 粘着タイプ。パックマンの後ろをひたすら追いかける。
ピンク マチブセ(ピンキー) 左上 頭脳タイプ。パックマンのいる地点の少し前を目指し、先回りするように動く。
水色 キマグレ(アオスケ) 右下 気まぐれタイプ。パックマンを中心にして、オイカケ(赤)の点対称の位置を最短距離で目指して行動する。パックマンのいる通路がその最短距離と被っていた場合、襲われやすい。ただし後述の緊急回避通路やルールの影響でインキーが思うように動けず、明後日の方向に進んでしまう場合もある。
オレンジ オトボケ(グズタ) 左下 好き勝手タイプ。何も考えず自由に行動する。パックマンより遠いところにいるときは追いかけ、近いところにいるときは逃げる。ただし後述の緊急回避通路やルールの影響でクライドが思うように動けず、追いかけや待ち伏せをしてしまう場合もある。

引用:ウィキペディア(Wikipedia)

 

モンスター4種類それぞれ行動に特徴があるのが確認できます。

はてこれらのモンスターは、実際どのように動いているのでしょうか?

まず、基本としてモンスターはそれぞれ目標タイルが設定されています。

その目標タイルまでの距離の計算を行いルート選択し移動していきます。目標タイルまでの距離の計算は以下の様に計算されます。

モンスターは、それぞれ設定された目標タイルまでの距離の2乘が最小になるルートを選択し移動していくそうです。

もし、最小になるルートが複数存在する場合は、上、左、下の順を優先に選択される様です。

それでは、各モンスターに設定された目標タイルを見ていきたいと思います。

アカベエ

上記の表から追跡パターンを確認すると、「パックマンの後ろをひたすら追いかける。 」とあります。

こちら、アルゴリズム的には「現在、パックマンがいるタイル」が目標タイルとなり、移動して(追いかけて)きます。

ピンキー

ピンキーの特徴は「パックマンのいる地点の少し前を目指し、先回りするように動く。」とありますが、目標タイルは「パックマンの4個先のタイル」となっております。

 

アオスケ

アオスケの特徴は「パックマンを中心にして、オイカケ(赤)の点対称の位置を最短距離で目指して行動する」となっており、

目標タイルは「アカベエのいるタイルを起点に、パックマンの2個先にあるタイルまでのベクトルの2倍先のタイル」となっております。

 

グズタ

グズタの特徴は「何も考えず自由に行動する。パックマンより遠いところにいるときは追いかけ、近いところにいるときは逃げる。」とあります。

目標タイルはパックマンまでの距離で異なり、パックマンまでの距離が8より遠い場合は、「現在、パックマンがいるタイル」となり、8以下の場合は「縄張りモードの所定の位置」が目標タイルとなります。

 

モンスターが上記の行動をするのが、「追跡モード」と言われるときで、一定時間すぎるとモードの切り替わりが行われ、「縄張りモード」と言われるモードになります。

 

解析動画を見ていく

という事で、色々とアルゴリズムが分かって来たところで再び動画を再び見ていきましょう。

まず、右側が何を表示しているかを見ていきます。

各パラメータは以下の通り。

パラメータ名 概要
Stage 現在のステージ数
Ghost Mode 「追跡モード」「縄張りモード」などモードと残タイム
Fright Timer パワーエサ 残タイム
Dots Left 残ドット数
Fruits Target フルーツが出現するタイミングと表示時間
Cruise Elroy モンスターのスピード変化までのカウント
PacMan Speed パックマンの移動スピード – 現在値/最大値
Blinky Speed  アカベエの移動スピード – 現在値/最大値
Pinky Speed マチブセの移動スピード – 現在値/最大値
Inky Speed  アオスケの移動スピード – 現在値/最大値
Clyde Speed  グズタの移動スピード – 現在値/最大値

 

モード

それでは、ひとつずつ見ていきます。まずは、モードの切り替わりから。

 

ゲーム開始時のモードは、Scatterと表示されていて07:59の時間表記されているのが確認できます。

こちらは、約8秒間「縄張りモード」の状態から始まることとなります。

8秒後モード切り替えが行われ「追跡モード」に切り替わっているのが確認できます。

00:16

 

このように、2つのモードは一定時間ごとに切り替わるのが確認できたかと思います。

また、パックマンがパワーエサを食べた際は、モードの残タイムは止まったままとなります。

00:19

スピード

続いてスピードの切り替わりを見ていきます。

まずゲーム開始時時葉、パックマンが「11/16」モンスターたちが「 9/16」になっているのが確認できます。

モンスターのスピード変更されるのは、パックマンがパワーエサ食べた際の「イジケモンスター(イジケ)」と言われる状態、食べられた時中央に戻る時、クリア前の後半などでスピード変化されているのが確認できます。

イジケ&食べられる

パワーエサを食べたときモードは停止し、パックマンのスピードは若干上がり、各モンスターはイジケ状態になりスピードは 5となる。

また、中央に戻るときは32となって戻っていく。中央に戻ると、スピードは9となっています。

00:19

各モンスター追跡モードの動き

それでは、各モンスターの「追跡モード」の動きを見ていきます。

各モンスターから、目標タイルの位置とそこまでの線が伸びているのが確認出来るかと思います。

 

アカベエ

アカベエの追跡アルゴリズムは「現在、パックマンがいるタイル」となっております。

動画を見てみると、目標タイルがパックマンとなっており移動しているのが確認できます。

00:30

ピンキー

ピンキーの追跡アルゴリズムは「パックマンの4個先のタイル」となっています。

動画を見てみるとそこに設定されている様です。

00:31

アオスケ

アオスケの追跡アルゴリズムは「アカベエのいるタイルを起点に、パックマンの2個先にあるタイルまでのベクトルの2倍先のタイル」となっております。

動画を見てみると確かにその辺を目標タイルとして移動している感じはありますね。

00:36

 

 

グズタ

グズタのの追跡アルゴリズムはパックマンまでの距離が8より遠い場合は、「現在、パックマンがいるタイル」となり、8以下の場合は「縄張りモードの所定の位置」が目標タイルとなります。

1:12

動画ではハッキリと「8以下の場合は「縄張りモードの所定の位置」が目標タイルになる」と言うのが分かりずらかったのですが、近づくと確かに目標タイルが変化しているのが少しだけ確認できます。

最後辺りの接触しそうなシーンでは、一瞬縄張りモードの所定の位置が目標タイルになっているのが確認できました。

1:39

パックマンの周りに、上記の枠が出ている時が距離が8以下の場合ぽい。

この時は、目標タイルが外れていたりする。

 

縄張りモード

縄張りモードでの各モンスターの目標タイルは、アカベエが右上、ピンキーが左上、アオスケが右下、グズタが左下となっているのが動画でも確認できます。

各モンスターは留まったりしないので目標タイルを過ぎると、またそこを目指し移動していきます。

0:55

最後に

というわけで、解析動画を見ながらパックマンのモンスターのアルゴリズムを検証して来たのですが、実は記載しているアルゴリズムはアーケード版のパックマンで、解析動画の方はファミコン版となります。アーケード版のパックマンとファミコン版のパックマンで若干モンスターの動き等が異なっている様です。

こういったアルゴリズムでパックマンは動いて、ゲームを面白くさせている事が分かったのではないかと思います。

そのほかの解析動画もあると楽しいな。

ではでは、またまたぁ。

Comment

Related Article

5分で覚える Flutter Flameで作る Wave Function Collapse – 波動関数崩壊アルゴリズム

2023.12.20

TypeScriptでStateMachine

2021.05.16

パックマン 解析プログラム動画から見る 追跡アルゴリズム

2020.09.23

5分で覚えるAI Minimax(ミニマックス)法とalpha-beta法

2016.05.14

JavaScriptでユークリッド距離とピアソン相関係数

2016.05.03

LINE BOT API Trial で WordPress + LINE BOT の Web帳BOT を作ってみました。

2016.04.30

CATEGORY LIST

LATEST NEWS

Rust - Actix Web mongo ユーザー登録 JWT認証

Rust

2024.03.24

Rust - Actix Web JWT 認証認可 APIの作成

Rust

2024.02.25

Rust - Actix Web × JSON 静的ファイルをAPIで返却

Rust

2024.01.19

Rust - Actix Web × MongoDB環境をサクッと起動

Rust

2024.01.18

5分で学ぶ RustでWave Function Collapse (波動関数崩壊アルゴリズム)

Rust

2024.01.15

LLaMAモデル GGMLフォーマット(llama.cpp)をRustフレームワーク Leptosを用いて M1MacMiniでサクッと動かす。

Rust

2024.01.11

2024年 狙っているモバイルノートPC

tool

2024.01.07

MacOS XcodeにSDL2を追加

tool

2023.12.26

php 7.4にアップデート

PHP

2023.12.24

5分で覚える Flutter Flameで作る Wave Function Collapse - 波動関数崩壊アルゴリズム

AI・Bot・algorithm

2023.12.20

Flutter - Flameでゲーム作成 (キャラクターの移動)

Flutter

2023.07.23

Flutterで作る ChatGPT Prompt Manager

Flutter

2023.07.12

RANKING

Follow

SPONSOR

現在、掲載募集中です。



Links

About Us

WEBデザイナーの、WEBデザイナーによる、WEBデザイナーの為のサイト。「みんなで書こう!」と仲間を募ってみたが、結局書くのは自分だけとなってしまいました。日々のメモを綴っていきます。

Entry Profile

Graphical FrontEnd Engineer
- Daisuke Takayama

MAD CITY 北九州市で生まれ育つ。20代はバンド活動に明け暮れ、ふと「webデザイナーになりたい。」と思い、デジタルハリウッド福岡校入学。卒業後、数々の賞を受賞、web業界をざわつかせる。
現在、主に、ゲーム制作中心に港区六本木界隈で活動中。

FOLLOW US