ASP.NET Core版 対人対戦できるぷよぷよをつくる(3)の続きです。これまでは1回で勝負が決まっていましたが、今回は3本先取に書き換えます。

どこを書き換えるか? 要はゲームが終了したときにそのまま終わりにしなければよいのです。

勝ち数を格納する配列を定義する

まずPuyoMatchGameクラスに勝ち数を格納する配列を定義します。

PuyoMatchHubクラスの修正

そしてPuyoMatchHubクラスの勝敗が決したときのイベントハンドラを変更します。PuyoMatchHubクラスはAspNetCore.SignalRにおける処理 ASP.NET Core版 対人対戦できるぷよぷよをつくる(2)を参照してください。

SendMatchStringメソッドは対戦しているときに、いま第何戦なのかがわかるようにするだけのものでたいした意味はありません。

クライアントサイドにおける処理

これまでは対戦がおわったらクライアントサイドに”WonGameToClient”または”LostGameToClient”を送信していましたが、これからは”WonThisGameToClient”または”LostThisGameToClient”を送信します。どちらかが3勝したら”FinishedGameToClient”を送信します。そうでない場合は次のゲームが再開され、そのときは”NextGameStartedToClient”が送信されます。

クライアントサイドではこれらを送信したら以下の処理をおこないます。

新しくisStoppingPlayというグローバル変数を定義しています。これはプレイは続行中ではあるけれども中断されていることを示すフラグです。このフラグがセットされているあいだはBGMの再生が中断されます。

wwwroot\puyo-match\puyo-match.js

新しいフラグが追加されたのでIsSound関数が少しだけ変更になります。

wwwroot\puyo-match\puyo-match.js

またクライアントサイドで”NextGameStartedToClient”を受信したときは以下の処理がおこなわれます。

wwwroot\puyo-match\puyo-match.js

どちらかが3勝した場合はゲーム終了です。この場合はサーバーサイドから”FinishedGameToClient”が送られてくるのでエントリーするためのボタンを再表示させます。

wwwroot\puyo-match\puyo-match.js

双方の勝ち数を表示させる

また対戦中は自分と相手の勝ち数が表示されたほうがわかりやすいと思うので表示させます。

これはサーバーサイドの処理です。変更したのは一部だけです。”WinCountsToClient”を送信する部分を追加しただけです。

クライアントサイドでは”WinCountsToClient”を受信したときの処理を追加します。

wwwroot\puyo-match\puyo-match.js

それから描画処理をおこなうところで勝ち数を表示させます。長々と書いていますが、2戦目以降は勝ち数を表示させる処理を追加しているだけです。

wwwroot\puyo-match\puyo-match.js