私はこの問題を回避するのに問題があります。この質問があまり明確でない場合はお詫びします。しかし、私は試してみる。Player1とPlayer2の間でコマンドを処理するためのベストモデル
この投稿のために、私はちょっと私の問題をちょっとします。私はマルチプレイヤーTic Tac Toeのゲームを書いています(本当にそうではありませんが、それは数に近いほどです)。任意のプレイヤーが行うことができるアクションは3つだけです:
- 現在のプレイヤーはマーカーを置くことができます。
- いずれかのプレーヤーが元に戻すを要求できます。他のプレイヤーは、要求を許可または拒否することができます。
- いずれかのプレイヤーは辞任することができます。
私は、ゲームボードを追跡し、マーカーの配置の有効性をチェックし、条件に勝つGameEngineクラスを作成しました。私はTerminalPlayer(コマンドラインからゲームをプレイする)、NetworkPlayer(サーバからの動きを受け入れる)、ArtificialPlayer(オフラインでプレイする)などのPlayerクラスを記述したいと思います。
私の問題はこれです。各プレイヤーはいつでもコマンドを送信できます(placeMarker、requestUndo、Resign)。どのようにしてこのゲームを構成しますか?
私は、(各プレーヤーをスレッドに入れ、GameEngineのモニター要求を)働かせることができる解決策を考えることができます。しかし、私が思い付くことはすべて非常に厄介で厄介です。これには良いパターンがあるはずですが、私はそれを見つけることができません。
具体的に、あなたは答えることができます。
- をこの問題を解決したパターンとは何ですか? 1つは存在するのですか、これは私が作っているより簡単ですか?
- Boostライブラリ(またはそのようなもの)がこの問題をエレガントに解決した場合、そのライブラリの名前は何ですか?
プレーヤーが通信できるインターフェイスとは何ですか? – jozefg
@jozefg、あなたはGUIではなくゲームエンジンとのインターフェースについて話していると思いますか?今はインターフェイスがありません。それは私が書くのに苦労していることです。言い換えれば、GameEngineは2人のプレーヤーからの入力をどのように管理していますか? – jmbeck
2人のプレイヤーの間に待ち時間がない場合(I.同じプレイヤーで同時にプレイしている場合)、プレーヤーの両方の入力をポーリングするだけです。どちらかのプレイヤーがgamestateを変更した場合、gamestateを変更する行為は、次のポーリング時刻まで他のプレイヤーの入力を無効にすることができます。 入力を並行してポーリングしないでください。プレイヤー1を更新して、gamestateが切り替わるかどうかを確認してから、次のプレーヤーのために繰り返します。 –