0

仮定しましょう

public abstract class Game
{
    // Base
}

public class Poker : Game
{
    // Lobby Object
    // NUMBER OF PLAYERS ( Max )   ----------
}                                            '
                                             '
public class Lobby                           '
{                                            '
    // List<Tables>                          '
}                                            '
                                             '
public class Table                           '
{                                            '
    // List<Player>                <---------'
}

冗長なパスなしでテーブルオブジェクトからプレーヤーの数にアクセスするにはどうすればよいですか?


編集私
あなたは私の質問を誤解しました、ごめんなさい。
ゲームタイプからこのテーブルに参加できる最大数にアクセスしたい。
したがって、ポーカーテーブルの場合、10に等しいプレーヤーの数を取得したいと思います。


編集II
さまざまなゲームタイプ:ハート、スペード、ポーカー、見積もりなど。
プレーヤーの最大数はそれぞれ4、4、10、4などです。


編集III
繰り返しますが、私の質問を誤解しました。次のことができるようにしたいと思います。

プレイヤーがテーブルに参加しようとすると、ターゲットテーブルの現在のプレイヤー数とゲームタイプの最大プレイヤー数を比較するので、プレイヤーが参加できるかどうかを判断します。

4

2 に答える 2

3

次の関係をモデル化する必要があると思います。

public abstract class Game
{
    // force all Game descendants to implement the property
    public abstract int MaxPlayers { get; } 
}

public class Poker : Game
{
    // Lobby Object
    public List<Lobby> Lobbies { get; set; }

    // NUMBER OF PLAYERS ( Max )
    // the abstract prop needs to be overridden here
    public override int MaxPlayers 
    { 
       get { return 4; } 
    }
}   

public class Lobby
{
    public List<Table> Tables { get; set; }
}

public class Table                           
{                    
    public Game CurrentGame { get; set; }
    public List<Player> Players { get; set; }

    // force the Game instance to be provided as ctor param.
    public Table(Game gameToStart)
    {
        CurrentGame = gameToStart;
    }
}

インスタンスGame化されたときに再生されているものを注入します。Table

var pokerGame = new Poker();
// more code here, etc etc

var myTable = new Table(pokerGame);

Tableインスタンスで許可されるプレーヤーの最大数を取得するには、次のようにします。

var maxAllowed = Table.CurrentGame.MaxPlayers;
于 2012-06-15T19:24:25.360 に答える
1

オブジェクトにLINQを使用すると、これを非常に簡単に行うことができます。

public abstract class Game
{

}

public class Poker : Game
{
    private Lobby lobby = new Lobby();

    public int MaxPlayers         
    { 
        get
        {           
           int count = lobby.tableList.Sum(t => t.playerList.Sum(c => t.playerList.Count));
           return count;
        }                 
    }


public class Lobby
{
    public List<Table> tableList { get; set; }
}

public class Table
{
    public List<Player> playerList { get; set; }
}

public class Player
{

}
于 2012-06-15T18:52:04.847 に答える