撃退されたモンスターを巣に返す

パックマンを実際にプレイした方であればわかると思いますが、パワー餌を食べたパックマンに食われたモンスターは目玉だけになって巣に戻り、そこでモンスターとして復元されます。

これまでのプログラムでは元の場所に一瞬で戻ってしまうため、本家のパックマンらしくありません。そこで撃退されたモンスターを巣に返す処理をおこないます。

問題は巣に帰るルートをどうやって求めるかです。

どうやっていいかわからないので以下のようにして求めました。

各セルから最短距離で巣に戻ることができるルートをセルのリストで表しました。このあたりはアルゴリズムの勉強をすればもっとスマートにできるのかもしれませんが・・・

以下のようなメソッドを大量に作成しました。

これは取得したセルの位置を管理するためのクラスです。

これがモンスターが巣に帰るために通過するセルを取得するためのクラスとメソッドです。

これはパックマンがモンスターを食べたときに呼び出されるメソッドです。モンスターを巣に戻すためのMonsterGoHomeメソッドが追加されました。

これが問題のMonsterGoHomeメソッドです。モンスターが巣に戻って再生されるまでのあいだ、フラグでモンスターが描画されないようにしています。

CellToMonsterHomeクラスのGetRootメソッドでモンスターの帰り道が取得できたらモンスターを目玉だけにして巣に戻します。

そして巣のなかに戻ったら巣の中央(すぐに外に出られる位置)にモンスターをセットしてパックマンを追跡させます。

これはモンスターを描画するメソッドです。パックマンに食べられて巣に戻るモンスターは目玉だけ描画させます。