我正在尝试开发一个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中是否有适合我要求的内置数据结构?或者我应该实现自己的数据结构?
答案 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()。然后重新发牌。