【问题标题】:Simple blackjack game; gone awry: help needed简单的二十一点游戏;出了差错:需要帮助
【发布时间】:2015-03-16 06:53:38
【问题描述】:

这个程序的目的是创建一个随机数生成器,并选择编号为 1-11 的牌(11 是 Ace)。游戏规则不如完成的工作程序重要,我不需要花色、金钱或高分表。

我尝试创建一个卡片生成器,每次调用它时都会生成一个随机卡片值,但失败了。正如您将在代码中看到的那样,int card1 = 1 +r.nextInt();每次返回相同的值。如果它为 card1 调用 4,那么所有未来的 card1(s) 也将是 4。这不是我在创建 int 值 1-11 inc 时的想法。我曾希望 card1 每次都会返回一个随机值。

接下来我尝试将卡片总数和 newCard1 添加到当前 int 中,但失败了。这也无法按预期工作。

这是我到目前为止尝试的代码,请记住,当您向我解释您的更正时,我是一年级学生,几乎没有基础知识:

  import java.util.Random;
  import java.util.Scanner;

  class blackj
{
public static void main(String[] args)
{
    Random r = new Random();
    Scanner keyboard = new Scanner(System.in);
    String name;

    boolean playing = true;
    boolean notPlaying = true;
    int card1 = 1 + r.nextInt(11);
    int card2 = 1 + r.nextInt(11);
    int dcard1 = 1 + r.nextInt(11);
    int dcard2 = 1 + r.nextInt(11);

    int ptotal = card1+card2;
    int dtotal = dcard1+dcard2;

    int pcurrent = ptotal+card1;
    int dcurrent =dtotal+dcard1;
    {   


        System.out.println("Welcome to Blackjack ! " );
            System.out.println("Score as close to 21 without going over to win ");
                System.out.println("What is your name?");
            name = keyboard.nextLine();
                System.out.println("Hello " + name);
                System.out.println("Let's play some BlackJack!");
            System.out.println("The dealer shows: \n\t\t" +dcard1 );
            System.out.println("Your first card is: \n\t\t " +card1 );
            System.out.println("Your second card is: \n\t\t" +card2  );
            System.out.println("Giving you a grand total of: " +ptotal );

        while (playing)
            {
            System.out.println("Would you like to (H)it or (S)tick?");
                Scanner hit1 = new Scanner(System.in);
                String a = hit1.nextLine();
                if(a.equals("s"))
            {
                System.out.println("You stick at " );
                System.out.println("Now it's the dealers turn\n Dealer must draw until 17");
            }
                if(a.equals("h"))
            {
                System.out.println("Your next card is " +card2 );
                System.out.println("Giving you a new total of "+pcurrent );
                    if ((pcurrent >=22))
                System.out.println("You Busted! \nSorry! you lose");
            }
            else
            {
                System.out.println("Please press H or S");
            }

            }
      }


  }

  }

如您所见,我还没有进入经销商部分。

【问题讨论】:

  • stackoverflow.com/questions/5533191/… 这应该会有所帮助。
  • 真是个绝妙的主意,你在这个论坛上讽刺你得到积分吗?你指的是哪些方法?以及您如何建议我使用这些方法来创建我已经失败的事情?
  • @hs2345 我去看看,谢谢。
  • @Vincent 鉴于您帖子的最后一行,我喜欢您批评讽刺。

标签: java


【解决方案1】:

在您的 while 循环中再次调用 random:

int newCard = 1 + r.nextInt(11);

这会将变量设置为新的随机值(如果您需要重置原始卡片变量,您也可以这样做)。然后确保对照这张新的随机卡片检查用户的输入。

完成这项工作后,您可能想查看code review,了解有关构建程序的一些提示。

【讨论】:

  • 我相信他只想循环生成一张下一张卡片,但你明白了......
【解决方案2】:

使用您当前的方法,这将帮助您开始新一轮

    Random r = new Random();
    Scanner keyboard = new Scanner(System.in);
    String name;

    boolean playing = true;

    System.out.println("Welcome to Blackjack ! ");
    System.out.println("Score as close to 21 without going over to win ");
    System.out.println("What is your name?");
    name = keyboard.nextLine();
    System.out.println("Hello " + name);
    int card1, card2 = 0, dcard1, dcard2, ptotal, dtotal, pcurrent = 0, dcurrent;
    boolean newRound = true;
    while (playing) {
        if (newRound) {
            newRound = false;
            card1 = 1 + r.nextInt(11);
            card2 = 1 + r.nextInt(11);
            dcard1 = 1 + r.nextInt(11);
            dcard2 = 1 + r.nextInt(11);

            ptotal = card1 + card2;
            dtotal = dcard1 + dcard2;

            pcurrent = ptotal + card1;
            dcurrent = dtotal + dcard1;
            System.out.println("Let's play some BlackJack!");
            System.out.println("The dealer shows: \n\t\t" + dcard1);
            System.out.println("Your first card is: \n\t\t " + card1);
            System.out.println("Your second card is: \n\t\t" + card2);
            System.out.println("Giving you a grand total of: " + ptotal);
        }

        System.out.println("Would you like to (H)it or (S)tick?");
        Scanner hit1 = new Scanner(System.in);
        String a = hit1.nextLine();
        if (a.equals("s")) {
            System.out.println("You stick at ");
            System.out.println("Now it's the dealers turn\n Dealer must draw until 17");
        }
        if (a.equals("h")) {
            System.out.println("Your next card is " + card2);
            System.out.println("Giving you a new total of " + pcurrent);
            if ((pcurrent >= 22)) {
                System.out.println("You Busted! \nSorry! you lose");
                newRound = true;
            }
        } else {
            System.out.println("Please press H or S");
        }

    }

结合其他人所说的关于 card2 和随机卡片的内容,你应该一切顺利。

【讨论】:

  • 没有什么比让一个人觉得自己像个白痴的小jave :) 在你的修订中有很多我不明白的地方。您声明 int 值的方式,每个相关类型 = 0,我假设这是为了确保每个 newRound 都有干净的状态。 newRound = false,在代码中什么时候声明为真?或者它应该是真的吗?我开始认为我的 Java 老师是个白痴,不能教这门课。我在这些论坛上学到的东西比我在大学前 6 个月学到的更多。谢谢你的帮助,我不会让你失望
  • 热爱热情。每当您希望while 中的下一个循环处理新手时,您都应该设置newRound = true。在您的情况下,这意味着为所有卡片分配新值。
  • 所以如果我要在代码中添加一个你想要一个新的游戏 yn 行,我可以跳回到 newRound 并重新开始吗?
  • 绝对!好主意啊。在循环结束时使用Scanner,并检查是否应该设置newRound = true,或者完全退出循环。
  • 我希望有人还在关注这个帖子!我现在已经解决了大部分错误,我只是无法使随机卡生成器正常工作。每次我尝试使用它停止工作的 int 类时,我都尝试在很多地方使用它,但仍然无法编译。
【解决方案3】:

问题是您在初始化卡片时应用了随机化。改为以这种方式声明您的卡片:

int card1 = 1 + r.nextInt(11);
int card2 = 1 + r.nextInt(11);
int dcard1 = 1 + r.nextInt(11);
int dcard2 = 1 + r.nextInt(11);

用一种方法进行随机化,如下所示:

public int getRandomInt()
{
    return 1 + r.nextInt(11);
}

然后像这样为你的卡片赋值:

card1 = getRandomInt();

现在,任何时候你给一张卡片赋值(即使是重复的同一张卡片),你都会得到一个随机值。

System.out.println("Your next card is " +card2 );

可以替换为

card2 = getRandomInt();
System.out.println("Your next card is " +card2 );

【讨论】:

  • 这看起来正是我想要做的,唯一的问题是我不知道它应该是什么样子。你能给我一个有限的工作示例,我可以自己扩展吗?
  • 我真的不知道你现在还想看什么。你不明白如何应用一个方法吗?编辑:添加示例。如果我再做,我怕你什么都学不到。
  • 我不知道如何应用我还没学过的方法,可惜我是一个完整的初学者,我们所做的“学校工作”根本没有接近这个。编辑:感谢您提供的示例,一旦我了解该方法背后的逻辑,我就会学习它。
猜你喜欢
  • 2016-01-08
  • 2013-04-29
  • 2020-09-26
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
相关资源
最近更新 更多