2012-01-23 6 views
0

私はこの問題を回避するのに問題があります。この質問があまり明確でない場合はお詫びします。しかし、私は試してみる。Player1とPlayer2の間でコマンドを処理するためのベストモデル

この投稿のために、私はちょっと私の問題をちょっとします。私はマルチプレイヤーTic Tac Toeのゲームを書いています(本当にそうではありませんが、それは数に近いほどです)。任意のプレイヤーが行うことができるアクションは3つだけです:

  1. 現在のプレイヤーはマーカーを置くことができます。
  2. いずれかのプレーヤーが元に戻すを要求できます。他のプレイヤーは、要求を許可または拒否することができます。
  3. いずれかのプレイヤーは辞任することができます。

私は、ゲームボードを追跡し、マーカーの配置の有効性をチェックし、条件に勝つGameEngineクラスを作成しました。私はTerminalPlayer(コマンドラインからゲームをプレイする)、NetworkPlayer(サーバからの動きを受け入れる)、ArtificialPlayer(オフラインでプレイする)などのPlayerクラスを記述したいと思います。

私の問題はこれです。各プレイヤーはいつでもコマンドを送信できます(placeMarker、requestUndo、Resign)。どのようにしてこのゲームを構成しますか?

私は、(各プレーヤーをスレッドに入れ、GameEngineのモニター要求を)働かせることができる解決策を考えることができます。しかし、私が思い付くことはすべて非常に厄介で厄介です。これには良いパターンがあるはずですが、私はそれを見つけることができません。

具体的に、あなたは答えることができます。

  1. をこの問題を解決したパターンとは何ですか? 1つは存在するのですか、これは私が作っているより簡単ですか?
  2. Boostライブラリ(またはそのようなもの)がこの問題をエレガントに解決した場合、そのライブラリの名前は何ですか?
+0

プレーヤーが通信できるインターフェイスとは何ですか? – jozefg

+0

@jozefg、あなたはGUIではなくゲームエンジンとのインターフェースについて話していると思いますか?今はインターフェイスがありません。それは私が書くのに苦労していることです。言い換えれば、GameEngineは2人のプレーヤーからの入力をどのように管理していますか? – jmbeck

+0

2人のプレイヤーの間に待ち時間がない場合(I.同じプレイヤーで同時にプレイしている場合)、プレーヤーの両方の入力をポーリングするだけです。どちらかのプレイヤーがgamestateを変更した場合、gamestateを変更する行為は、次のポーリング時刻まで他のプレイヤーの入力を無効にすることができます。 入力を並行してポーリングしないでください。プレイヤー1を更新して、gamestateが切り替わるかどうかを確認してから、次のプレーヤーのために繰り返します。 –

答えて

0

シンプルなのはstate machineのように見えますが、ゲームを管理できるようになります。

+0

はい、私は、プレーヤーがどちらも同時にゲームに入力を送ることができるか心配です。ステートマシンは新しい状態に移行するコマンドを受け入れますが、そのコマンドはどのように開始されますか?各プレーヤーは別のスレッドで動作していますか? – jmbeck

0

いくつかの入力がサーバーに受信されると、ゲームのルールに基づいて検証し、入力を実行するか天気を決定するかを決定する必要があります。エステバン(Esteban)が述べたように、ゲーム状態は、プレーヤーが現在ターンを取ると予想される状態を含む状態機械として進行する。保留

  • プレイヤー1機の電源を入れ
  • プレーヤー2電源を入れ
  • プレーヤー1つの要求:可能な状態である場合は、入力の

    異なる部分は

    、ゲームの異なる状態で許可されます

  • プレーヤー2リクエスト保留中
  • ゲームオーバー

アクションのリスト、許可されたときのアクションのリスト、状態の変更方法があります。

プレーヤー1つのメイクターン:

可の状態:プレイヤー1ターン

新州立:プレイヤー2ターン

プレーヤー1要求元に戻す:

可の状態:プレーヤー1ターン

新しい状態:選手1

可状態:

新しい状態を保留中のプレーヤー1の要求:

可状態:プレイヤー1は

プレイヤー2が辞任を回し

プレイヤー2は、要求を拒否保留中の要求:ALL

New Stおまけ:ゲームオーバー

プレイヤーが順番に移動していない場合は、それを単に破棄します。

0

探しているコンセプトをゲームループといいます。この用語は、一般的な音のためにかなりGoogleableです。それは、入力をチェックし、ゲームの状態をステップさせ、スクリーンを再描画する単純な永遠のループです。ネットワークプレーヤーにとって、私はおそらくそれを別のスレッドで実行し、メインのゲームループがピックアップするイベントをポストさせることになるでしょう。

関連する問題