餌を表示する

これまではフィールドに餌がありませんでしたが、今回は餌を食べさせます。まずは餌を表示させましょう。

各セルを調べて必要であればドットを表示させます。はじめから餌がない場所やすでにパックマンが通過した場所であれば表示させる必要はありません。

表示させる場合はセルの真ん中に直径4ピクセルで表示させます。

IsShowDotメソッド

IsShowDotメソッドは餌を表示するかどうかを判定するメソッドです。はじめから餌が存在しない場所やパックマンが通過した場所には餌を表示させません。

これはパックマンが通過したセルかどうかがわかるようにするために作成した二元配列です。

bool[,] passedPacman = new bool[FIELD_ROW, FIELD_COLUM];

最初とステージクリア時にはすべてfalseにしておきます。

パックマンが通過したらフラグをセットします。

パワー餌の表示

それから餌のなかにはパワー餌があり、これを食べるとこれまで自分を追いかけていたモンスターを食べることができるようになります。

パワー餌を表示させるために先ほど作成したShowDotメソッドに処理を追加します。

得点の表示

餌を食べたら点数が増えます。得点を表示させてみましょう。

ゲーム開始のためのメニューを追加しました。Label1の位置に得点が表示されます。得点が増えるのはパックマンが移動してそこに餌があった場合です。(他にもモンスターを食べたとき、デザートを食べたときああるが、ここでは省略)

これでよさそうですが、ダメです。最初から餌が置かれていない場所があり、そこをはじめて通るときも得点になってしまいます。

「餌が置かれていない場所は決まっているので、その部分であれば点数を加算しない」というのはどうでしょうか?

はじめから餌が存在しない場所は以下の部分です。

そこで最初から餌が置かれていない場所を通過した場合は点数を加算しないようにしています。

それから通常の餌を食べたときとパワー餌を食べたときではこのあとの処理が違ってくるので区別して処理をしています。

IsFoodlesBeginningCellメソッドの作成とOnPacmanMovedメソッドの変更

IsFoodlesBeginningCellメソッドをつかってIsShowDotメソッドも書き直してしまいましょう。

ステージクリアの判定

餌を全部食べてしまったらステージクリアとなるわけですが、餌をすべて食べ尽くしてしまったことはどうやって判定すればいいのでしょうか?

DrawMazeメソッドのなかでShowDotが一度も実行されない場合と考えました。

だったらこれでいいのではないでしょうか?