今回はステージクリアの判定を実装します。

ステージクリアの判定方法

プレイヤーが移動する処理がおこなわれるとき、MovePlayerメソッドが実行されますが、その最後にAddPointsIfNeedメソッドが呼び出されます。AddPointsIfNeedメソッドでは点数の加算とステージクリア判定をおこないます。

ステージクリア判定はフィールド変数として宣言されているIsVisitがすべてtrueになっているかどうかでよいのではないかと安易に考えていましたが、実際には違いました。通過した部分を別の色の矩形で塗りつぶしていますが、連続した領域が塗りつぶされていても、IsVisitのなかにはfalseの部分がある場合があるのです(これに気づくのにけっこう時間がかかった)。

そこでIsVisitのある要素がtrueであればそこから離れている距離がCharactorSize / ExpansionRate以内であればIsVisitがfalseであってもtrueとみなします。

Map[y, x] において POSITION_NONE ではないすべてがIsVisits[y, x] == true、またはIsVisits[y, x]がfalseでもIsVisitSurroundingPosittions(x, y)である場合はステージクリアと判断します。

AddPointsIfNeedメソッドを示します。

IsVisits[y, x]がtrueになるたびに加点していては点数が大きくなりすぎるので、4回に1回の割合で10点を加算します。そして先述のCheckStageClearメソッドでステージクリアかどうか調べてステージクリアの場合はOnStageClearメソッド(後述)を呼び出して次のステージに移ります。

ステージクリア後の処理

OnStageClearメソッドはタイマーをいったん停止してステージクリアの効果音を鳴らし、次のステージに移動するためのToNextStageメソッド(後述)を呼び出します。

次のステージに移るための処理をおこなうToNextStageメソッドを示します。

ゲームとして完成させる

これまで作成してきたクラッシュローラーっぽいゲームを完成させます。

プレイヤーと敵を描画する

まずプレイヤーと敵が色つきの矩形では見た目がイマイチなのでイメージを表示させます。素材は以下を使います。

入手元

「やさぐれひよこ素材」置き場
ぴぽや倉庫

プレイヤーと敵を描画する処理を書き換えます。

残機を表示する

残機を表示するためのプロパティを作成します。

ゲームスタートとゲームオーバー時の処理

ゲームスタートとゲームオーバー時の処理を追加します。Sキーを押したらゲームスタート、残機が0になったらゲームオーバーの処理をおこないます。

SキーがおされたらGameStartメソッドを呼び出せるようにします。

ミスをしたときは残機を1減らして0になったらゲームオーバー処理をおこないます。

ローラーから敵が逃げる処理

ローラーで敵に反撃するときの処理ですが、ある程度繰り返したらローラーを使おうとすると敵が逃げる機能を追加します。

そのためにpublicに変更しないといけないものがあるので、フィールド変数をプロパティに変更(getはできるがsetはできない)します。