動作確認はこちらからどうぞ。

これまでは撃退されたモンスターをただちに巣に戻していましたが、原作のパックマンでは撃退されたモンスターは目玉だけになって通路を通って巣に戻ります。今回はこれを再現します。

パックマンに撃退されたらMonsterクラスのGoHome関数が呼ばれるのですが、そのとき新しく作成したメンバー変数IsGoingHomeをtrueにします。

それからMove関数も少し変更します。IsGoingHomeがtrueのときはBeginGoToHome関数とMoveGoToHome関数(後述)が呼び出されるようにします。

次に問題のBeginGoToHome関数ですが、巣の方向を調べる必要があるのと巣まで戻るためには早く移動させたいので0.2移動させます。この場合、普通に移動させると0.2とか0.4ならいいのですが、0.1とか0.3の場合、交差点をオーバーランしてしまうので最初に小数点以下第一位が偶数になるようにしています。

MoveGoToHome関数の処理は角にいるかどうか調べてその場合は適切な方向に方向転換しています。またY座標が10でX座標が12.4か12.6の場合は巣の前に到着したということなのでそのまま下に移動させています。

それから描画に関する処理も修正が必要です。IsGoingHomeがtrueのときは目玉だけ表示させます。

また当たり判定ですが、monster.IsGoingHomeがtrueなら無視しないとおかしなことになります。それからモンスターを撃退したらすぐにmonster.IsGoingHome = trueにしておきます。

それからモンスターを撃退したときに得点を表示させます。showMonsterPointフラグがtrueのあいだモンスターを撃退することで得た点数を表示させます。