0

我正在创建一个随机数生成器多人游戏 (LAN)。我需要有关如何创建代码以使每个玩家收到自己的随机数的帮助,并且每当一个玩家猜到一个代码时,下一轮将是一个新玩家。类似于输出将显示以下内容的位置,

弗雷德,请猜随机数(仅限整数!!):5 太低了

汤姆,请猜猜随机数(仅限整数!!):95 太高了

约翰,请猜测随机数(仅限整数!!):50 太低了

然后当一个玩家猜对了,他们的回合被跳过,当所有玩家都猜到他们的数字时,游戏将结束,显示每个人猜的数字,以及他们之前猜到的数字。这是我到目前为止所拥有的:

public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner keyboard = new Scanner(System.in);
        Random myRand = new Random();
        ArrayList<Integer> guessedNumbers = new ArrayList();

        int x = 0;
        int players = 0;
        System.out.println("how many players are there?:");
        players = checkint(players);
        int arraySize = guessedNumbers.size();
        int[] numPlayers = new int [players];
        boolean play = true;
        boolean validGuess = true;
        String [] pNames = new String[players];


        for (int i = 0; i<players; i++) {
            System.out.println("New player, what is your name?:");
            pNames[i] = keyboard.nextLine();
        }


        while(play) {
            int randNum = myRand.nextInt(100) + 1;
            int numOfGuesses = 0;

            do {
                System.out.println("Enter what you think the number is between 0 and 100!:");
                x= checkint(x);
                guessedNumbers.add(x);
                if (x < 0) {
                    System.out.println("we don't accept negative numbers");
                    if (x > 100) {
                        System.out.println("that number is above the random number generator range");


                    }
                }
                numOfGuesses++;
                if (x == randNum) {
                    System.out.println("that's correct!");
                    System.out.println("It took you " + numOfGuesses + " tries!");
                    System.out.print("these are all the numbers you guessed:");
                    for(int count=0; count<guessedNumbers.size(); count++){
                        System.out.print(guessedNumbers.get(count) + ",");}
                    System.out.println("");


                    boolean playError = true;
                    //if ("Yes".equals(answer)) {
                    do {
                        System.out.println("Would you like to play again: Yes or No");
                        String answer = keyboard.nextLine();
                        if (answer.compareToIgnoreCase("yes") == 0) {
                            play = true;
                            playError = false;
                        } else if (answer.compareToIgnoreCase("no") == 0)  {
                            play =false;
                            playError = false;
                            System.out.println("Thank you for playing");
                        } else {
                            //you messed up
                            System.out.println("You answer was invalid");
                            playError = true;
                        }
                    } while (playError == true);
                }
                else if 
                (x>randNum) 

                    System.out.println("Lower than that!");


                else if 
                (x<randNum) 

                    System.out.println("Higher than that!");

            }   while (x != randNum);
        }}

        }


    static int checkint(int a) {
        int enteredNumber = 0;
        Scanner myScanner = new Scanner(System.in);
        boolean numberError = false;
        String enteredString = "";

        do {
            try {
                enteredString = myScanner.next();  //Read into a string
                enteredNumber = Integer.parseInt(enteredString.trim());  //then cast as a integer
                numberError = false;  //if we haven't bailed out, then the number must be valid.
            } catch(Exception e) {
                System.out.println("Your entry: \"" + enteredString + "\" is invalid...Please try again");
                numberError = true;  //Uh-Oh...We have a problem.
            }

        } while (numberError == true );  //Keep asking the user until the correct number is entered.

        return enteredNumber;  
    }
}
4

2 回答 2

0

您正在以复杂的方式做简单的事情,但是,我的代码仍然可以替换为压缩版本,但是您可以更好地理解这一点。下面的代码正在做你想做的事。我有:

  • 创建了Player类,所以每个player人都会记录guessedNumbers,Number of Guesses它是name.
  • 您不必制作大量变量,例如,pName[]等...playvalidGuesses
  • 我已经更改了一些If-Conditions并删除了外部while-loop
  • 添加了新的回合概念,因此每当玩家猜到数字时,数字就会改变。
  • 以及更多 ....

更新代码:现在每个玩家都有不同random number的猜测。

    import java.util.*;

public class GuessNumber
{
    public static void main(String[] args) 
    {
        // TODO Auto-generated method stub
        Scanner keyboard = new Scanner(System.in);
        Random myRand = new Random();
        ArrayList<Player> players = new ArrayList<Player>();
        int x = 0;
        System.out.println("how many players are there?:");
        int noPlayer = checkint();
        boolean validGuess = true , playError = true;

        for (int i = 0; i<noPlayer; i++) 
        {
            System.out.println("New player, what is your name?:");
            players.add(new Player (keyboard.nextLine()));
        }


        for (int i = 0; i<noPlayer; i++) 
        {
            players.get(i).number = myRand.nextInt(100) + 1;
        }
        int i =0; // for chossing different player each time
        do 
        {
            System.out.printf(players.get(i).name + " enter what you think the number is between 0 and 100!: ");
            x= checkint();
            players.get(i).guessedNumbers.add(x);
            players.get(i).numOfGuesses++;
            if (x == players.get(i).number) 
            {
                System.out.println("That's correct!");
                System.out.println("It took you " + players.get(i).numOfGuesses + " tries!");
                System.out.print("These are all the numbers you guessed: ");
                System.out.println(players.get(i).guessedNumbers);

                do 
                {
                    System.out.println("Would you like to play again: Yes or No");
                    String answer = keyboard.nextLine();
                    if (answer.compareToIgnoreCase("yes") == 0)
                    {
                        playError = false;
                        players.get(i).number = myRand.nextInt(100) + 1; // creates a new random number for second round of the game
                        System.out.println("\n\n************ " +players.get(i).name + " WON ********");
                        System.out.println("\n************* SECOND ROUND STARTS **********");
                    }
                    else if (answer.compareToIgnoreCase("no") == 0)  
                    {
                        playError = false;
                        System.out.println("Thank you for playing");
                        System.out.println("\n\n************ " +players.get(i).name + " WON ********");
                        System.out.println("\n************* SECOND ROUND STARTS **********");
                        players.remove(i);
                    } 
                    else 
                    {
                        System.out.println("You answer was invalid");
                        playError = true;
                    }
                } while (playError);
            }
            else if (x>players.get(i).number) 
                System.out.println("Lower than that!");
            else if (x<players.get(i).number) 
                System.out.println("Higher than that!");
            if(i == noPlayer-1 || !(playError))
                i = 0;
            else
                i++;

        }while (players.size() > 0);  

        System.out.println("\n\n******************** Every Body Guessed Their Numbers ******************");
    }

    static int checkint() 
    {
        int enteredNumber = 0;
        Scanner myScanner = new Scanner(System.in);
        boolean numberError = false;

        do 
        {
            try 
            {
                enteredNumber = Integer.parseInt(myScanner.next().trim()); 
                if (enteredNumber < 0 || enteredNumber > 100)
                {
                    System.out.println("Either you entered a negative number or number is above the random number generator range");
                    numberError =  true;
                }
                else
                    numberError = false;  //if we haven't bailed out, then the number must be valid.
            } catch(Exception e) 
            {
                System.out.println("Your entry is invalid...Please try again");
                numberError = true;  //Uh-Oh...We have a problem.
            }

        } while (numberError);  //Keep asking the user until the correct number is entered.

        return enteredNumber;  
    }
}

// now each player would have its own record.
class Player
{
    int numOfGuesses= 0;
    ArrayList<Integer> guessedNumbers = new ArrayList<Integer>();
    String name = "";
    int number = 0;
    public Player(String nam)
    {
        name = nam;
    }
}

注意:我在屏幕上添加了一些新的行输出,一旦玩家wins想要再次玩或不玩。我建议您将您的代码与我的代码进行比较,以便您更好地了解您的方法与我的方法。如果您发现难以理解的内容,请告诉我。

于 2019-04-14T12:08:30.623 回答
0

只需使用 Random 类:

Random ran = new Random();
// Assumes max and min are non-negative.
int randomInt = min + ran.nextInt(max - min + 1);

我在这里参考。

如何在 Java 中生成特定范围内的随机整数?

于 2019-04-14T09:54:44.043 回答