Просто держите список значений / костюмов где-нибудь.Если вы разместите их в порядке возрастания, вы можете довольно легко создать карточки в порядке возрастания значения, используя вложенный цикл для итерации по значениям и мастям соответственно, внешний цикл - это итерация значений.
Какдля рисования карт: Вы, вероятно, не хотите повторения, поэтому вы должны удалить карту из колоды после вытягивания.
public enum Suit {
HEART("hearts"), SPADE("spades"), CLUB("clubs"), DIAMOND("diamonds");
private final String imageString;
Suit(String imageString) {
this.imageString = imageString;
}
public String getImageString() {
return imageString;
}
}
public enum CardValue {
TWO("2"),
THREE("3"),
FOUR("4"),
FIVE("5"),
SIX("6"),
SEVEN("7"),
EIGHT("8"),
NINE("9"),
TEN("10"),
JACK("jack"),
QUEEN("queen"),
KING("king"),
ACE("ace");
private final String imageString;
CardValue(String imageString) {
this.imageString = imageString;
}
public String getImageString() {
return imageString;
}
}
public final class Card implements Comparable<Card> {
private final CardValue value;
private final Suit suit;
private final int cardValue;
public Card(Suit suit, CardValue value) {
if (suit == null || value == null) {
throw new IllegalArgumentException();
}
this.suit = suit;
this.value = value;
this.cardValue = value.ordinal() * 4 + suit.ordinal();
}
public CardValue getValue() {
return value;
}
public Suit getSuit() {
return suit;
}
@Override
public int compareTo(Card o) {
return cardValue - o.cardValue;
}
public Image createImage() {
return new Image(value.getImageString() + "_of_" + suit.getImageString() + ".png");
}
@Override
public int hashCode() {
return cardValue;
}
@Override
public boolean equals(Object obj) {
return obj != null
&& (obj instanceof Card)
&& (((Card)obj).cardValue == cardValue);
}
}
private final Random random = new Random();
Создать колоду:
private final List<Card> cards;
{
cards = new ArrayList<>(suits.length * values.length);
Suit[] suits = Suit.values();
CardValue[] values = CardValue.values();
List<Card> cards = new ArrayList<>(suits.length * values.length);
for (CardValue val : values) {
for (Suit suit : suits) {
cards.add(new Card(suit, val));
}
}
}
положить все карты в колоду и перемешать
// create copy to avoid having to recreate all the cards when putting all cards back in the deck
List<Card> deck = new ArrayList<>(cards);
Collections.shuffle(deck, random);
Убрать «верхнюю» карту из колоды (в данном случае последнюю в списке по эффективности):
Card card = deck.remove(deck.size() - 1);
Вместо этого вы также не можете использовать Collections.shuffle
на deck
и вместо этого удалять случайную карту каждый раз, когда вытягиваете карту:
Card card = deck.remove(random.nextInt(deck.size()));
Класс Card
предоставляет метод для создания изображениядля него и сравнения значений карты.