0

だから私はデッキのコードを持っていますが、別のクラスを作成して、それぞれ 10 枚のカードの 4 ハンドを処理する方法がわかりません。もう 1 つのクラスは、テキストで画面に 10 枚のランダムなカードの 4 つの手札を印刷する必要があります。誰かがこれを達成する方法のコードを見せてもらえますか? 私も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 つのクラスがあります。

ゲームにはディーラーがあり、プレイヤーの ArrayList にはディーラーがいます ディーラーにはデッキがあります プレイヤーにはカードを示す文字列の ArrayList があります

その後、ゲームはディーラーにデッキを作成してシャッフルするように指示できます。プレーヤーをパラメーターとしてディーラーに渡す dealCards を呼び出すことができます。ディーラーは、プレーヤーの数に基づいて、デッキ内の次の要素を与え、その要素をデッキから削除できます。

すべてのカードが配られたら、ゲームはプレーヤーに手札を見せるように指示し、結果を出力します。

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

カード/デッキクラスは2つのクラスに分割する必要があります。

カードクラスはカードを記述します。

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

これら2つのクラスがどのように連携するかを理解するまで、他のクラスを紹介しても意味がありません。

Java、またはオブジェクト指向のコンピューター言語のポイントは、問題をより小さなクラスに分割し、それぞれが1つのことを実行してそれをうまく実行することです。

于 2013-01-22T16:51:23.523 に答える