ポーカー ゲームを作成するプロジェクトに取り組んでいます。説明は非常に明確ですが、オブジェクト指向プログラミングには非常に苦労しています。
このプロジェクトでは、カード、デッキ、ハンド、ポーカー ハンドの 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 ) を返しています。この方法の後、そこからどうすればよいのかよくわかりません。誰かがこれについて私にいくつかの指針を教えてもらえますか?