gpt4 book ai didi

java - 黑 jack 打印发牌

转载 作者:太空宇宙 更新时间:2023-11-04 07:57:01 26 4
gpt4 key购买 nike

我在黑 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 张纸牌。

关于java - 黑 jack 打印发牌,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13463439/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com