2012-03-09 4 views
0

私は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; 
    } 
} 

私の要件に合った組み込みのデータ構造がありますか?または、自分のデータ構造を実装する必要がありますか?

+0

ArrayList >?さらに優れています:HashMap >。キーは名前、arraylistはカードです。 –

答えて

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>(); 

あらゆる点で、物理的なゲームで何が起こるかについて考えるならば、それはかなり簡単です。

0

あなたはArrayListのののArrayListやHashMapの

ArrayListのいずれかを使用することができます、

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"); 

セッションが終了し、あなたはデッキをシャッフルしたい:

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

HashMapを非drawPile ArraylistsからすべてをdrawPileにコピーし、それらのArrayListでclear()を呼び出し、drawPileでCollections.sort()を呼び出します。その後、カードを再処理します。

+0

しかし、このようにして、プレイヤー1のリスト内のカードは、ゲームのすべてのセッションで同じになります。 –

+0

あなたは何を意味するのか分かりません。カードを削除したい場合は、 'decks.get(" player1 ")。remove(card);'を使います。カードを追加する場合は、 'decks.get(" player1 ")。add(card);'を使用してください。http://docs.oracle.com/javase/6/docs/api/java/util/ArrayListを参照してください。 html –

+0

私は、108のunoカードを作成した後、 'Collections.shuffle(cards); 'を使用して、それらがすべてのunoゲームセッションで異なる順序になるようにデータ構造に格納しなければなりません。あなたが提案したソリューションは、異なるデータ構造になるため、要素をシャッフルできません。つまり、 'decks.put(" player1 "、new ArrayList );と呼んで、arraylistにどのカードを追加すればいいですか? –

関連する問題