首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从一副“奇怪的”牌中随机挑选一张牌(Java)

从一副“奇怪的”牌中随机挑选一张牌(Java)
EN

Stack Overflow用户
提问于 2016-05-06 23:01:18
回答 1查看 421关注 0票数 0

我正在尝试用Java实现一个新的纸牌游戏(不是我发明的,只是不得不),它的纸牌有点不同于传统的纸牌游戏。牌组由90张牌组成,分为: 13张橙色牌,13张白牌,13张黑牌,13张蓝牌,13张灰牌,13张紫色牌和12张快乐牌。所有这些卡片都被命名为“政治卡片”。

我想用一个由7个元素组成的数组来表示这个牌组:

代码语言:javascript
复制
public class PoliticalDeck {
    private PoliticalCard[] deck; 

    public PoliticalDeck() {
        deck = new PoliticalCard[7]; 
    }

    //estrai una carta a caso
    public void pickRandomCard() {

    }
}

这可能是正确的吗?如何实现选卡方法?

EN

回答 1

Stack Overflow用户

发布于 2016-05-07 01:43:39

将牌放在列表或Deque (双端队列)中,使用Fisher-Yates shuffle对它们进行洗牌,并通过从集合中删除它们来处理它们:

代码语言:javascript
复制
public enum Suit {
    ORANGE, WHITE, BLACK, BLUE, GREY, PURPLE, JOLLY;
}

卡片:

代码语言:javascript
复制
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; }
}

卡片组:

代码语言:javascript
复制
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上的像样的equalshashCode方法。您可能还想让Card实现Comparable<Card>。这些都是留给读者的练习。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37075635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档