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

前回はPacmanクラスをつくりましたが、今回はMonsterクラスをつくります。

モンスターはパックマンがパワー餌を食べたとき以外は基本的にバックすることはありません。進行方向を決めておき、交差点などに差し掛かったときはランダムで方向を変更させます。

そこでモンスターの現在の座標から方向転換しなければならない位置にいるのか?そのとき方向転換できる方向はどれかを求める処理が必要です。IsCrossPosition関数(後述)はモンスターが交差点やT字路、L字路にいるかどうかを判定するものであり、GetDirectsMonsterMove関数はそのときに進行可能な方向の配列を取得する関数です。

またモンスターは赤色のものを除き、巣のなかにいます。巣のなかでは上下に往復運動を繰り返し、適切な時間になったら巣からでてきます。

IsMonsterInHome関数でモンスターは巣の中にいるのかどうか調べて、その場合はMonsterMoveInHome関数で上下に移動させています。StandbyCountという変数がありますが、これは巣の中から出てくるまでの時間です。StandbyCount が0になったら巣の中央に移動させ巣の外に移動させます。

それからパックマンがパワー餌を食べると、モンスターはイジケ状態になり、もと来た道を逆走します。このときはReverseMove 関数でモンスターの現在の進行方向の逆方向に移動できるかを調べて移動できる場合は逆走させます。モンスターの位置から逆走できない場合はなにもしていません。このあたりはちょっと適当な処理になっています。

モンスターの描画ですが、4つのモンスターに0,1,2,3のIDをつけて赤、ピンク、ライトブルー、オレンジのイメージを取得してこれをつかって描画します。イジケ状態のときは青色になりパワー餌の効果が切れる時間がせまると青、白と交互に色を変えます。

GoHome関数はパックマンに食われたときに巣のなかに移動させるためのものです。実際のパックマンではモンスターは目玉だけになって巣に戻りますが、いまは一瞬で巣のなかに瞬間移動する仕様になっています。この部分は改良の余地ありです。

ではMonsterクラスを示します。