多人随机数猜游戏:如何为每个玩家创建随机数?

时间:2019-04-14 07:19:26

标签: java

我正在创建一个随机数生成器多人游戏(LAN)。 我需要有关如何创建代码的帮助,以使每个玩家都能收到自己的随机数,而且只要一个玩家猜出了一个密码,下一个回合就会是新玩家。与输出显示以下内容类似,

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

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

John,请猜测随机数(仅整数!):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;  
    }
}

2 个答案:

答案 0 :(得分:0)

只需使用Random类:

s = MySequence()

for i in range(len(s)):
    print s[i] # prints 1, then 2, then 3

for x in s:
    print x # prints 1, then 2, then 3

print isinstance(s, collections.Sequence) # prints True

print 1 in s # prints True

print list(reversed(s)) # prints [3, 2, 1]

我在这里引用了。

How do I generate random integers within a specific range in Java?

答案 1 :(得分:0)

您正在以复杂的方式执行简单的操作,但是,我的代码仍可以由压缩版本代替,但是您可以更好地理解这一点。以下代码完全可以实现您想要的功能。我已经:

  • 创建了Player类,因此每个player都将记录guessedNumbersNumber 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并想再次玩就可以了。我建议您将您的代码与我的代码进行比较,以便对我的方法与我的代码有更好的了解。如果您发现难以理解的内容,请告诉我。