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