2011-09-17 10 views
3

私はC++で構築してきたかなり単純なボードゲームを持っています。現在、プレイヤーにはゲームのプレイヤー数に応じてプレーヤー番号(1,2,3、... N)が割り当てられます。かなり標準。選手とその統計は、名前と番号を含むファイルに保存されます。私はターンファイルを使ってディレクトリを読むことでターンを処理します。ターンはプレイヤーによって提出され、プレイヤー名とタスク/ターンのみを含む。将来的には、プレイヤー番号を変更してゲームの順序を混ぜる予定です。ボードゲームの回転処理を改善する

(あなたはボードゲーマーなら、Caylusまたはアグリコラを考える)

選手は、アプリケーションの起動時に読み込まれます。私はコマンドを与え、ターンが処理されます。基本的に、私はターンのディレクトリを1つずつ読み、そのターンをプレイヤー名にマッチさせるだけです。それはそのままで、順番に処理がありません。私がいることを挿入し、どのプレーヤーで行く今度比較していたよう

  • :プレーヤー3は、私は、次の解決策を考え出したので、私は、これは素晴らしいデザインではなかった考え出しプレーヤー2.

    前に行くことができます鍵はプレーヤー番号であるstd::map<int, Turn>になります。

  • すべてのターンを集めたら、マップの中で1から始まる選手Nを探して、自分の番を処理します。
    • 私は、ターンを処理するためにプレイヤー番号とプレイヤーを一致させる必要があるので、ここで再びプレイヤーのリストを繰り返しています。
  • すべてのプレーヤーを処理するまでこれを行います。

これを行うより良い方法はありますか?これはかなり複雑でオーバーヘッドが多いようです。

ありがとうございます!

注:私のターン処理方法は、ターンファイルから読み取られたターンを表すstruct(プレーヤーの統計情報ファイルを表す)とPlayer classを取ります。

+1

プレイヤーの数が少ない場合、単純な配列型の反復処理で十分です。複雑な構造は、このような場合、原始的な構造よりも遅くなる傾向があります。 –

答えて

1

プレイヤー番号とターン番号で定義されているプレイヤーのアクションクラスを定義し、このクラスの比較を定義すると考えられます。ファイルからすべてのアクションを読み取り、順序付けられたリストに挿入してから、これらのアクションを処理します。 Turn秒、PlayerID sおよびPlayerTurnPosition S(OK後者2はint型であるが、私はあなたが何かにそれらをのtypedef-EDきたと仮定します:

+0

私はこの道を行くかもしれないと思います。私は、プレーヤーnumに基づいてベクトルの単純な並べ替え関数を作成し、そのプレーヤーにロードされた順番を処理することができます。 – Robb

2

だから私はそれを理解して、あなたの問題は、あなたがあなたリンクされたデータのビットを持っています混乱を避けるためにそのように)。また、PlayerIDとPlayerTurnPositionの値を対応するTurnにルックアップし、プレーヤ情報の間に双方向の関係を維持したいとします。

これは、boost::bimapを使用して各ペアの関係に追加情報を添付して叫んでいます。 (右/左ビューコンテナタイプのための他のオプションがあるが、set_ofはおそらくより多くの意味与えplayerIDs及び位置は、おそらくユニークである可能)

boost::bimaps::bimap< 
    boost::bimaps::vector_of<PlayerID>, 
    boost::bimaps::vector_of<PlayerTurnPosition>, 
    boost::bimaps::with_info<boost::shared_ptr<Turn> > 
    > 

のようなものはきちんと仕事をする必要があります。

この種の例はwith_infoです。in the docsです。

+0

bimapを試してみるのに最適な時間です!ありがとう! – Robb

+0

実際、バイマップは私が私が望むところに私を連れてこないかもしれません。 4番目のデータがあり、これがプレーヤーのステータスデータです。これは私の部分では貧しいデザインかもしれません。 – Robb

+0

PlayerIDからPlayerStatusに移動するだけでよい場合は、別のテーブルに格納することはできませんか?もちろん、プレーヤーのステータスからプレーヤーIDまで検索する必要があるのなら... boost :: multi_index - http://www.boost.org/doc/libs/1_46_1/libs/multi_index/doc/indexです。 html - bimapの一般化です。それはかなり(IMHO)を使用するにはかなり厄介です。 – timday

関連する問題