今回はクライアントサイドの処理をおこないます。

cshtmlファイルの作成

PagesフォルダのなかにCrashRoller.cshtmlという名前のファイルを作成して以下のように書きます。ただしGlobal.BaseUrlはこのようになっています。

Pages\Shared\_Layout_none.cshtml

Pages\CrashRoller.cshtml

JavaScriptによる描画処理

wwwroot\crash-roller\game-map.jsは描画に必要な二次元配列です。ここからダウンロード可能です。

ではJavaScriptを示します。

通路の状態を示す列挙体(JavaScriptには列挙体はないけどそのように機能するもの)を示します。

wwwroot\crash-roller\game.js

グローバル変数

次にグローバル変数を示します。

wwwroot\crash-roller\game.js

初期化

最初に表示させるキャンバスの幅と高さを設定します。

wwwroot\crash-roller\game.js

1秒おきにディスプレイのサイズが変更されているかを調べて必要であればキャンバスのサイズを変更します。キャンバスのサイズを変更したら描画処理をやり直す必要があります。

ページが読み込まれたら上記のGetCanvasSize関数でキャンバスのサイズを設定して効果音を再生できるように準備をします。

通路はプレイヤーが通過した部分とそうでない部分は色を変えます。プレイヤーが通過した部分なのかそうでない部分なのかは二次元配列isVisits で管理します。

効果音とBGMを初期化する処理を示します。効果音やBGMが再生されたらisPlayingRollerSoundとisPlayingBgmをfalseにして二重に再生されるのを防ぎます。

ボリュームを設定するための関数を示します。

キー操作への対応

矢印キーが押されたらサーバサイドに送信します。またフラグをセットして離されたらクリアすることでキーを押しっぱなしにしているときに連続して送信されるのを防ぎます。

通路の描画

DrawClear関数はキャンバス全体を黒で塗りつぶします。

GetVisitedColor関数はすでに通過した部分を塗りつぶすときの色を取得します。色はステージが進行するにつれて緑、ピンク、オレンジ、緑とかわっていきます。

DrawRoad関数は通路を描画するための関数です。

DrawBridge関数は橋を描画する関数です。

ReDrawBridgeEdgeIfNeed関数は橋を描画することで通過した部分が白に戻ってしまったときに塗り直すためのものです。

プレイヤーと敵の描画

DrawPlayer関数とDrawEnemies関数はプレイヤーと敵を描画するための関数です。

橋を描画するとプレイヤーと敵が下に隠れてしまいます。もし橋の上にいるのであればもう一度描画しなおさなければなりません。IsNeedReDrawは再描画が必要かどうかを調べます。

必要であればプレイヤーと敵を再描画します。

ローラーの描画

ローラーを描画するための関数を示します。ローラーが押されている向きに応じて適切なイメージを描画させます。

スコア・残機の描画

スコアを示す文字列を描画するための関数を示します。また敵を倒したときはゲームが中断しているあいだ(2秒間)加算される点数を表示させます。

残機を示す文字列を描画する関数を示します。

DrawGameOverIfNeed関数はプレイ中ではないときは’GAME OVER’の文字を表示させます。

描画処理の全体

描画処理をおこなう関数を示します。この関数は0.01秒おきに呼び出されます。

BGMと効果音の再生

BGMと効果音に関する処理をおこないます。BGMとローラーを押しているときに再生される効果音を再生する必要がある場合は再生します。

BGMの再生開始と終了

BGMを開始し終了するための関数を示します。この関数はゲーム中でありBGMの再生が完全に終了したときに新たにBGMの再生を開始します。

ボリュームの調整

ボリュームを上げたり下げたりする関数を示します。

ローラー使用時の効果音の再生

プレイヤーがローラーを押しているときの効果音を再生する関数を示します。

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

ゲームオーバーになったときにスコアランキングに記録するための処理を示します。サーバサイドにプレイヤー名を送信します。スコアはサーバーサイドで管理しているのであとはサーバサイドにおいて処理がおこなわれます。

サーバーサイドからの通知の処理

サーバーサイドに接続する処理と接続成功を受信したときの処理を示します。ページの下部に接続した時刻とコネクションIDを表示させます。

ゲーム開始時

ゲームを開始させたいときに呼び出す関数を示します。サーバーサイドのGameStart関数を呼び出します。

キャラクタの座標の変化時の処理

サーバーサイドから送られてきたプレイヤーの座標を受信したときの処理を示します。受信した変数の値をグローバル変数に格納し、前述のDraw関数で描画できるようにします。

敵の座標を受信したときの処理を示します。やはり描画するときに必要になるデータをグローバル変数に格納します。

ローラーの座標を受信したときの処理を示します。やはり描画するときに必要になるデータをグローバル変数に格納します。

敵を倒したときの処理

敵を倒したことを受信したときの処理を示します。この場合は効果音を鳴らして追加される点数を描画します。また追加される点数を描画する必要がなくなったときもこの処理がおこなわれます。そのときはpositionHitEmemyXとpositionHitEmemyYに0が格納されます。

ステージクリア時の処理

ステージクリアしたことを受信したときにおこなわれる処理を示します。ステージクリア時はすべての通路を塗り残しがないように塗りつぶすためにisVisits[y][x]をすべてtrueにします。また新しいステージが開始されたら塗りつぶされている情報をすべてクリアしてすべて白で描画されるようにします。

ミス時の処理

ミスをしたらReceiveDeadPlayer関数が呼び出されます。この場合は効果音を鳴らします。

表示用のスコアと残機数を受信したときの処理

表示用のスコアと残機数を受信したときの処理を示します。

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

ゲームスタートとゲームオーバーの処理が行なわれたことを受信したときの処理を示します。

ゲーム開始時は通路の塗りつぶされている部分をクリアしてすべて白で描画されるようにします。ゲームオーバー時は効果音鳴らしてBGMの再生を停止します。