0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

パックマンのゴーストAIをJavaScriptで実装してみた(ターゲットタイル方式)

0
Posted at

はじめに

初代『パックマン』のゴーストは、迷路全体を探索しているわけではありません。ターゲットタイルの決め方が4匹で違うだけで、追跡・待ち伏せ・挟み撃ち・撤退という性格の違いが生まれます。これをHTML + Canvasの単一ファイルで実装しました。

ゴーストから目標タイルへの線を表示でき、原作の「上向き時のPinky/Inkyのずれ」もON/OFFできます。

ソース: https://github.com/kumi0708/pacman-ghost-ai

ブラウザですぐ遊べます: https://kumi0708.github.io/pacman-ghost-ai/

ゲーム画面(破線はゴーストから目標タイルへの線)

4匹のターゲット(Chaseモード)

・Blinky(赤): パックマンの現在タイル

・Pinky(ピンク): パックマンの4タイル先

・Inky(水色): パックマン2タイル先とBlinkyを結ぶベクトルを2倍した点

・Clyde(橙): 8タイル以上離れていればパックマン、未満なら自分のScatter隅

進路選択は局所的な判断

交差点(タイル中心)に着くたびに、次の候補方向を比較します。

①壁・Uターンは除外 ②隣接タイルから目標までの距離の二乗が最小の方向を選ぶ ③同距離なら 上 → 左 → 下 → 右

A*などは使っていません。この単純さが「賢そうで完璧ではない」動きになります。

モード切替

Scatter 7s → Chase 20s → Scatter 7s → Chase 20s → Scatter 5s → Chase 20s → Scatter 5s → Chase永続。切替時は全ゴーストが反転します。パワーエサ中は分岐でランダムに進み、速度が落ちます。

操作

矢印キー / WASD / スワイプ、Enterで開始、Pで一時停止、Gでターゲット表示、Bで原作の上向きバグ再現。

参考

The Pac-Man Dossier: https://www.gamedeveloper.com/design/the-pac-man-dossier

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?