我在黑 jack 游戏中需要帮助。我在数组中有一副牌,每次我取出一张牌并处理它时,数组都会被重新分配为小于大小的一个。所以我有这个循环,向每个第 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 还是有其他方法可以做到这一点?
您可以通过创建一个包含您正在调用的方法的 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()
为您提供了一种简单的方法来计算每个玩家手牌的分数,而无需拖动额外的数组。
如果您使用 List 或 ArrayList,而不是使用显式的 A、B 属性来保存卡片,则可以使其更加有用。这将使您可以使用相同的系统进行其他纸牌游戏,而这些游戏可能不仅仅使用 2 张纸牌。
我是一名优秀的程序员,十分优秀!