、リストまたはのDeque(両端キュー)にカードを入れてフィッシャーイエーツシャッフルでそれらをシャッフルして、コレクションからそれらを除去することによって、それらを扱う:
public enum Suit {
ORANGE, WHITE, BLACK, BLUE, GREY, PURPLE, JOLLY;
}
カード:
を
public class Card {
private final Suit suit;
private final int value;
public Card(Suit suit, int value) {
this.suit = suit;
this.value = value;
}
public Suit getSuit() { return suit; }
public int getValue() { return value; }
@Override public String toString() { return value + " of " + suit; }
}
デッキ:
import java.util.Collections;
import java.util.Deque;
import java.util.LinkedList;
public class Deck {
private Deque<Card> deck;
public Deck() {
LinkedList<Card> cards = new LinkedList<>();
for (Suit suit : Suit.values()) {
int limit = suit == Suit.JOLLY? 12 : 13;
for (int value = 1; value <= limit; ++value) {
cards.add(new Card(suit, value));
}
}
Collections.shuffle(cards);
deck = cards;
}
public boolean isEmpty() { return deck.isEmpty(); }
public int remaining() { return deck.size(); }
public Card deal() { return deck.remove(); }
}
これは多くの特徴を残し、あなたのGAMのためにお勧めします例えば、カードを1枚1枚ずつ扱う代わりに、n
カードのカードを手渡したり、デッキを改造したり(これをシャッフルしたり、新しいデッキを作成するなど)、「捨てる」パイルのコンセプトあなたのゲームがそれを持っているかどうかを知る)、equals
とhashCode
の方法をCard
にしてください。 Card
にComparable<Card>
を実装することもできます。それらは読者のための練習として残されています。
なぜデッキを7個に分割したいですか?あなたはそれがカードの「色」を知る必要はありません。それはPoliticalCard(その定義はあなたが共有していなかった)の一部でなければなりません。 –
デッキは90枚のカード、または7枚のカードで構成されていますか? –
あなたのカードクラスはどのように見えますか?それは、 "カードである"ことを意味するものをカプセル化する必要があります。カードは黒、青、灰色、紫色、または「愉快」であり、値は(1〜13)と仮定します。これらのカードオブジェクトを90個作成し(ループを使用して)、配列に配置します。ランダムに選択するには、配列をシャッフルして最初のカードを返すことができます。 – trooper