【问题标题】:Blackjack game using dice使用骰子的二十一点游戏
【发布时间】:2012-10-24 02:40:29
【问题描述】:

我正在用 Java 做一个项目,我在其中使用骰子来模拟二十一点游戏,但是,我遇到了一个我写错代码的地方。如果玩家得分高于他,我正试图让经销商模拟动作。此外,我的 checkWinner() 方法似乎在错误的时间激活了。我不是要求任何人修复它,而是告诉我代码哪里出错了。

public class BlackJack {

    static PairOfDice cards = new PairOfDice();
    static Scanner scan = new Scanner(System. in );
    static int playerScore, dealerScore, player, dealer, tempScore;
    static boolean newGame;
    static String play, hit;


    public static void main(String[] args) {
        newGame();
        dealerRoll();
        playerRoll();

        // checkWinner();
    }

    public static void newGame() {

        System.out.println("Would you like to play blackjack? y or n?");
        play = scan.nextLine();

        if (play == "y"); {
            newGame = true;
        }
        if (play != "y") newGame = false;
    }

    public static void dealerRoll() {
        while (newGame) {
            cards.rollDice();
        }

        dealerScore = (cards.rollDice());
        System.out.println("Dealer score is: " + dealerScore);

        if (dealerScore <= 15 && playerScore > dealerScore) tempScore = cards.rollDice();
        System.out.println("The dice roll was: " + tempScore);
        dealerScore += tempScore;
        System.out.println("Dealer score is: " + dealerScore);

    }

    public static void playerRoll() {
        while (newGame) {
            cards.rollDice();
        }

        playerScore = (cards.rollDice());

        System.out.println("You total is " + playerScore);

        while (playerScore < 21 || playerScore < dealerScore) {

            System.out.println("Would you like to take a hit? y or n?");
            hit = scan.nextLine();
            if (hit.equals("y")) {
                tempScore = cards.rollDice();
                System.out.println("The dice roll was: " + tempScore);
                playerScore += tempScore;
                System.out.println("Your score is now: " + playerScore);

            }
            else if (hit.equals("n")); {
                checkWinner();
            }
        }
    }

    public static void checkWinner() {
        if (playerScore == 21) System.out.println("You win!");
        else if (dealerScore == 21) System.out.println("Sorry, Dealer has won!");
        else if (dealerScore > playerScore) System.out.println("Sorry, Dealer has won!");
        else if (playerScore > dealer) System.out.println("You win!");
        else if (playerScore > 21) System.out.println("Sorry you busted, Dealer has won!");

        else if (dealerScore > 21) System.out.println("Dealer has busted, You win!");
    }
}​

【问题讨论】:

  • 首先,如果newGame 为真,您的while (newGame) { ... } 循环将永远运行,因为newGame 在循环中无法变为假。
  • 是的,我刚刚意识到,当我发布代码时,我将其更改为比较字符串而不是引用。
  • 我只是要提一下,cards.rollDice() 让我做了两次。

标签: java dice blackjack


【解决方案1】:

当您完成玩家回合时,您无法检查获胜者。只有在庄家转牌后才这样做。

【讨论】:

    【解决方案2】:

    我重新编写了代码并想出了这个。任何 cmets 将不胜感激。

    import java.util.*;
    
    
    public class BlackJack
    {
        static PairOfDice cards = new PairOfDice();
        static Scanner scan = new Scanner(System.in);
        static int playerScore, dealerScore, player, dealer, tempScore, takeHit, stand;
        private static boolean playGame;
        static String play= "y", yesPlay;
        static char hit;
    
    
        public static void main(String[] args)
        {
            newGame();
    
    
    
        }
    
        public static void newGame()
        {
            do
            {
    
                playerRoll();
                dealerRoll();
                stand();
                checkWinner();
                System.out.println("Would you like to play again? (Y/N)");
            } while (scan.next().toLowerCase().charAt(0) == 'y');
    
        }
    
        public static int takeHit()
        {
            return takeHit = cards.rollDice();
        }
    
        public static  int stand()
        {
            return playerScore;
    
    
        }
    
        public static void dealerRoll()
        {
            while(playGame)
            {
                cards.rollDice();
            }
    
            dealerScore = (cards.rollDice());
    
    
    
                    do
                    {
                        tempScore = takeHit();
    
                    //System.out.println("The dice roll was: " + tempScore);
                    dealerScore += tempScore;
                    System.out.println("Dealer score is: " + dealerScore);
                    }while(dealerScore <= 15 && playerScore > dealerScore);
    
    
        }
    
        public static void playerRoll()
        {
            while(playGame)
            {
                cards.rollDice();
            }
    
            playerScore = (cards.rollDice());
    
                System.out.println("Your total is " + playerScore);
    
    
                System.out.println("Would you like a hit?(Y/N)");
                hit = scan.next().toLowerCase().charAt(0);
    
                if(hit == 'y')
                    do
                    {
                        tempScore = takeHit();
                        //System.out.println("The dice roll was: " + tempScore);
                        System.out.println("The hit gave you : " + tempScore + " Your total is now: " + (playerScore += tempScore));
                        System.out.println("Would you like a hit?(Y/N)");
                    }while(scan.next().toLowerCase().charAt(0) == 'y');
    
    
    
                if(hit == 'n')
                            stand();
    
    
    
    
    
    
    
    
    
        }
    
        public static void checkWinner()
        {
            if (playerScore > 21)
                System.out.println("Sorry you busted, Dealer has won!");
            else
            if (dealerScore > 21)
                    System.out.println("Dealer has busted, You win!");
            else 
            if (playerScore == 21)
                System.out.println("You win!");
            else
            if (dealerScore == 21)
                System.out.println("Sorry, Dealer has won!");
            else if (dealerScore > playerScore && dealerScore <= 21)
                System.out.println("Sorry, Dealer has won!");
            else if (playerScore > dealer && playerScore <= 21)
                System.out.println("You win!");
    
    
    
    
    
        }
    

    【讨论】:

      猜你喜欢
      • 2023-03-21
      • 2020-05-18
      • 1970-01-01
      • 2014-10-22
      • 2022-11-12
      • 2015-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多