3

ポーカー ゲームを作成するプロジェクトに取り組んでいます。説明は非常に明確ですが、オブジェクト指向プログラミングには非常に苦労しています。

このプロジェクトでは、カード、デッキ、ハンド、ポーカー ハンドの 4 つのオブジェクトを作成する必要があります。カード オブジェクトの作成は既に完了しており、現在はデッキ オブジェクトに取り組んでいます。今悩んでいる部分です。問題をグーグルで検索してみました。しかし、私はプログラミングの初心者なので、彼らのメソッドを実際に理解することはできません。たとえば、ArrayList の使い方がわかりません。私は非常に基本的な配列メソッドしか知りません。

次のコードは、Deck オブジェクトに対してこれまでに行ったことです。

import java.util.*;

public class Deck {

    public static final int CARDS_IN_DECK = 52;
    public static final int SHUFFLE_SWAPS = 700;
    int shufflex = 0;

    private Card[] cards;
    private int card_holder;
    private int seed;

    public Deck(int seed) {
        this.cards = new Card[CARDS_IN_DECK];

        seed = 0;

        for (int i = 2; i <= 14; i++) {
            for (int j = 0; j <= 3; j++) {

                if (j == 0) {
                    cards[seed] = new Card(i, 'c'); // c = Clubs

                } else if (j == 1) {
                    cards[seed] = new Card(i, 'd'); // d == Diamond

                } else if (j == 2) {
                    cards[seed] = new Card(i, 's'); // s== Spade

                } else if (j == 3) {
                    cards[seed] = new Card(i, 'h'); // h = Heart
                }
                seed++;
            }
        }

    }

    public void shuffle(){
        Random rand = new Random ();
        int randomNumber = rand.nextInt(51);
        int randomNumber2 = rand.nextInt(51);

        while( shufflex < SHUFFLE_SWAPS ){

            HOW DO I DO THE SWAP HERE? DON'T KNOW THE SYNTAX
            I KNOW I NEED TO CREATE ANOTHER ARRAY TO TEMPORARY STORE THE FIRST CARD
            THEN I REPLACE THE FIRST CARD WITH THE SECOND CARD
            AND THEN REPLACE THE SECOND CARD WITH THE TEMPORARY CARD

            shufflex++;
        }
    }

    public Card nextCard() {

    }

    public String toString() {

    }
}

そして、この部分の説明は次のとおりです。

Deck クラスは、52 枚のトランプのデッキを表します。Card オブジェクトの配列を使用して、デッキ内の実際のカードを管理します。

以下はクラスとインスタンス フィールドで、その後に Deck クラスのメソッドが続きます。次の順序で各項目を完了します。

クラス定数

次の public static クラス定数を宣言して初期化します。 CARDS_IN_DECK - デッキ内のカードの数を表す整数値。これを 52 に設定します。 SHUFFLE_SWAPS - デッキのシャッフル中にカードの位置を切り替える回数を表す整数値。数値が高いほど、デッキはよりランダムに完全にシャッフルされます。これを少なくとも 500 に設定します。 インスタンス フィールド

次のインスタンス フィールドを宣言します。 デッキ内の CARDS_IN_DECK カードを管理するために使用される Card オブジェクトの配列。配列内の各要素は、単一の Card オブジェクトです。Cards の配列から次に配られるカードのインデックスを保持する整数。ちなみに、この変数は 0 から始まり、カードが配られるたびに 1 ずつ増加します (以下の方法を参照)。テスト用に提供されたランダム シードを保持する整数変数。メソッド

以下は、完了する必要があるメソッドのリストです。

public Deck(int seed)- これは Deck クラスのコンストラクターです。まず、クラス定数「CARDS_IN_DECK」を使用して、Card オブジェクトの配列を初期化し、52 枚のカードを保持する必要があります。配列が初期化された後、一度に 1 要素ずつ配列を調べて、実際に Card オブジェクトを作成する必要があります。すべてのカードを作成する必要があり (4 つのスートごとに 2 ~ 14 の値)、重複があってはなりません。シード パラメータは、シードのインスタンス フィールドに格納する必要があります。ヒント: このコンストラクターでは、Card.CLUBS、Card.LOWEST_VALUE などを使用します。

public void shuffle()- このメソッドは、プレイする新しいハンドのデッキのリセットを処理します。このメソッドは、Random クラスを使用して乱数を生成することにより、デッキのシャッフルを処理する必要があります。0 ~ 51 の間で 2 つの整数をランダムに生成する必要があります。次に、それらの 2 つの位置でカードを交換する必要があります。たとえば、乱数が 20 と 11 で、クラブの 2 が配列の要素 20 にあり、ハートの 3 が配列の要素 11 にある場合、これら 2 枚のカードが交換された後、要素 20 は要素 20 の 3 を保持します。ハート、および要素 11 はクラブの 2 を保持します。クラス定数「SHUFFLE_SWAPS」が示す回数だけ、2 つの数字を生成し、対応する場所でカードを交換するこのプロセスを繰り返さなければなりません。ランダム シードが -1 でない場合、作成する Random オブジェクトは提供されたランダム シードを使用する必要があります。これにより、同じランダムシードでプログラムを実行するたびに、デッキが同じようにシャッフルされます。例えば、

Random rand = new Random(seed); ランダム シードが -1 の場合は、シードのない Random オブジェクトを作成します。これにより、プレイするたびに異なるゲームが作成されます。例えば、

Random rand = new Random(); 最後に、デッキから配られる次のカードを選択するために使用されるインデックスを 0 にリセットする必要があります。

public Card nextCard()- このメソッドは、次に配られるカードがある配列内の位置を知っているインスタンス フィールドに基づいて、デッキの次のカードを返します。カードを返す前に、この番号を更新して、次にメソッドが呼び出されたときにデッキの次のカードが返されるようにしてください (1 ずつ増やします)。

public String toString()- このメソッドは、単体テストに役立つデッキの文字列表現を返します。ヒント: Card オブジェクトの配列内の各 Card に対して Card クラスの toString() メソッドを呼び出します。


私はpublic Deck (int seed)正しい方法を得たと思います。それを見てもらえますか?カード オブジェクトは ( int value, char スーツ) のパラメーターを持っているので、デッキの場合は ( int, char ) を返しています。この方法の後、そこからどうすればよいのかよくわかりません。誰かがこれについて私にいくつかの指針を教えてもらえますか?

4

1 に答える 1

2

デッキに を使用するArrayList理由は 2 つあります。まず、カードの追加/削除が簡単になります。次に、シャッフル メソッドがありjava.utils.Collectionsます。したがって、ArrayList を作成するには: ArrayList<Card> deck = new ArrayList<Card>()、カードを追加するには: deck.add(someCard | int_index)、カードを削除するには: deck.remove(someCard | int_index)、シャッフルするには: deck = Collections.shuffle(deck)(インポートすることを忘れないでjava.utils.Collectionsください)。

于 2012-04-27T01:25:43.343 に答える