ASP.NET coreで対戦型『殺しの七並べ』をつくる(3)の続きです。今回はクライアントサイドの処理を定義します。

cshtml部分

cshtml部分を示します。PC用とスマホ用を同じページで作ろうとしたのですが、それだとカードが小さくなりすぎるので、PC用はカードが大きめに表示されるようにしました。

Pages\kill-seven\pc.cshtml

wwwroot\kill-seven\style.css

グローバル変数と定数

つぎにJavaScript部分を示します。最初にグローバル変数と定数を示します。

wwwroot\kill-seven\app.js

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

ページが読み込まれたときの処理を示します。canvasのサイズを調整して背景を緑で塗りつぶします。そのあと各カードのイメージを配列に格納し、レンジスライダーでボリュームの調整ができるようにします。ASP.NET SignalR ハブへ接続を試みます。

カードの絵柄は素材サイトからダウンロードした1枚の画像ファイルにすべてのカードのデザインが描かれているものを使います。ここから必要な部分をきりとってイメージを配列cardImagesのなかに格納します。

レンジスライダーでボリュームの調整ができるようにするための処理を示します。

ASP.NET SignalRで接続したときの処理

ASP.NET SignalRでサーバーと接続できたときにおこなわれる処理を示します。この場合はASP.NET SignalRでサーバーと接続時に発行される一意の値をグローバル変数に格納します。

もし途中で通信が切れてしまったら切れてしまった旨を表示します。

エントリー時の処理

ユーザーがエントリーをしようとした時の処理を示します。

プレイヤー名を入力しないでエントリーボタンを押下したときはプレイヤー名を設定するようにアラートを表示させます。それ以外の時はエントリーの処理をおこないます。

エントリーの処理が正常におこなわれたときはサーバーサイドから’SucceedEntryToClient’が送信されるので、この場合はエントリーの処理が完了した旨を表示します。そして割り当てられたプレイヤーとしてのNumberをグローバル変数に格納し、エントリーボタンやプレイヤー名設定用のテキストボックスなどを非表示にします。

エントリーの処理が正常におこなわれなかったときはサーバーサイドから’FailuredEntryToClient’が送信されます。この場合はエントリーの処理がおこなわれなかった旨を表示します。

ゲーム開始時の処理

ゲームが開始されたときは’GameStartedToClient’が送信されるので、この場合はゲーム開始の効果音を再生します。

ゲーム中の処理

ゲーム開始までのカウントダウンやプレイヤーが手番のときのカウントダウン、プレイヤーがもつカードの状態が変化した場合はサーバーサイドから’CardsToClient’が送信されます。この場合は送られてきたjsonから適切な表示と描画をおこないます。

ナビゲーション表示

ゲーム開始前とゲーム時にナビゲーションを表示する処理を示します。

ゲーム開始前は開始までの時間の表示と秒読みの音声の再生、ゲーム中はユーザーの手番のときは残り時間の表示と秒読み音声の再生をおこないます。他のプレイヤーの手番のときは誰の手番なのかを表示します。

卓上のカードを描画する処理

卓上に出されたカードを描画する処理を示します。殺されたカードにはそのうえに×も描画します。

カードのスートと番号からそのカードをどの座標に描画するのかを取得する処理を示します。PC用のページとスマホ用のページでは座標が異なるので処理を分けています。

カードの上に×印を描画する処理を示します。これもPC用のページとスマホ用のページでは描画する座標が異なるので処理を分けています。

プレイヤー情報の表示

canvasの下にプレイヤー名、残り枚数、殺されたカードの枚数を表示する処理をしめします。

プレイヤーが所持するカードの表示

プレイヤーが所持するカードをcanvasの下に表示する処理を示します。カードはbutton要素で表示します。手番のときはクリックするとサーバーサイドに”PutOutCard”を送信(=そのカードを出す処理が)できるようにします。showPlayerCards関数はほぼ1秒おきに実行されますが、表示するカードが前回の処理時と同じ場合はなにもしないようにしています。

手持ちのカードをボタンとして表示する処理を示します。

着手完了時の処理

カードを出す処理がおこなわれたときは、それが自分が出したカードの場合は’PutCardToClient’が、それ以外のプレイヤーが出したときは’OthersPutCardToClient’が送信されます。

この場合はどちらも効果音を鳴らします。自分の手番でカードを出す処理が正常におこなわれたときは、それ以上クリックしてもカードを出す処理がおこなわれないように表示されているカードはいったん消去します。

着手拒否時の処理

出せないカードを出そうとした場合は拒否されたことがわかるように効果音を鳴らします。

パス成立時の処理

パスした場合も効果音を鳴らします。またこの場合もそれ以降はクリックしてもカードを出す処理がおこなわれないように表示されているカードはいったん消去します。

カードが殺されたときの処理

カードが殺されたときも効果音を鳴らします。ユーザー自身のカードが含まれている場合とそうでない場合で効果音を変えます。

ゲームが終了したときの処理

ゲームが終了したら’GameFinishedToClient’とともに順位にかんする情報がjsonで送られてくるのでそれを表示します。またユーザーの順位に応じて効果音を鳴らします。

プレイヤー全員離脱時の処理

プレイしていた人が全員離脱してしまった場合は表示されていたカードをすべてリセットします。