Случайный в Java, повторяя одно и то же число - PullRequest
0 голосов
/ 27 февраля 2019

Мой код:

public class SkillsDemoTwoCrapsGameClass {

public static void main(String[] args) {
    RandomNumber diceRoll = new RandomNumber(); //Create instance diceRoll of class RandomNumber
    play playGame = new play(); //Create instance playGame of class play


    //Initialise variables from play class
    playGame.diceRoll = diceRoll.randNum;
    playGame.point = playGame.diceRoll;
    playGame.newPoint = diceRoll.randNum;

        System.out.println("WELCOME TO A GAME OF CRAPS!");

        if(playGame.diceRoll == 7 || playGame.diceRoll == 11){
            //Show the users point
            System.out.println("Point: " + playGame.point);
            System.out.println("------------------------------");

            //Tell user they won
            System.out.println("Congratulations you won, with a " + playGame.diceRoll);
        }
        else if(playGame.diceRoll == 2 || playGame.diceRoll == 3|| playGame.diceRoll == 12){
            //Show the users point
            System.out.println("Point: " + playGame.point);
            System.out.println("------------------------------");

            //Tell the user they lost
            System.out.println("Sorry you lost, with a " + playGame.diceRoll);
        }
        else{
            System.out.println("Point: " + playGame.point);
            System.out.println("------------------------------");

            while(playGame.point != playGame.newPoint || playGame.point == playGame.newPoint){
                /*
                BUG: (2/2/19)
                    User will receive their original roll again, causing them to always win
                */
                //Roll dice again for the new point
                playGame.newPoint = diceRoll.randNum;

                //Checks if the user can win
                if(playGame.point == playGame.newPoint){
                    System.out.println("Your new roll: " + playGame.newPoint + "\t\t Win");
                    break;
                }
                //Checks if the user has lost
                else if(playGame.newPoint == 7){
                    System.out.println("Your new roll: " + playGame.newPoint + "\t\t Lose");
                    break;
                }
                //Check if user needs to roll again
                else{
                    System.out.println("Your new roll: " + playGame.newPoint + "\t\t No help");    
                    }
            }
        }
    }
    }

    class RandomNumber{
     Random rand = new Random();
     int randNum = rand.nextInt(12) + 1;    
    }

    class play{
    int diceRoll, point, newPoint;
    }

Приведенный выше код предназначен для игры в Крэпс, моя проблема в том, когда пользователю нужно получить новое очко.Вместо того, чтобы назначать новое случайное число, они получают тот же номер, что и раньше.Есть ли способ вызвать класс RandomNumber и получить новое случайное число для присвоения переменной newPoint?

Спасибо

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Добавить эту строку

`RandomNumber diceRoll = new RandomNumber();`

непосредственно перед

`playGame.newPoint = diceRoll.randNum;`

Поскольку вы всегда используете один и тот же объект и один и тот же атрибут randNum

0 голосов
/ 27 февраля 2019

Добавьте метод в класс RandomNumber для генерации нового броска.

class RandomNumber{
     Random rand = new Random();
     int randNum = rand.nextInt(12) + 1;
     void Roll(){
        randNum = rand.nextInt(12) + 1;
     }
}

Затем добавьте вызов к Roll() перед следующим ходом.

//Roll dice again for the new point
diceRoll.Roll();
playGame.newPoint = diceRoll.randNum;
...