ウサギの糞で部屋を埋め尽くすゲームをつくる(1)の続きです。今回はGameクラスを実装してゲームを完成させます。

Gameクラスの定義

Game全体の進行を管理するためのGameクラスを定義します。

コンストラクタ

最初にコンストラクタを示します。

ゲームの開始処理

ゲームを開始するための処理を示します。

スコア、ステージ数、残機数、飼い主さんの視界を初期状態に戻し、マスの状態を初期化しています。そのあとプレイ中であることを示すIsPlayingフラグをtrueにして更新処理を開始します。

移動処理

CanMove関数は第一、第二引数で指定された座標から第三引数で指定された方向に移動可能かどうかを調べるためのものです。

GetCellByPosition関数は引数で渡された座標に対応するCellオブジェクトを返します。方向転換可能な位置でないなら null を返します。

GetNearestCellByPosition関数は引数で渡された座標の近くにあるCellオブジェクトを返します(GetCellByPosition関数と違って null は返さない)。

SetPlayerDirct関数はプレイヤーの移動方向を変更するためのものです。じっさいにプレイヤーの移動方向が変更されるのは移動変更可能点に到達したときです。

MovePlayer関数はプレイヤーを移動させる処理をおこないます。

糞をする

糞をするときは近くのマスを取得してそこにします。そのマスに糞が置かれていないときはスコアを加算します。

飼い主さんの移動

敵役の飼い主さんを移動させる処理をおこないます。

飼い主さんは一番強い臭いがあるマスにむけて移動します。またすでに飼い主さんが一番強い臭いがあるマスにいる場合はそのつぎに強い臭いがあるマスにむけて移動します。臭いがあるマスが存在しない場合はプレイヤーに向かって移動します。

当たり判定

当たり判定の処理を示します。

プレイヤーと飼い主さんの距離と飼い主さんの視界を数値で表示します。飼い主さんの視界のなかにプレイヤーが入った場合はミスとなります。

ミス時の処理

ミス時はStopingUpdateフラグをセットしてプレイヤーと飼い主さんの移動処理を停止させます。そして残機を減らして 0 でない場合は 2秒後に各キャラクタの位置をリセットしてゲームを再開します。

ゲームオーバー時の処理

ゲームオーバー時の処理を示します。

ステージクリア時の処理

ステージクリア時の処理を示します。

すべてのマスに糞がセットされているのであればステージクリアです。ステージクリアの場合はボーナスポイントを追加し、2 秒後にすべてのキャラクタとマスを初期化してゲームを再開します。このときに飼い主さんの初期の視界を少しだけ広げて難易度を上げます。

更新処理と描画処理

更新処理を示します。最後の更新から 16 ms 以上経過している場合は各キャラクタの座標を更新します。その後当たり判定とステージクリア判定をおこないます。そのさい飼い主さんの視界を少しずつ広げていきます(永久に逃げ続けられないようにする)。

描画処理をしめします。

プレイヤーと飼い主さんを描画するとともにスコアと残機数を表示します。

スコアランキングへの登録

スコアランキングにプレイヤー名とスコアを登録する処理を示します。

サーバー側の処理とスコアランキングを表示させる処理はゲーム開始以降の処理 鳩でもわかるXORパズルをつくる(2)と同じなので省略します。

ページが読み込まれたときの処理

ページが読み込まれたときの処理を示します。

Gameオブジェクトを生成してキー操作やボタンの押下に対応できるようにイベントリスナを追加します。そのあと更新処理を開始します。

レンジスライダーでボリューム調整ができるようにする処理はいつもどおりです。