我试图用Java实现一个新的纸牌游戏(没有发明它,只是必须),其中牌组与传统的牌组有所不同。甲板由90张卡片组成,分为这样:13张橙卡,13张白卡,13张黑卡,13张蓝卡,13张灰卡,13张紫色卡和12张快乐卡。所有这些卡都被命名为#34;政治卡"。
我想将套牌表示为7个元素的数组:
public class PoliticalDeck {
private PoliticalCard[] deck;
public PoliticalDeck() {
deck = new PoliticalCard[7];
}
//estrai una carta a caso
public void pickRandomCard() {
}
}
这可能是正确的吗?我怎样才能实施卡片拣选方法?
答案 0 :(得分:1)
将卡片放入List或Deque(双端队列)中,用Fisher-Yates shuffle将它们洗牌,然后将它们从集合中删除:
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(); }
}
这样就省去了游戏中可能需要的一些功能,例如一次只发出一张n
张牌而不是逐一处理它们,重新整理牌组(改组) ,只是创建一个新的牌组),“丢弃”堆的概念(不知道你的游戏是否有这个),以及equals
上的体面hashCode
和Card
方法。您可能还希望Card
实施Comparable<Card>
。这些留给读者练习。