0

非常に単純なブラック ジャック ゲームを作ろうとしていますが、配列リストからカードを引いてプレイヤーの手とディーラーの手に入れるのに問題があります...

これが私がこれまでに持っているものです。喜んで助けてくれる人なら誰でも大歓迎です。

また、私は多くの場合、最も効率的な方法でそれを行っていないことに気付きました...

カードアレイリスト

import java.util.ArrayList;

public class deck {
    ArrayList<card> deck = new ArrayList<card>();

public deck () {

    deck = new ArrayList<card>();

    //Spades
    deck.add(new card ("2", "Spades"));
    deck.add(new card ("3", "Spades"));
    deck.add(new card ("4", "Spades"));
    deck.add(new card ("5", "Spades"));
    deck.add(new card ("6", "Spades"));
    deck.add(new card ("7", "Spades"));
    deck.add(new card ("8", "Spades"));
    deck.add(new card ("9", "Spades"));
    deck.add(new card ("10", "Spades"));
    deck.add(new card ("2", "Spades"));
    deck.add(new card ("J", "Spades"));
    deck.add(new card ("Q", "Spades"));
    deck.add(new card ("K", "Spades"));
    deck.add(new card ("A", "Spades"));
    //Clubs
    deck.add(new card ("2", "Clubs"));
    deck.add(new card ("3", "Clubs"));
    deck.add(new card ("4", "Clubs"));
    deck.add(new card ("5", "Clubs"));
    deck.add(new card ("6", "Clubs"));
    deck.add(new card ("7", "Clubs"));
    deck.add(new card ("8", "Clubs"));
    deck.add(new card ("9", "Clubs"));
    deck.add(new card ("10", "Clubs"));
    deck.add(new card ("2", "Clubs"));
    deck.add(new card ("J", "Clubs"));
    deck.add(new card ("Q", "Clubs"));
    deck.add(new card ("K", "Clubs"));
    deck.add(new card ("A", "Clubs"));
    //Hearts
    deck.add(new card ("2", "Hearts"));
    deck.add(new card ("3", "Hearts"));
    deck.add(new card ("4", "Hearts"));
    deck.add(new card ("5", "Hearts"));
    deck.add(new card ("6", "Hearts"));
    deck.add(new card ("7", "Hearts"));
    deck.add(new card ("8", "Hearts"));
    deck.add(new card ("9", "Hearts"));
    deck.add(new card ("10", "Hearts"));
    deck.add(new card ("2", "Hearts"));
    deck.add(new card ("J", "Hearts"));
    deck.add(new card ("Q", "Hearts"));
    deck.add(new card ("K", "Hearts"));
    deck.add(new card ("A", "Hearts"));
    //Diamonds
    deck.add(new card ("2", "Diamonds"));
    deck.add(new card ("3", "Diamonds"));
    deck.add(new card ("4", "Diamonds"));
    deck.add(new card ("5", "Diamonds"));
    deck.add(new card ("6", "Diamonds"));
    deck.add(new card ("7", "Diamonds"));
    deck.add(new card ("8", "Diamonds"));
    deck.add(new card ("9", "Diamonds"));
    deck.add(new card ("10", "Diamonds"));
    deck.add(new card ("2", "Diamonds"));
    deck.add(new card ("J", "Diamonds"));
    deck.add(new card ("Q", "Diamonds"));
    deck.add(new card ("K", "Diamonds"));
    deck.add(new card ("A", "Diamonds"));
}

public ArrayList<card> getCards(){
    return deck;
}

public card deal(){
    card one = deck.get((int) (Math.random() * deck.size()));
    deck.remove(one);
    return one;
}

}

プレイヤー & ディーラー ハンド クラス

ここで、dealPlayer() と dealDealer() を配列から 2 枚のランダムなカードで満たそうとしています。私はちょうど今、切り株にいて、うまくいくものを理解できないようです...事前に感謝します他に投稿する必要がある場合は、お知らせください。

import java.util.ArrayList;

public class dealer {

    deck deck = new deck();
    String dealerTopCardString = "";
    card playerHandCard;
    card dealerHandCard;
    ArrayList<card> dealerHand = new ArrayList<card>();
    ArrayList<card> playerHand = new ArrayList<card>();

public void start() {
    dealerHand = new ArrayList<card>();
    playerHand = new ArrayList<card>();
}

public void dealPlayer() {
    //LOOKING FOR HELP HERE
}

public void dealDealer() {
    //LOOKING FOR HELP HERE
}

public String getPlayerHand() {

    String playerHandString = "";
    for (int i = 0; i < playerHand.size(); i++)
        playerHandCard = playerHand.get(i);
        card card = new card(playerHandCard.getValue(), playerHandCard.getSuit());
        playerHandString += "\n";
        playerHandString += card.getValue();
        playerHandString += "\t";
        playerHandString += card.getSuit();

        return playerHandString;

    }

public String getDealerHand() {

        String dealerHandString = "";
        for (int i = 0; i < dealerHand.size(); i++)
            dealerHandCard = dealerHand.get(i);
            card card = new card(dealerHandCard.getValue(), dealerHandCard.getSuit());
            dealerHandString += "\n";
            dealerHandString += card.getValue();
            dealerHandString += "\t";
            dealerHandString += card.getSuit();

            return dealerHandString;
    }

public String getDealerTopCard(){

    return getDealerTopCard;
}

public int getPlayerHandValue(){

    return getPlayerHandValue;
}

public int getDealerHandValue(){


    return getDealerHandValue;
}

public void resetDealerHand(){
    dealerHand.clear();
}

public void resetPlayerHand(){
    playerHand.clear();
}

}
4

2 に答える 2

5

質問を投稿するときは、通常、試したことを述べるのがベスト プラクティスです。そうすれば、どこが間違っているのかを他の人が確認するのに役立ちます。

問題を解決するにはどうすればよいか、一般的なアドバイスをお伝えします。実装に特定の問題がある場合は、新しい質問をすることができます (または、関連性に応じてこの質問を更新してください)。

ブラックジャックの実際のゲームでは、デッキをシャッフルしてから、上から 4 枚のカードを取り除きます。ここでも同じことができます:

  1. ArrayList をシャッフルする
  2. 上から 4 枚のカードを取り除き、プレイヤー/ディーラーの手札に入れます。remove(このメソッドを使用して、デックの最初または最後の要素を削除できるかもしれません。)

これは宿題のように見えるので、ArrayList を使用する必要があるかもしれません。ただし、これはここで使用するのに最適なデータ構造ではありません。選択肢があれば、代わりにArrayDequeを使用します。コレクションから最初または最後のアイテムを取得するための効率的なpop()メソッドがあります。remove()

(ヒント: "deque" はdouble-ended-queue の略ですが、"deck" と発音します。これは、概念的にトランプのデッキのようなものだからです...)

于 2013-09-10T22:46:33.897 に答える
3

Collections#shuffleを使用してカードのデッキをシャッフルするだけです

Collections.shuffle(deck);

次に、 List#removeを使用してデッキの一番上から次のカードを取得するだけなので、スターティング ハンドを処理するためのこのようなもの

playerHand.add(deck.remove(0));   // top card to player
dealerHand.add(deck.remove(0));   // top card to dealer
playerHand.add(deck.remove(0));
dealerHand.add(deck.remove(0));
于 2013-09-10T22:45:04.303 に答える