はじめに
初代『パックマン』のゴーストは、迷路全体を探索しているわけではありません。ターゲットタイルの決め方が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
