2012-04-27 44 views
3

私は、ポーカーゲームを作成するプロジェクトに取り組んでいます。命令ははっきりしていますが、私はオブジェクト指向プログラミングに大きな問題を抱えています。ポーカーゲーム:Javaでデッキを作る

このプロジェクトでは、カード、デッキ、ハンド、ポーカーハンドの4つのオブジェクトを作成する必要があります。私は既にカードオブジェクトの作成を終えていて、今はデッキオブジェクトを扱っています。それは私が今困っている領域です。私は私の問題をグーグルで調べてみました。しかし、私はプログラミングの初心者なので、実際にはその方法は得られません。たとえば、ArrayListの使い方はわかりません。私は非常に基本的な配列メソッドしか知りません。

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() { 

    } 
} 

そして、ここでは、この部分の説明です:

デッキクラスは52枚のトランプのデッキを表し

次のコードは、私がデッキオブジェクトに対してこれまでにやっていることです。デッキ内の実際のカードを管理するために、一連のCardオブジェクトを使用します。

次に、クラスフィールドとインスタンスフィールドのあとに、Deckクラスのメソッドを示します。次の順序で各項目を完成させてください。

クラス定数

宣言し、初期化する次のパブリック静的クラス定数: CARDS_IN_DECK - デッキのカードの数を表す整数値。これを52に設定します。 SHUFFLE_SWAPS - デッキのシャッフル中にカードが位置を切り替える回数を表す整数値。数字が高いほど、ランダムで徹底的にデッキがシャッフルされます。これを少なくとも500に設定してください。 インスタンスフィールド

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

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

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

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

Random rand = new Random(seed); ランダムシードが-1の場合、再生するたびに異なるゲームを作成するランダムなオブジェクトを作成します。例えば、

Random rand = new Random();最後に、デッキから配られるべき次のカードを選択するために使用されるインデックスがpublic Card nextCard()

0にリセットされなければならない - この方法は、インスタンスに基づいて、デッキ内の次のカードを返します次のカードが配られるアレイ内の位置を知っているフィールド。カードを返却する前に、この番号を更新して、次回のメソッド呼び出し時にデッキ内の次のカードが返されるようにします(1ずつ増やしてください)。

public String toString() - このメソッドは、ユニットテストに便利なDeckのString表現を返します。ヒント:Cardオブジェクトの配列内の各CardのCardクラスのtoString()メソッドを呼び出します。


私はpublic Deck (int seed)メソッドが正しいと思います。あなたはそれを見てみることができますか?カードオブジェクトは(int値、charスーツ)のパラメータを持っているので、デッキでは、私は返す(int、char)です。この方法の後、私はそこからどうやって行くのかは分かりません。誰かが私にこの点についていくつか指摘してもらえますか?

+0

内部forループは、for(int j = 0; j <= 3; j ++){'を表示するものではありません。ここでforループを使いたい場合は、まず 'char [] suits = {'c'、 'd'、 'h'、 's'};'の配列を宣言し、それをループします。 –

+0

これは宿題のように読まれ、それが '宿題'タグを加えるべきならば読みます。 –

+0

@ Hovercraftあなたのご意見ありがとうございます。私はあなたが言っていることを得ると思います。スーツ用の配列を作成する場合は、for(int j = 0; j ScoutBlade

答えて

2

デッキには、2つの理由からArrayListを使用する必要があります。まず、カードの追加/削除が簡単になります。次に、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をインポートしてください)。

+0

私は自分の問題をグーグルで調べていましたが、多くのサンプルコードでArrayListが使用されていました。しかし、私はクラスでこのメソッドをカバーしていないので、実際には使用できません。あなたのご意見ありがとうございます。 – ScoutBlade

+0

ArrayListは、Javaの基本的なデータ構造です。ちょうどそれを使用します。あなたはもっと幸せになるでしょう。これ以上アレイを使用することはありません。 –

+0

@Tony ArrayListは便利ですが、通常の配列を置き換えるわけではありません。 –

関連する問題