Node.js and Socket.IO お試しでカードゲームのスピード作成
いまさら、Node.js+Socket.IOでカードゲームのスピードを作成したのでおまとめ、2,3年前なら需要あったかもだけど、今検索しても、古い記事ばかりで、誰もやってないのかもと思ったけど、webでの通信ゲーム作り方が分からないので、調べて簡単なの作ってみた。トランプのスピードはアクション性が高くて、それなりのレスポンスないと成立しないので、よいサンプルかと思った。
環境
- Node.js v14.15.5
- Socket.IO
- Express
- TypeScript
- webpack
環境の作り方もわからなくて、まともにプログラムできるまでが一番時間かかった。まだまともにdebugできないし、assert消してないし、テストやlintもない。次のステップで増やしていくに違いない。
matchの作成
この辺やりかたわからない。roomに2人playerがそろえば、matchを作成して、ゲーム始める。player一人のみはとりあえずbot入れてmatch作る。bot戦はplayerが入ってきたら削除してしまって、すぐに対人を始める。2人以上入って来た人は観戦だけ。matchは一つしか作ってない。ループ回せるようにしてあるけど、複数matchどうやって捌くのか?
対戦処理
サーバーは定期でずっと、場札、それぞれのplayerの手札、デッキの枚数を渡し続ける。クライアントは、カードを場札に出したいコマンドと、デッキから手札に加えるコマンドを投げる。コマンドを受け取ったサーバーはカードが出せたら、場札や手札を更新して、クライアントに投げ返す。それぞれのクライアントには同じ情報を投げ続けている。
サーバーは32msec単位で更新して、Socket.IOで状態をクライアントに投げている、こんな頻度で投げていいのって思っている。参考にした、battle tanks もそう、TCP/IPでこれでも動くんだー。
他には、playerがカードをドラッグ中は、その位置情報を送って、カードを動かしているように見せてる、位置はクライアントで補完してない。他は、emotesのボタンおしたら、押されたタイプをサーバーに送って、クライアントに戻して、相手の表示をしている。
0 件のコメント:
コメントを投稿