1

我在二十一点游戏中需要帮助。我有一个数组中的卡片组,每次我拿出一张卡片并处理它时,数组都会重新分配为比大小小一个。所以我有这个循环,向每个第 n 个玩家发两张牌

        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);
        }

我想要做的是在向每个玩家发两张牌后打印出牌和最终点数。所以我有这个方法 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();
    }
}

它的作用是它每次迭代并每次输出卡点和玩家。但是当我运行它时,它只给出最后一个玩家的两张牌。我明白为什么会这样。但我想要一个关于如何解决这个问题的建议。

我应该创建一个新的 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 个数组。当你遍历这个数组时,你可以使用setA()andsetB()方法给玩家他们的牌。一旦每个玩家都有卡片,您就可以再次遍历数组并使用getA()getB()打印卡片。Usingpoints()为您提供了一种简单的方法来计算每个玩家手牌的分数,而无需拖拽额外的数组。

如果您使用 List 或 ArrayList 而不是使用显式的 A、B 属性来保存卡片,则可以使此功能更加有用。这将使您可以将相同的系统用于可能不仅使用 2 张牌的其他纸牌游戏。

于 2012-11-19T23:00:51.740 回答
0

玩家“有”手...所以给玩家他的牌!换句话说,创建一个代表玩家当前卡片的字段。然后,当你发牌时,做player.hit(Card newCard),然后展示他的手,就做List<Card> player.getHand()

于 2012-11-19T22:48:57.930 回答