前回 ASP.NET Core版 戦車対戦ゲームをつくる(4)の続きです。

サーバーサイドからデータを受信したときの処理

ゲームスタートのボタンが押されたら接続を開始します。

接続に成功時の処理

接続に成功したらIDを表示させ、切断されたらその旨を表示させます。

ゲームが開始されたら現在存在する破壊できる壁と破壊できない壁の座標がカンマ区切りの文字列でおくられてくるので、これを配列に変換して前述のAddWalls1関数とAddWalls2関数でsceneに追加します。

キー操作時の処理

キーが押されたり離されたりしたらサーバーサイドにデータを送信します。

更新用のデータを受信したときの処理

サーバーサイドから更新処理のためのデータが送られるまえにReceiveStartUpdateが送られてくるので、これを受信したら更新用のデータを格納する配列を初期化しておきます。

サーバーサイドから戦車の座標や砲弾の座標、非表示にする壁の座標などが送信された場合は、これをグローバル変数と配列に格納しておきます。

ReceiveEndUpdateを受信したら前述のUpdate関数を呼び出します。するとこれまでに受信し保存されているデータを利用して更新処理がおこなわれます。

壁が破壊されたときの処理

ReceiveBrokenWallを受信した場合は、壁が破壊されたということなのでWall.Break関数を呼び出して壁をsceneから取り除き、爆発を発生させます。

戦車が撃破されたときの処理

ReceiveDefeatedを受信した場合は戦車が撃破されたときなので、どのプレイヤーがどのプレイヤーの戦車を撃破したのかを調べます。そして自機が敵を撃破した場合と敵によって自機が撃破された場合はその結果を3秒間表示させます。そして撃破された戦車を地下に移動させて非表示にして爆発を発生させます。

砲弾の発射と命中時の処理

砲弾を発射したりその砲弾が命中したときはReceiveShotやReceiveBombを受信することになります。この場合はチェックボックスの状態を調べて必要であれば効果音を鳴らします。

ゲームオーバー時の処理

ゲームオーバーのときはゲームオーバーであることを表示させるためにUpdate関数を呼び出します。その2秒後に別のページ(スコアランキングのページ)にリダイレクトします。

ゲームに参加できないときの処理

すでにユーザーの上限に達していてゲームに参加できない場合は接続を拒否された旨を表示するページにリダイレクトさせます。

スコアランキングと接続拒否時にリダイレクトされるページの表示

スコアランキングのページを表示させる処理を示します。

スコアランキングは同じディレクトリのhi-scoreで表示させます。

hi-score.cshtmlの内容は以下のとおりです。

Pages\Tank\hi-score.cshtml

/css/hiscore.cssの内容は クライアントサイドの処理 ASP.NET Coreで3Dっぽいカーレースをつくる(4)の最後のほうを参照してください。

ゲームの参加を拒否されたときにリダイレクトされるページのcshtmlを示します。

Pages\Tank\deny-new-player.cshtml