如何用甲板处理10张牌的4手牌?

时间:2013-01-22 16:26:44

标签: java shuffle bluej playing-cards

所以我有一个套牌的代码,但我不知道如何让另一个班级分别处理4手10张牌。另一类应该在屏幕上打印,在文本中,4手10张随机卡片。有人能告诉我如何完成这个的代码吗?我正在使用blueJ。

以下是我的代码:

public class Card 
{
public static void main(String[] args) 
{
    String[] suit = { "Clubs", "Diamonds", "Hearts", "Spades" };
    String[] rank =     { "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King", "Ace" };

    int SUITS = suit.length;
    int RANKS = rank.length;
    int N = SUITS * RANKS;

    // initialize deck
    String[] deck = new String[N];
    for (int i = 0; i < RANKS; i++) {
        for (int j = 0; j < SUITS; j++) {
            deck[SUITS*i + j] = rank[i] + " of " + suit[j];
        }
    }

    // shuffle the deck
    for (int i = 0; i < N; i++) {
        int r = i + (int) (Math.random() * (N-i));
        String t = deck[r];
        deck[r] = deck[i];
        deck[i] = t;
    }

    for (int i = 0; i < N; i++) {
        System.out.println(deck[i]);
    }
   }

}

2 个答案:

答案 0 :(得分:2)

根据游戏的精神,让我们创建一个可以工作的层次结构。最大的范围将是游戏,它将动作委托给其他类。我们还将有3个班级:Deck,Dealer,Player。

游戏将拥有经销商和播放器的ArrayList 经销商将有一个甲板 播放器将有一个StringList,表示您的卡

然后游戏可以告诉经销商创建并随机播放一副牌组。你可以调用一张交易卡,将玩家作为一个参数传递给经销商,经销商可以根据玩家的数量,给他们甲板上的下一个元素,并从牌组中删除该元素。

一旦你处理了所有牌,游戏就可以告诉玩家展示他们的牌,打印结果。

public Dealer{
    private Deck deck;

    ....

    public void shuffleDeck(){...}
    public void dealCards(List<Player> players){ ...}
}

public Player{
    private List<String> hand;

    ....

    public void addToHand(String card){....}
}

答案 1 :(得分:0)

您的卡片/甲板课程应分为两类。

卡片类会描述一张卡片。

public class Card {

    private String rank;
    private String suit;

    public Card(String rank, String suit) {
        this.rank = rank;
        this.suit = suit;
    }

    public String getRank() {
        return rank;
    }

    public String getSuit() {
        return suit;
    }

    @Override
    public String toString() {
        return rank + " of " + suit;
    }

}

甲板课程描述了一副牌。

public class Deck {

    private String[]    rank    = { "2", "3", "4", "5", "6", "7", "8", "9",
            "10", "Jack", "Queen", "King", "Ace" };
    private String[]    suit    = { "Clubs", "Diamonds", "Hearts", "Spades" };

    private Card[]      cards;

    public Deck() {
        cards = new Card[suit.length * rank.length];
        for (int i = 0; i < rank.length; i++) {
            for (int j = 0; j < suit.length; j++) {
                cards[suit.length * i + j] = new Card(rank[i], suit[j]);
            }
        }
    }

    public Card[] shuffleDeck() {
        for (int i = 0; i < cards.length; i++) {
            int r = (int) (Math.random() * (cards.length - 1));
            Card t = cards[r];
            cards[r] = cards[i];
            cards[i] = t;
        }
        return cards;
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < cards.length; i++) {
            builder.append(cards[i].toString());
            builder.append(System.getProperty("line.separator"));
        }
        return builder.toString();
    }
}

在你理解这两个类如何协同工作之前,没有必要介绍其他类。

Java或任何面向对象的计算机语言的观点是将你的问题分解成更小的类,每个类都做一件事并做得很好。