2009-02-26 18 views
8

私はそれがより簡単にテストできるようにMVVMデザインパターンを使用し、ダブル除去トーナメントの作成および操作することができます私のトーナメントオーガナイザーソフトウェアを、変換する過程でいます。その際、私はブラケット構造を直接操作するUIのいくつかのコードから 'モデル'を分離しています。データ構造

これは、トーナメントを処理するために作成したソフトウェアの3番目の繰り返しです。最初はPHPで書かれ、データをデータベースに保存しました。 2番目のバージョンは私が作ったWPFのバージョンで、データをメモリに格納してXMLファイルにシリアル化します。しかし、どちらのバージョンでも、私はきれいではないと感じる実装の側面があり、DRYの法律を破るように思えます。

あなたは二重の排除ブラケットを処理するために、ゼロからのデータ構造を作成していた場合は、あなたはそれをどのように行うのでしょうか?

ブラケットをアルゴリズムで自動的に生成する必要がないことに注意してください(4/8/16/32人であらかじめ作成されたダブルエリミネーションからロードすることは私が今やっている方法です)。マッチの勝者を設定し、ブラケットを通してそれらを前進させる主なユースケースです。

編集:それを明確にするために、データ構造はダブルエリミネーショントーナメントを処理する必要があるので、潜在的に、1試合の勝者は、別の敗者と対戦てしまう可能性があります。

答えて

1

私のソリューションは、データ構造の2セットを持っていることでした。 1つはブラケット部分、もう1つはシート用です。

class Match 
{ 
    string Id; 
    MatchSeat red; 
    MatchSeat blue; 
    MatchSeat winner; 
    MatchSeat loser; 
} 

class MatchSeat 
{ 
    string Id; 
    Entry Entry; 
} 

それをセットアップするために、ブラケット情報を取得して構造を構築するいくつかのヘルパ関数を作成しました。

{ "1", "seed1", "seed4", "W1", "L1" }, 
{ "2", "seed2", "seed3", "W2", "L2" }, 
{ "3", "W1", "W2", "W3", "L3" }, 
{ "4", "L1", "L2", "W4", "L4" }, 
{ "5", "W4", "L3", "W5", "L5" }, 
{ "F", "W3", "W5", "WF", "WF" } 

次に、シードと勝者/敗者が記入されると、値は1つの場所にのみ設定されます。

0

最初のラウンドがリーフノードから始まり、次に上に移動する完全なバイナリツリーはどうでしょうか?

+0

残念ながら、それはダブルエリミネーショントーナメントを処理しません:( – FryGuy

2

したがって、エンドポイントには64チームあります。だから何とか64チームのコレクションがあります。

しかし、ペアになっていて、ペアごとに勝者があります。そして、中央のブラケットに、その勝者が実際にブラケットから現れたので、私はあなたのブラケットのオブジェクトが実際のように見えると思う:

public class Bracket 
{ 
    Team winner; //if this is null or whatever, then we don't have a winner yet 
    Bracket topBracket; 
    Bracket bottomBracket; 
} 

...そして、あなたの両端をインスタンス化しているとき、あなたは2つだけを残したいですサブブラケットはヌルで、勝者のみです。

ダブルエリミネーションを処理するには、2番目のブラケットがあります。これは、敗者ブラケットです。あなたが自動的にこの括弧に敗者の追加を処理することができればいいです(32で始まる括弧をデザインする、16まで再生する括弧をデザインする、勝者の括弧2から16の敗者を追加するなど)。それに対応するためにデータ構造を変更する必要はなく、必要以上のものを必要とします。私はフル機能のトーナメントのAPIを開発中だ、と私はオープンだ

+0

それはダブルエリミネーション(編集を参照)のために必要であるという事実を除いて、うまくいきます – FryGuy

0

私はちょうど私が上だった、と私はチャイムだろうと思って別の質問のサイドバーにこの質問に気づきましたそれを調達する。

それはまだダブルエリミネーショントーナメントを作成しませんが、シングル・エリミネーションのトーナメントのためのデータ構造は、最近二重ELIMツリー構造をサポートするために改訂されました。これに

http://tournaments.codeplex.com/

+0

はい、私はそれを見て、それをダウンロードしました。 )、私はすでに先に進んで実装しているので、この時点で別のものに戻って再利用するのは難しいでしょう。 – FryGuy