从"奇怪的"中挑选随机卡片。甲板(Java)

时间:2016-05-06 15:01:18

标签: java

我试图用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() {

    }
}

这可能是正确的吗?我怎样才能实施卡片拣选方法?

1 个答案:

答案 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上的体面hashCodeCard方法。您可能还希望Card实施Comparable<Card>。这些留给读者练习。