0

所以我有一套牌的代码,但我不知道如何制作另一个类来处理每手 10 张牌的 4 手牌。其他班级应在屏幕上以文字形式打印 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]);
    }
   }

}
4

2 回答 2

2

本着游戏的精神,让我们创建一个可以处理的层次结构。最大的范围是游戏,它将动作委托给其他类。我们还将有 3 个类别:Deck、Dealer、Player。

一个游戏会有一个经销商,一个玩家的 ArrayList

然后,游戏可以告诉庄家创建和洗牌。您可以调用一个 dealCards,将 Players 作为参数传递给经销商,经销商可以根据玩家的数量,为他们提供 Deck 中的下一个元素,并从 Deck 中删除该元素。

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

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){....}
}
于 2013-01-22T16:38:46.260 回答
0

您的 Card / Deck 类应分为两个类。

Card 类将描述一张卡片。

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;
    }

}

Deck 类描述一副纸牌。

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 或任何面向对象的计算机语言的重点是将您的问题分解为更小的类,每个类都做一件事并且做得很好。

于 2013-01-22T16:51:23.523 回答