今回はゲームオーバー処理、万引きがバレて警察署に連行されるシーンの処理を実装します。

警備員が少年を捕まえる処理

店内で万引きをしているときはTimer.TickイベントがおきるたびにDrawStoreField1メソッドが呼び出されます。その最後の部分を再掲します。

見つかったかどうかの判定

dangerXは警備員から少年の姿がみえるかもしれないX座標です。双方のX座標がdangerXのどれかと一致していてその差の絶対値が4に満たない場合、少年は警備員にみつかったことになります。するとシーンはScene.Store2に変更されます。このシーンでは警備員が少年がいる位置まで下がってきて「コラ!」といって少年を捕まえます。

シーンがScene.Store2のときはTimer.TickイベントがおきるたびにDrawStoreField2メソッドが呼び出されます。

警備員を下に移動させる

DrawStoreField2メソッドの処理を示します。引数つきのGetStringDrawKメソッドは引数に警備員を表示させたいY座標を指定します。FieldStringに取得された文字が格納されますが、少年と警備員の足に半角文字を使用しているのでそのあと半角文字に置換しています。

警備員が下に移動するときはTimer.Intervalを150にセットし、移動するたびに効果音を出します。そして警備員が少年よりちょっと上まで移動してきたら「コラ!」の文字を表示させ、別の効果音を出します。ここからKKoraUpdateCountをインクリメントしていき5を超えたらシーンをScene.Policeに変更します。

警備員を下に移動させる引数つきのGetStringDrawKメソッドを示します。

これは効果音を出すための処理です。短い間隔で効果音を出そうとすると実際に音がでる前に次の音を出そうとしてなにも音がでないのでその都度WMPLib.WindowsMediaPlayerオブジェクトを生成しています。「コラ!」というときに再生される効果音は1回だけなのですでにフィールド変数として宣言されているオブジェクトをつかって効果音を再生します。

警察署に連行されるゲームオーバー時の処理

シーンがScene.PoliceのときにTimer.Tickイベントが発生したらDrawPoliceメソッドが実行されます。

GetGameOverStringメソッドは以下のようになっています。ここではスコアを表示させる文字列を取得するとともに警備員によって警察署に連行される少年のアスキーアートと歩く音をならし、この関数を一定回数表示したら少年を土下座させたり、「PUSH S KEY GAME START!」の文字を表示させます。

GetGameOverString1メソッドは少年が連行される様子を示す文字列を取得します。GetGameOverString1メソッドが呼び出されるたびに少年と警備員の表示位置を左へ移動させます。

少年を土下座させる

GetGameOverString2メソッドは少年を土下座させる文字列を取得する処理をおこなっています。

ゲームオーバー時の効果音を鳴らすメソッドです。

ゲームに再挑戦できるようにする

ゲームオーバーになって一定時間が経過(GameOverUpdateCount >= 32)するともう一度ゲームをすることができるようにします。Sキーを押すとオープニングのシーンに戻り、ゲームが初期化(スコアのリセット、その他フィールド変数の初期化など)され、ゲームが再開されます。