モンスターを移動させる

今回はモンスターの表示と移動をやります。

モンスターは4体あります。本当のパックマンには4体それぞれに個性があり、後ろを追う傾向が強かったり、待ち伏せ的な動き方をする傾向が強いものがあるのですが、そこまで厳密につくらず乱数で適当に動いてもらいます。

モンスターの位置の初期化

最初にモンスターが描画される位置を決める必要があります。原作では最初から巣の外にいてパックマンを追いかけるモンスターは1体だけなのですが、ここでは簡単にするために全部巣の外に配置しています。

MoveMonstarメソッド

次にそれぞれのモンスターを動かすMoveMonstarメソッドを示します。単にランダムに動くと似たような位置で行ったり来たりするだけになるので、モンスターは基本的にまっすぐに動き、途中で折り返すような動き方はしないことにします。曲がることができる場所では曲がるかどうか乱数をつかって決めます。

GetMonstarMoveDirectメソッドは通路の状態を調べてどの方向であれば進行可能かを調べます。また途中で折り返す動きはしないので北へ向かっているときは南には行けません。現在の進行方向と真逆のものは除いています。あとは乱数で方向を決めます。

GetMonstarMoveDirectメソッド

GetMonstarMoveDirectメソッドは、パックマンを移動させるときにも使用したGetStringMazeCellメソッドをつかってモンスターがいるセルの状態を調べて進行可能な方向を取得します。

MonstarMoveDirectメソッド

動かす方向が決まったらその方向にモンスターを動かします。

モンスターを表示させる

モンスターを表示させるにはInvalidateメソッドを呼ぶことでDrawMonsterメソッドを実行させることで実現します。

まず表示させるモンスターですが、mame icons 03 OKINIIRIで公開しているものを使用しました。

アイコンタイプです。これをリソースとして追加します。

DrawMonsterメソッドは以下のようになっています。それぞれのモンスターを赤、ピンク、青、オレンジ色で表示させます。

MoveMonstarメソッドと呼び出すことでこのようなモンスターを動かす処理をおこなうことができるのですが、この処理はTimer.Tickイベントでおこなわれます。