2012-11-19 36 views
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(); 
    } 
} 

它做的事情,它遍历所有的时间和输出卡点,玩家每一次。但是当我运行这个时,它只会给出最后一名球员的两张牌。我明白为什么会这样。但是我想要一个建议来解决这个问题。

我应该创建一个新的二维数组长度播放器和大小2Xn或有另一种方式,我应该这样做吗?

+0

你真的在每个循环调用'printStats'吗? – thedan

+0

我不知道任何其他方式 – user1796681

+0

printStats是一种查看每个玩家卡片和点数的方法。这种类型的方法通常在所有玩家都有牌和点看之后才会被调用,而不是在你仍然设置所有东西的时候,就是这样。请看下面的答案,以便您在不添加更多阵列的情况下简化设计。 – thedan

回答

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,则可以使其更加有用。这可以让你使用相同的系统进行可能不仅使用2张卡片的奥特牌游戏。

0

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