当前位置: 首页 > 知识库问答 >
问题:

Java发布21点程序中玩家和经销商的打印手

景阳平
2023-03-14

所有其他的工作都很好,除了我遇到一个问题,打印出牌的球员(如果他们‘击中’),因为我不知道什么牌的球员抽了什么牌,谁抽了什么牌,它从8开始,因为前7张牌被抽了,但我不知道谁得到了什么和多少。所以我试着用一种方法打印出每个球员的手牌,但我有很多麻烦,这可能需要一些帮助。我想在我的输出中打印玩家得到的卡片。我将发布我的卡片、玩家和BlackJackGame类,因为我的Dealer类与Player非常相似。

Card.java

import java.util.Random;

public class Card
{
    private String suit, rank; 
    private int value;


    public Card(String suit, String rank)
    {
        this.suit = suit;
        this.rank = rank;
    }

    public String getRank()
    {
        return rank;
    }

    public int Value()
    {
        if(rank.equals("2"))
        {
            value=2;
        }
        else if(rank.equals("3"))
        {
            value=3;
        }
        else if(rank.equals("4"))
        {
            value=4;
        }
        else if(rank.equals("5"))
        {
            value=5;
        }
        else if(rank.equals("6"))
        {
            value=6;
        }
        else if(rank.equals("7"))
        {
            value=7;
        }
        else if(rank.equals("8"))
        {
            value=8;
        }
        else if(rank.equals("9"))
        {
            value=9;
        }
        else if(rank.equals("10"))
        {
            value=10;
        }
        else if(rank.equals("A"))
        {
            Random rand = new Random();
            int count = rand.nextInt(1) +1;
            if(count == 1)
            {
                value=11;
            }
            else
                value= 1;
        }
        else if(rank.equals("Q"))
        {
            value=10;
        }
        else if(rank.equals("J"))
        {
            value=10;
        }
        else if(rank.equals("K"))
        {
            value=10;
        }

        return value;
    }


    public String toString()
    {
    return(rank + " of " + suit);
    }

}

Player.java

public class Player
{
    private int cValue;
    private int cCount; //Card count used to count how many 'cards' added
    Card[] deck= new Card[52];
    private int sum;

    public Player()
    {
        cCount=0;

    }

    public Card addCard(Card a)
    {
        deck[cCount] = a;
        cCount++;
        return a;

    }


    public int getcCount()
    {
        return cCount;
    }


   public int getValue()
   {
        int total=0;

        for(int i=0; i < cCount; i++)
        {
            total += deck[i].Value();
        }

        return total;


   }

BlackJackGame.java

public class BlackJackGame
{



    public static void main(String []   args)
    {
        Card[] deck = new Card[52];
        Player[] player = new Player[3];
        int loopcount=0; 
        String p1result = " ", p2result = " ", p3result = " ", p4result = " ", dresult = " "; 

        String[] suit = {"Hearts", "Clubs", "Spades", "Diamonds"};
        String[] rank = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};

        for(int i=0; i<13; i++)
        {
            for(int x=0; x<4;x++)
            {
                deck[loopcount] = new Card(suit[x], rank[i]);
                loopcount++;
            }
        }

        System.out.println("Shuffling...");

        for(int i=0; i< deck.length; i++) //Shuffle
        {
            Card tmp = deck[i];
            int count= (int)(Math.random()* deck.length);
            deck[i] = deck[count];
            deck[count] = tmp;

        }

        Player player1 = new Player();
        Player player2 = new Player();
        Player player3 = new Player();

        System.out.println("Welcome to our BlackJackGame!");

        System.out.println("Welcome Dealer!");

        Dealer dealer = new Dealer();

        System.out.println("Let's deal the cards!");

        player1.addCard(deck[0]);

        player2.addCard(deck[1]);

        player3.addCard(deck[2]);


    System.out.println("And now the Dealer gets his card...");

        dealer.addCard(deck[3]);

    System.out.println("Now we get our second cards!");

    System.out.println("Okay Dealer, deal out the cards!");

        player1.addCard(deck[4]);

        player2.addCard(deck[5]);

        player3.addCard(deck[6]);

        dealer.addCard(deck[7]);

        int count =8;
        int i=0;

        do
        {
            p1result = "";
            p2result = "";
            p3result = "";
            dresult = "";
        int dvalue = dealer.getValue();
        int p1value = player1.getValue();
        int p2value = player2.getValue();
        int p3value = player3.getValue();
        while(p1value < 17) //hit
        {
            player1.addCard(deck[count]);
            count++;
            p1value = player1.getValue();
        }
        if(p1value > 21)
        {
            p1result = "Bust!";
        }
        if(p1value <21 && p1value >17)//stand
        {
        }
        while(p2value < 17)//hit
        {
            player2.addCard(deck[count]);
            count++;
            p2value = player2.getValue();
        }
        if(p2value > 21) //bust
        {
            p2result = "Bust!";
        }
        if(p2value <21 && p2value >17) //stand
        {
        }
        while(p3value < 17) //hit
        {
            player3.addCard(deck[count]);
            count++;
            p3value = player3.getValue();
        }
        if( p3value > 21)
        {
            p3result = "Bust!";
        }
        if(p3value <21 && p3value >21) //stand 
        {
        }

        while(dvalue < 17)
        {
            dealer.addCard(deck[count]);
            count++;
            dvalue = dealer.getValue();
        }
        if(dvalue > 21) //Bust
        {
            p1value = player1.getValue();
            p2value = player2.getValue();
            p3value = player3.getValue();
            if(p1value == 21 || p1value <21) 
            {
                p1result = "Win!";
            }
            if(p2value == 21 || p2value <21)
            {
                p2result = "Win!";
            }
            if(p3value == 21 || p3value <21 )
            {
                p3result = "Win!";
            }
        }

        if(dvalue < 21 && dvalue >= 17) //For Dealer values in between
        {
            p1value = player1.getValue();
            p2value = player2.getValue();
            p3value = player3.getValue();
            dvalue = dealer.getValue();

            if(p1value == dvalue)
            {
                p1result = "Push!";
            }
            if(p1value > dvalue)
            {
                p1result = "Win!";
            }
            if(p1value < dvalue)
            {
                p1result = "Lose!";
            }
            if(p2value == dvalue)
            {
                p2result = "Push!";
            }
            if(p2value > dvalue)
            {
                p2result = "Win!";
            }
            if(p2value < dvalue)
            {
                p2result = "Lose!";
            }
            if(p3value == dvalue)
            {
                p3result = "Push!";
            }
            if(p3value > dvalue)
            {
                p3result = "Win!";
            }
            if(p3value < dvalue)
            {
                p3result = "Lose!";
            }

        }

        if(dvalue == 21 )
        {
            p1value = player1.getValue();
            p2value = player2.getValue();
            p3value = player3.getValue();
            dvalue = dealer.getValue();
            if(p1value == dvalue)
            {
                 p1result = "Push!";
            }
            if(p1value < dvalue || p1value > dvalue)
            {
                 p1result = "Lose!";
            }
            if(p2value == dvalue)
            {
                p2result = "Push!";
            }
            if(p2value < dvalue || p2value > dvalue)
            {
                p2result = "Lose!";
            }
            if(p3value == dvalue)
            {
                p3result = "Push!";
            }
            if(p3value < dvalue || p3value > dvalue)
            {
                p3result = "Lose!";
            }

        } 
        System.out.println("The BlackJack Game is Complete: ");
        System.out.println("Results: ");
        System.out.println("Dealer: " +deck[3] + " " + deck[7] + " " +("total of " +dealer.getValue() ));
        System.out.println("Player1: " +deck[0] + " " + deck[4] + " "+("total of " +player1.getValue() )+ ": " +p1result);
        System.out.println("Player2: " +deck[1] + " " + deck[5] + " "+("total of " +player2.getValue() )+ ": " +p2result);
        System.out.println("Player3: " +deck[2] + " " + deck[6] + " "+("total of " +player3.getValue() )+ ": " +p3result);
        i++;
    }
    while(i <1);

    }

}

输出示例:

BlackJack Game is Complete!
Results!
Dealer : 6 of Clubs 8 of Spades total 17
Player1: 2 of Clubs 2 of Spades total 16 Lose!
Player2: Q of Hearts Q of Spades total 20 Win!
Player3: A of Spades 6 of Hearts total 17 Push!

//问题是当牌被打印出来时,我打印出每个玩家拥有的前两张牌和已知的发牌人。我遇到的问题是,如果玩家或庄家‘命中',就像你看到的玩家1,我不知道哪张牌被击中/哪位玩家拥有它们,我想知道如何在player类中有一个方法,可以打印每个玩家的手牌,包括庄家和他们拥有的牌,以供我输出。这就是我需要帮助的地方。其他的一切都很好。

共有1个答案

陆昕
2023-03-14

首先,我建议使用一个switch语句,而不是所有其他的如果来表示rank,这样会更简洁:)

第二,在21点中,一张Ace没有一个“随机”值1或11;这是一个11,除非是一个11使球员破产。

第三,我会考虑使用一个列表为甲板。然后你所需要做的就是“洗牌”列表和当你发牌时,从列表中移除最上面的一张牌,并将其添加到玩家的手牌中。(请参阅Collections.Shuffle)

现在要解决最初的问题,您应该在player类中有一个List hand。然后在player类中添加扩展方法来打印手牌;它看起来应该是这样的:

   public void printHand() {
      ListIterator<Card> it = hand.listIterator();
      if(it.hasNext())
         System.out.print(it.next());
      while(it.hasNext())
         System.out.print(", " + it.next());
      System.out.println();
   }
 类似资料:
  • 我想用Java制作一个21点游戏。我使用数组来表示卡片。我在获取牌值和使用每个玩家必须计算每个玩家的牌值时遇到了问题。我有四个类,卡牌,玩家,荷官和21点游戏 - 司机。我将发布卡片及其相关的价值方法,玩家和21点游戏作为经销商与玩家完全相同。 //Card.Java //Player.java //BlackJackGame.java 输出

  • 1.买家发现地址填写错误或要更改收货地址该咋办? 在商家未发货之前,买家可以直接联系商家更改地址。

  • 商家发货 打开后台-订单-订单列表 1.点击筛选出待发货的订单可进行批量操作。批量发货、批量打印快递单、批量打印发货单。 2.点击发货时,弹出框显示待发货的商品,发货方式可选需要物流和无需物流。 选择物流公司:三通一达,并填写快递单号。 保存完成后,订单系统会显示已发货状态 3.当用户因更个人原因需要修改地址时,可协调商家对地址进行修改 点击修改地址时,弹出框显示收货人、收货人手机号、收货人固定电

  • 我有一副牌洗牌和返回结果,但现在我想根据用户输入更改输出:玩家数量和每个玩家的纸牌数量。 原始代码: CardRun-main 甲板级 卡片类 纸牌输出甲板:54 玩家数量:4(由用户输入) 每个用户的纸牌数量:5(由用户输入) 玩家1:黑桃A,红心2,红小丑 玩家2:红心8,梅花10,红心9 玩家1手牌更好。

  • 问题内容: 我是一个相对较新的程序员,所以这可能是一个非常简单的问题,但是让我有些困惑。 我正在尝试将Java GUI的最终输出打印到打印机。现在,在我的GUI中,有了它,当您单击打印时,会弹出一个弹出窗口,列出可用的打印机,并根据您选择的打印机,将其打印到该打印机。 但是事实并非如此。我通过搜索互联网来解决此问题,从而获得了大部分代码,并找到了一些很有前途的代码。但是,它是从文件打印出来的。因此

  • 目录 21.1. CREATE TRIGGER语法 21.2. DROP TRIGGER语法 21.3. 使用触发程序 MySQL 5.1包含对触发程序的支持。触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象。例如,下述语句将创建1个表和1个INSERT触发程序。触发程序将插入表中某一列的值加在一起: mysql> CREATE TABLE account (acct_num