java - 黑 jack 打印发牌

标签 java arrays

我在黑 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/

相关文章:

java - 如何从 servlet 内部转发到 web.xml 路径?

java - 在 Pax Exam 包含的测试中访问编译资源

javascript - 如何使用单选按钮连接数组元素

java - 如果行长度不相等,如何将行长度转换为列长度并反转 (java)

php - 根据 PHP 中第二个数组的键获取数组值

arrays - 在 Powershell 中创建表

java - 添加多个元素到列表并单击 cssSelector WebDriver Java

java - 如何使用 Selenium 在 PhantomJS 中设置代理身份验证?

javascript - 将对象数组转换为属性数组

java - 执行 JDBC 查询时出现异常 - 由于 Logstash 的时区偏移转换而导致非法即时