HTMLでゲームを作る2 - 複数ブラウザ間でゲームデータの同期化
前回は、HTMLで画像を使わずにトランプを描画して、サーブレットと通信するところまで作りました。
もうちょっとプログラムを作っていきます。
ネット対戦のようなものを実現するにはどうすればいいのでしょう?
AさんとBさんで対戦中を想定します。
その場合、AさんとBさんでカードの状態を同期する必要があります。
Aさんがブラウザ上でカードを動かしたら、それの情報をサーバーへ送り、サーバーはそれをさらにBさんに送るわけです。
Bさんのブラウザはサーバーからの更新データを受け取り、画面のカードを描画しなおすわけです。
左側のブラウザはChromeで、右側はFirefoxです。
どちらかのブラウザでカードをドラッグして動かすと、もう片方のブラウザのカードも動きます!
3つ以上のブラウザを開いてもみんな同じように動きます。
これは同じPCでやってますが、当然別のPCでやっても同じように動くはずです。
これで、いちおう七並べぐらいはできそうです。
ゲームのルールを一切作ってないので、カードのシャッフルから並べるところまで完全に手動ですが…
しかし、ネットゲーというのは正直、どんな構造で作っていいか分かりません。
今はかなり適当に作ってます。
とりあえずで、1秒間に10回、サーバーへデータを取りに行って、画面を更新しています。
どれぐらいの間隔で通信すればいいのかとか、いまいち見当が付きません。
今はローカルで動いているためレスポンスは1ms以下で帰ってきますので、通信の間隔を狭くしても大丈夫なのですが、
インターネットだとどれぐらいのレスポンスが得られるものなのでしょうか。
これは実験してみないといけなそうです。
また、非同期に複数のユーザーが、画面のカードを動かせるので、
当然ですが同じカードを同時に動かそうとする場合が発生します。
そんなときはどうすればいいのでしょう?
常に先勝ちにしてしまうと、ネットワーク的にサーバーから遠い位置にいるユーザーが常に不利になりそうです。
なかなか分からないことだらけで大変そうです。