黑杰克印刷卡处理

时间:2012-11-19 22:27:28

标签: java arrays

我在黑杰克游戏中需要帮助。我有一个阵列中的卡牌组,每次我拿出一张牌并处理它时,阵列被重新分配到一个小于一个大小的牌。所以我有这个循环,每个第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还是有其他方式我应该这样做?

2 个答案:

答案 0 :(得分: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()setB()方法为玩家提供卡片。每个玩家都有牌后,再次循环播放阵列并使用getA()getB()打印出来。使用points()为您提供了一种简单的方法来计算每个玩家手的点,而无需拖动额外的阵列。

如果不使用明确的A,B属性来保存卡片,您可以使其更有用,您使用了List或ArrayList。这可以让你使用相同的系统进行oter纸牌游戏,这可能不仅仅使用2张牌。

答案 1 :(得分:0)

一名球员“有一只手”......所以给球员他的牌!换句话说,创建一个代表玩家当前牌的字段。然后,当您处理一张卡片时,请执行player.hit(Card newCard),然后展示他的手,只需执行List<Card> player.getHand()