私は一連の積み重ねられたカードを含むカードゲームをしているとしましょう。ゲームが始まる前に何枚のカードを積み上げているのか分かりませんが、一度カードを積み重ねるとカードの枚数は変わりません。最初のアイデアは、ゲームのインスタンスのために与えられたスタックの数を使って配列を作成し、そのスタックの先頭の各カードを配列に配置し、各カードをリンクリストを使ってスタックにリンクすることでした。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が発生しました。これを行うよりスマートな方法はありますか?
なぜ、リスト [] 'を使用できないのですか?これは 'Card'の' cardInFront'と 'cardInBack'参照の必要性を無視します。 –
Turing85
'List'が' add'や 'remove'などをサポートしているので、必要なスタックの数がわからなくても、一般的なリストを使うことができ、実装コンストラクタにサイズを渡す必要はありません(例えば' ArrayList' )upfront – niceman
とにかく 'deck'変数定義とそのクラス/インターフェース定義を表示できますか? – niceman