>

난수 생성기 멀티 플레이어 게임 (LAN)을 만들고 있습니다. 각 플레이어가 자신의 임의의 숫자를 받도록 코드를 만드는 방법에 대한 도움이 필요하며 한 플레이어가 코드를 추측 할 때마다 다음 차례가 새로운 플레이어가됩니다. 출력에 다음이 표시되는 위치와 유사하게

Fred, 난수를 맞춰보세요 (integers 만 !!) : 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;  
    }
}


  • 답변 # 1

    복잡한 방식으로 간단한 일을하고 있지만, 내 코드는 여전히 압축 버전으로 대체 될 수 있지만 이것을 더 잘 이해할 수 있습니다. 다음 코드는 원하는 것을 정확하게 수행합니다. 나는 :

    Player 생성  클래스, 그래서 각 player   guessedNumbers 의 기록을 유지합니다 Number of Guesses  그리고 그것은 name 입니다 .

    pName[] 와 같은 수많은 변수를 만들 필요가 없습니다. play validGuesses  등 ...

    나는 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 하면 화면에 출력 할 줄을 새로 추가했습니다.  다시 재생하고 싶습니까? 코드와 내 코드를 비교하여 내 접근 방식을 더 잘 이해할 수 있도록 권장합니다. 이해하기 어려운 것이 있으면 알려주세요.

  • 답변 # 2

    무작위 클래스 만 사용하십시오 :

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

    여기서 참조했습니다

    자바에서 특정 범위 내에서 임의의 정수를 어떻게 생성합니까?

  • 이전 swift - Moya로 인증 토큰 새로 고침
  • 다음 플러터에서 둘 이상의 화면에서 사용자 정의 위젯을 공통으로 유지하는 방법