保存元素的最佳数据结构,其元素可以稍后在利益相关者之间分配?

时间:2012-03-09 01:50:47

标签: java data-structures

我正在尝试开发一个UNO纸牌游戏,现在我达到了一个点,我需要一个可以容纳整个牌组的数据结构,然后我可以把它的一部分分配到几个地方(玩家) ,丢弃桩和牵引桩)。代码将是这样的:

public class UnoGame
{
    public UnoGame()
    {
        SomeDataStructure<Card> unoDeck = generateUnoCards();
        List<Cards> player1 = unoDeck.get(7);
        List<Cards> player2 = unoDeck.get(7);
        List<Cards> discardPile = unoDeck.get(1);
        List<Cards> drawPile = unoDeck.getRest();
    }

    private static SomeDataStructure<Card> generateUnoCards()
    {
        SomeDataStructure<Card> cards = new SomeDataStructure<Card>(108);
        // Here we can create the proper cards and add them to the data structre
        Collections.shuffle(cards);
        return cards;
    }
}

那么,Java中是否有适合我要求的内置数据结构?或者我应该实现自己的数据结构?

2 个答案:

答案 0 :(得分:1)

为什么你需要什么特别的东西并不是很清楚。我会根据真实游戏对其进行建模:所有卡片的堆栈(使用LinkedList<T>作为堆栈实现),然后你拿出牌来获取牌,而也是以后用来取卡。我会用一个单独的类对每个播放器进行建模......即使它最初只包含一个List<Card>或类似的东西。

List<Player> players = new ArrayList<Player>();
LinkedList<Card> deck = createDeck(); // This should shuffle too
for (int i = 0; i < playerCount; i++) {
    Player player = new Player();
    players.add(player);
    for (int j = 0; j < 7; j++) {
        player.addCard(deck.removeLast());
    }
}
LinkedList<Card> discards = new LinkedList<Card>();

在任何时候,如果你想一想在实体游戏中会发生什么,那应该相当容易。

答案 1 :(得分:0)

您可以使用ArrayList的ArrayList或HashMap

的ArrayList:

ArrayList<ArrayList<Card>> decks = generateUnoCards();
ArrayList<Card> player1 = decks.get(0);
...

HashMap中:

HashMap<String, ArrayList<Card>> decks = new HashMap<String, ArrayList<Card>>();
decks.put("player1", new ArrayList<Card>);
...
decks.put("drawPile", getRest(decks));
...
ArrayList<Card> drawPile = decks.get("drawPile");

当一个会话结束并且你要打开套牌时,将所有非drawPile Arraylists中的所有内容复制到drawPile中,在这些ArrayLists上调用clear(),然后在drawPile上调用Collections.sort()。然后重新发牌。