2017-05-26 6 views
0

私は一連の積み重ねられたカードを含むカードゲームをしているとしましょう。ゲームが始まる前に何枚のカードを積み上げているのか分かりませんが、一度カードを積み重ねるとカードの枚数は変わりません。最初のアイデアは、ゲームのインスタンスのために与えられたスタックの数を使って配列を作成し、そのスタックの先頭の各カードを配列に配置し、各カードをリンクリストを使ってスタックにリンクすることでした。Javaでスタックされたカードのグループを作成するときのリンクリストの代わりに?

マイカードのクラスには、次のフィールドがあります。たとえば

public class Card { 
    private String suit; 
    private String value; 

    public Card cardInFront = null; 
    public Card cardInBack = null; 

は、私は5つのスタックに作られている標準のカードのデッキ(52枚のカード、4人のスーツ、13値)を与えられたんだと言うことができます。

int numOfPiles = 5; 

Card[] cascadePiles = new Card[numOfPiles]; 
for (int i = 0; i < numOfPiles; i++) { 
    cascadePiles[i] = deck.get(i); 
} 

私は、ラウンドロビン方式でカードを扱っていきますが、私は両方と一緒に対処する各カードを接続します。私はそうのように、5つの開口部の配列にラウンドロビン方式で最初の5枚のカードを配布しますそれの前のカードとそれの後ろのカード。これはすべて、次のコードで行われます。

int x = 0; 
    while (x != numOfPiles) { 
     deck.remove(0); 
     x++; 
    } 
    int i = 0; 

    while (!deck.isEmpty()) { 
     if (i < numOfPiles) { 
     Card cardBehind = cascadePiles[i]; 
     Card temp = cascadePiles[i]; 
     Card nullSearcher = cascadePiles[i].cardInFront; 
     while (nullSearcher != null) { 
      cardBehind = temp; 
      temp = nullSearcher; 
      nullSearcher = temp.cardInFront; 
     } 
     addToPile(temp, deck.get(0), cardBehind); 
     temp.cardIsInPile = PileType.CASCADE; 
     deck.remove(0); 
     i++; 
     } else { 
     i = 0; 
     } 
    } 

私はゲームごとに必要になりますどのように多くのスタックを知らないので、私はすべてのリンクされたリストでこれをやった。この理由はあります。一般的なリストを使用していた場合、ゲームを開始する前に宣言する数を知っていなければなりません。しかし、このようなスタックを体系化することで、いくつかのNullPointerExceptionsが発生しました。これを行うよりスマートな方法はありますか?

+1

なぜ、リスト [] 'を使用できないのですか?これは 'Card'の' cardInFront'と 'cardInBack'参照の必要性を無視します。 – Turing85

+0

'List'が' add'や 'remove'などをサポートしているので、必要なスタックの数がわからなくても、一般的なリストを使うことができ、実装コンストラクタにサイズを渡す必要はありません(例えば' ArrayList' )upfront – niceman

+0

とにかく 'deck'変数定義とそのクラス/インターフェース定義を表示できますか? – niceman

答えて

0

私の知る限り、データ型はArrayList<LinkedList<Card>>のようになります。

ArrayList<LinkedList<Card>> listOfCardStack=new ArrayList<LinkedList<Card>>(); 

LinkedList<Card> stack0 = new LinkedList<Card>(); 

Card card0=new Card... 

stack0.add(card0); 

stack0.add(card1); 

... 

listOfCardStack.add(stack0); 

... 
+0

各ゲームに何枚のスタックがあるか分からないと、どのスタックに名前を付けることができますか? –

+1

スタックの数を知る必要はありません。 LinkedListクラスを使用していて、java.util.Listを実装しています。新しいスタックを取得したら、上記のようなlinkedListを作成し、それを作成してlistOfCardStackに追加します。 –

+0

助けてくれてありがとう、私は今それを得る! –

関連する問題