骰子连续求和游戏Java

Dice continuous sum game Java

我是编程新手,正在尝试制作骰子游戏。该游戏由三个骰子组成,每轮总和为 12(任意数量的骰子)。每个骰子每轮只能掷一次。

在每一轮中,玩家必须能够选择:1 掷骰子 1,2 掷骰子 2,3 掷骰子 3,q 退出游戏。程序必须在所选骰子上随机找到一个值,然后计算分数。该程序还应显示获胜的次数和输掉的回合数。 程序应继续运行,直到用户选择取消游戏。 无论骰子的数量如何,损失的定义是在掷完所有三个骰子后总和超过 12。如果三掷后总和小于12,则没有盈亏,直接进入下一轮。

所以目前我的代码只工作了一轮,问题在第二轮开始时就开始了。新的骰子只是我给它的输入,而不是随机值 (1-6)。

我怎样才能使这个工作?

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

public class Main{
  //Declaring int variables for all 3 dice
  static int dice1;
  static int dice2;
  static int dice3;
  //Declaring true/false for which dice that is thrown, can't be thrown more than 1 time in each round.
  static boolean dice1Thrown = false;
  static boolean dice2Thrown = false;
  static boolean dice3Thrown = false;
  //Method for which dice is thrown - the input the user choses (1, 2, 3 or q)
  static char diceToThrow;
  //Method that checks what number 1-6 the dice roll. sum by default is 0
  static int sum = 0;
  //Method for keep track of # wins
  static int wins;
  //Method keep tracks of # losses
  static int losses;
  //If firstGame = true it will print "Welcome to the game 12" if false, it doesn't print that every round
  static boolean firstGame = true;
  //Int for keeping track of when dice thrown is = 3. Go to next round.
  static int rounds;
  

  public static void main(String[] args)
  
  {
    Scanner scan = new Scanner(System.in);
    if(firstGame)
    {
        System.out.println("Welcome to the game 12. You must roll 1-3 dice and try to get the sum 12 ... ");
        firstGame = false; 
    }
    System.out.printf("Enter which dice you want to roll [1,2,3] (exit with q): ");  

    //Calling method diceToThrow, chosing input 1,2,3 or q
    diceToThrow = scan.next().charAt(0);
    tärningsKast(diceToThrow);
    //sum = dice1 + dice2 + dice3
    calcSum();
    //If user gets 12 store int wins as +1, if lose store int loss as +1
    winOrLose();
    //Printing dices, if input from user is 1, it shows sum of first dice etc.
    System.out.printf(dice1 + " " + dice2 + " " + dice3 + " sum: " + sum + " #win: " + wins + " #loss: " + losses+ " ");
    //Calling method for round score.
    checkRounds();
    
    main(args);

   //Method created for sum calculating, called in Main method
  }static void calcSum(){
    sum = (dice1 + dice2 + dice3);
  }

   //Method created for dice1, dice2, dice3 and char q (as exit). Dice generates random number between 0-5 and always adds + 1 (1-6)
  static void tärningsKast(char diceToThrow){
    Random rand = new Random();
   //If user input = 1, generate dice1
    if(diceToThrow == '1' && !dice1Thrown){
      dice1 = rand.nextInt(6) + 1;
      dice1Thrown = true;
    }
  //If user input = 2, generate dice2
  else if(diceToThrow == '2' && !dice2Thrown){
  dice2 = rand.nextInt(6) +1;
  //If user input = 3, generate dice3
  }else if(diceToThrow == '3' && !dice3Thrown){
    dice3 = rand.nextInt(6) + 1;
    dice3Thrown = true;
  //If user input = char q, Print "Game Over!" and exit game.
  }else if(diceToThrow == 'q'){
    System.out.println("Game Over!");
    System.exit(0);
  }
}
  
  static void winOrLose(){
      if(sum == 12){
          wins++;
      }
      else if(sum > 12){
          losses++;
      }
  }
  static void checkRounds(){
      rounds++;
      if(rounds == 3)
      {
          System.out.println("\n" + "Next round!");
          dice1 = 0;
          dice2 = 0; 
          dice3 = 0; 
          rounds = 0;
        
      }
  }
}

当您准备进行下一轮时,方法 tärningsKast() 只会在每一轮都没有掷骰子的情况下一次又一次地工作。

这意味着一旦一轮结束并且您要开始另一轮,您必须设置不掷骰子,因为该轮将在之后立即开始。

我找到的解决方案是将 dice1Throwndice2Throwndice3Thrown 设置为 false 在打印下一轮开始的 if 语句上。

    static void checkRounds(){
    rounds++;
    if(rounds == 3)
    {
        System.out.println("\n" + "Next round!");
        dice1 = 0;
        dice2 = 0;
        dice3 = 0;
        rounds = 0;
        dice1Thrown = false;
        dice2Thrown = false;
        dice3Thrown = false;

    }

之后游戏似乎运行正常。

我找到它的步骤是:

  1. 设置一个断点来调试打印“下一轮”的行。
  2. 调试器到达该行后,在方法的第一行设置一个断点 tärningsKast(),然后在每次检查 if、else if 和等 diceNThrown 变量仍然设置为真,所以 none 的条件将匹配。

关于问题:

“你的意思是,如果你想在第 2 轮中停止比赛?” “是的,就像那样”

首先我会用你的 checkRounds() 方法来检查它是否要停止游戏,这意味着用户是否已经玩了两轮。

其次,我会将移动到下一轮的逻辑移动到检查尝试的方法,而不是轮次,因为每次用户已经进行了三次尝试时我们都会移动到下一轮。

最后,在进入下一轮之前,我会增加轮数,并在检查轮数是否达到预期的轮数后立即停止,这样你就可以玩有限制的游戏了你想要的回合数。


//Declaring int variables for all 3 dice
static int dice1;
static int dice2;
static int dice3;
//Declaring true/false for which dice that is thrown, can't be thrown more than 1 time in each round.
static boolean dice1Thrown = false;
static boolean dice2Thrown = false;
static boolean dice3Thrown = false;
//Method for which dice is thrown - the input the user choses (1, 2, 3 or q)
static char diceToThrow;
//Method that checks what number 1-6 the dice roll. sum by default is 0
static int sum = 0;
//Method for keep track of # wins
static int wins;
//Method keep tracks of # losses
static int losses;
//If firstGame = true it will print "Welcome to the game 12" if false, it doesn't print that every round
static boolean firstGame = true;
//Int for keeping track of when dice thrown is = 3. Go to next round.
static int attempts;
// keeping track of the number of rounds
static int rounds = 0;
// desired number of rounds to play
static final int LIMIT_OF_ROUNDS = 5;

public static void main(String[] args)

{
    Scanner scan = new Scanner(System.in);
    if(firstGame)
    {
        System.out.println("Welcome to the game 12. You must roll 1-3 dice and try to get the sum 12 ... ");
        firstGame = false;
    }
    System.out.printf("Enter which dice you want to roll [1,2,3] (exit with q): ");

    //Calling method diceToThrow, chosing input 1,2,3 or q
    diceToThrow = scan.next().charAt(0);
    tärningsKast(diceToThrow);
    //sum = dice1 + dice2 + dice3
    calcSum();
    //If user gets 12 store int wins as +1, if lose store int loss as +1
    winOrLose();
    //Printing dices, if input from user is 1, it shows sum of first dice etc.
    System.out.printf(dice1 + " " + dice2 + " " + dice3 + " sum: " + sum + " #win: " + wins + " #loss: " + losses+ " ");
    //Calling method for round score.
    checkAttempts();

    main(args);

    //Method created for sum calculating, called in Main method
}static void calcSum(){
    sum = (dice1 + dice2 + dice3);
}

//Method created for dice1, dice2, dice3 and char q (as exit). Dice generates random number between 0-5 and always adds + 1 (1-6)
static void tärningsKast(char diceToThrow){
    Random rand = new Random();
    //If user input = 1, generate dice1
    if(diceToThrow == '1' && !dice1Thrown){
        dice1 = rand.nextInt(6) + 1;
        dice1Thrown = true;
    }
    //If user input = 2, generate dice2
    else if(diceToThrow == '2' && !dice2Thrown){
        dice2 = rand.nextInt(6) +1;
        //If user input = 3, generate dice3
    }else if(diceToThrow == '3' && !dice3Thrown){
        dice3 = rand.nextInt(6) + 1;
        dice3Thrown = true;
        //If user input = char q, Print "Game Over!" and exit game.
    }else if(diceToThrow == 'q'){
        System.out.println("Game Over!");
        System.exit(0);
    }
}

static void winOrLose(){
    if(sum == 12){
        wins++;
    }
    else if(sum > 12){
        losses++;
    }
}
static void checkAttempts(){
    attempts++;

    if(attempts == 3)
    {
        rounds++;
        checkRounds(rounds);
        System.out.println("\n" + "Next round!");
        dice1 = 0;
        dice2 = 0;
        dice3 = 0;
        attempts = 0;
        dice1Thrown = false;
        dice2Thrown = false;
        dice3Thrown = false;
    }
}

static void checkRounds(int rounds) {
    if (rounds == LIMIT_OF_ROUNDS) {
        tärningsKast('q');
    }
}