1

ブラックジャックゲームで助けが必要です。私はアレイにカードデッキを持っていて、カードを取り出して配るたびに、アレイはサイズより1つ小さいサイズに再認識されます。だから私は各n番目のプレーヤーに2枚のカードを配るこのループを持っています

        deck=createCardArray();
        shuffle(deck); 
        int[] players = createPlayers(n);
        int[] points = createPoints(n);

        for(int i = 1 ; i<= players.length; i++){
            Card a = dealCard(deck);
            updatePoints(players, points, i, a);
            Card b = dealCard(deck);
            updatePoints(players, points, i, b);
            printStats(players, points, a, b);
        }

私がやりたいのは、各プレイヤーに2枚のカードを配った後、カードと最終ポイントを印刷することです。だから私はこのように見えるこのメソッドprintstatsを持っています:

public static void printStats(int[] nplayers, int[] points, Card a, Card b){
    for (int i=0; i<nplayers.length;i++){
        System.out.println("Player " + nplayers[i] + ": Points " + points[i]);
        System.out.println("Card 1: " + a.showCardSuit() + " " + a.showCardValue());
        System.out.println("Card 2: " + b.showCardSuit() + " " + b.showCardValue());
        System.out.println();
    }
}

毎回繰り返し、毎回カードポイントとプレイヤーを出力します。しかし、これを実行すると、最後のプレーヤーの2枚のカードしか表示されません。なぜこれが起こるのか理解しています。しかし、私はこの問題を解決する方法として提案が欲しいです。

新しい2D配列の長さのプレーヤーとサイズ2Xnを作成する必要がありますか、それともこれを行う別の方法がありますか?

4

2 に答える 2

1

呼び出しているメソッドを含むPlayerクラスを作成することで、デザインを改善できます。単純な実装は次のようになります。

   public class Player{
        Card a;
        Card b;

        public Card getA() {
            return a;
        }
        public void setA(Card a) {
            this.a = a;
        }
        public Card getB() {
            return b;
        }
        public void setB(Card b) {
            this.b = b;
        }

        public int points(){
            //calculation for returning point value
            int points = 0;
            return points;
        }

    }

これで、2つの配列を使用する代わりに、各プレーヤーを含む1つの配列を使用できます。この配列をループすると、setA()andsetB()メソッドを使用してプレーヤーにカードを渡します。すべてのプレーヤーがカードを手に入れたら、配列をもう一度ループして、カードを印刷するために使用getA()します。getB()を使用points()すると、余分な配列をドラッグすることなく、すべてのプレーヤーのハンドのポイントを簡単に計算できます。

カードを保持するための明示的なA、Bプロパティを使用する代わりに、ListまたはArrayListを使用した場合は、これをさらに便利にすることができます。これにより、2枚のカードだけを使用しない可能性のある他のカードゲームにも同じシステムを使用できるようになります。

于 2012-11-19T23:00:51.740 に答える
0

プレイヤーは「持っている」ハンドです...だからプレイヤーに彼のカードを渡してください!つまり、プレーヤーの現在のカードを表すフィールドを作成します。次に、カードを配るときはplayer.hit(Card newCard)、それから彼の手を見せるために、List<Card> player.getHand()

于 2012-11-19T22:48:57.930 に答える