我正在尝试用Java实现一个新的纸牌游戏(不是我发明的,只是不得不),它的纸牌有点不同于传统的纸牌游戏。牌组由90张牌组成,分为: 13张橙色牌,13张白牌,13张黑牌,13张蓝牌,13张灰牌,13张紫色牌和12张快乐牌。所有这些卡片都被命名为“政治卡片”。
我想用一个由7个元素组成的数组来表示这个牌组:
public class PoliticalDeck {
private PoliticalCard[] deck;
public PoliticalDeck() {
deck = new PoliticalCard[7];
}
//estrai una carta a caso
public void pickRandomCard() {
}
}这可能是正确的吗?如何实现选卡方法?
发布于 2016-05-07 01:43:39
将牌放在列表或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牌而不是逐个处理它们,重新洗牌(为了洗牌,只需创建一副新的牌),“丢弃”堆的概念(不知道您的游戏是否有这个),以及Card上的像样的equals和hashCode方法。您可能还想让Card实现Comparable<Card>。这些都是留给读者的练习。
https://stackoverflow.com/questions/37075635
复制相似问题