Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

JAVA CODE: USING ECLIPSE Step 1: Multi-Player Random Number Game Assignment •Ask

ID: 3582263 • Letter: J

Question

JAVA CODE: USING ECLIPSE

Step 1: Multi-Player Random Number Game Assignment

•Ask how many users will be playing (1-n)

–Remember Error Checking on ALL inputs

•Choose a random number for each player

•Ask each player (one guess per round) to enter their guess

•Alert the user with “Too High”, “Too Low”, “CORRECT!”

•Record the answer for each user, if incorrect.

•If the user was correct, skip them in subsequent rounds.

•Once all players have guessed their correct number, print out the number of guesses it took for each one to guess correctly, the incorrect responses, and show a ranking of the players.

•Ask if the user wishes to play again. If so, reset all values.

Rubric:

1. Program executes as submitted - 5 points

2. Random Number is selected for each player - 5 points

3. User is/are warned on out of range/illegal entries - 10 Pts

4. Correct response displayed for each entry – 3 pt each

(too high / too low / correct)

5. Players are asked in the right order or skipped correctly (10 pts)

6. Users are notified of outcome of ranking (after all win) 10 pt

7. Correct output displaying number of guesses per player 10 pts

8. Incorrect guesses for players in a table at the end of play 10pt

9. Program prompts users to play again, and resets values – 10 Pts.

10. Program terminates gracefully - 1 points

Step 2 (Based on Step 1):

Enables each player to enter his/her name for the purpose of tracking how well they play the game against other players.

Requirements & Assumptions:

-Assume that no matter how many players play your game, they each have a unique name.

-Ensure standings information is persistent...(Be able to maintain standings even after the program is closed and restarted)

-Standings are based on the average number of guesses a player takes to enter the 'right' number.

Example:

Player: John

   Game 1 - 5 guesses

   Game 2 - 8 guesses

   Game 3 - 1 Guess

   Game 4 - 6 Guesses

   Game 5 - 10 Guesses

  Average # of guesses = 6

-The player with the lowest Average number of guesses is the best.

-Players do not need to participate in every round of play...Their standing is solely based on the average number of guesses from the rounds that they have played.

-After each game completes, print out a table of the standings, showing the ranking of each player and their average number of guesses

Explanation / Answer

Step 1:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

import java.util.ArrayList;
import java.util.Random;


class RandomNumberGame
{
   public static void main (String args[]) throws IOException
   {
       BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
       System.out.print("How many players: ");
       try
       {
           int n = Integer.parseInt(br.readLine());
          
           if (n < 1)
               System.out.println("Error! Number of players must be greater than 1!");
           else
           {
               boolean playAgain = true;
               while (playAgain)
               {
                   int randomNumArr[] = new int [n];
                   Random rand = new Random();
                   int min = 0;
                   int max = 100;
                   for (int i=0; i<n; i++)
                       randomNumArr[i] = rand.nextInt((max - min) + 1) + min;
                  
                   ArrayList<Integer> incorrectGuesses[] = new ArrayList[n];
                   for(int i=0; i<n; i++)
                       incorrectGuesses[i] = new ArrayList<Integer>();

                   boolean guessedCorrect[] = new boolean [n];
                  
                   int totalCorrectGuesses = 0;
                  
                   while (totalCorrectGuesses != n)
                   {
                       for (int i=0; i<n; i++)
                       {
                           if (!guessedCorrect[i])
                           {
                               System.out.print("Player " + (i+1) + ": Enter your guess: ");
                               try
                               {
                                   int guess = Integer.parseInt(br.readLine());
                                   if (guess != randomNumArr[i])
                                   {
                                       incorrectGuesses[i].add(guess);
                                       if (guess > randomNumArr[i])
                                           System.out.println("Too High");
                                       else
                                           System.out.println("Too Low");
                                   }                          
                                   else
                                   {
                                       System.out.println("CORRECT!");
                                       guessedCorrect[i] = true;
                                       totalCorrectGuesses++;
                                   }                                  
                               }
                               catch (NumberFormatException e)
                               {                  
                                   System.out.println("Error! Your guess be an integer! Please try again...");
                               }                          
                           }                  
                       }
                   }
                  
                   for (int i=0; i<n; i++)
                   {
                       System.out.println("Player " + (i+1) + ":");
                       System.out.println("No. of guesses: " + (incorrectGuesses[i].size()+1));
                       System.out.print("Incorrect guesses: ");
                       for (int j=0; j<incorrectGuesses[i].size(); j++)
                           System.out.print(incorrectGuesses[i].get(j) + " ");
                       System.out.println();
                   }
                  
                   int players[] = new int [n];
                   for (int i=0; i<n; i++)
                       players[i] = i + 1;
                   for (int i=0; i<n-1; i++)
                   {
                       for (int j=i+1; j<n; j++)
                       {
                           if (incorrectGuesses[i].size() > incorrectGuesses[j].size())
                           {
                               ArrayList<Integer> temp = incorrectGuesses[i];
                               int temp2 = players[i];
                              
                               incorrectGuesses[i] = incorrectGuesses[j];
                               players[i] = players[j];
                              
                               incorrectGuesses[j] = temp;
                               players[j] = temp2;
                           }
                       }
                   }
                   System.out.println("Ranking:");
                   for (int i=0; i<n; i++)
                       System.out.println("Player " + players[i]);
                  
                   boolean inputValid = false;
                   while (!inputValid)
                   {
                       System.out.println("Play again? (yes/no)");
                       String playAgainStr = br.readLine();
                       if (playAgainStr.equalsIgnoreCase("no") || playAgainStr.equalsIgnoreCase("n"))
                       {
                           playAgain = false;
                           inputValid = true;
                       }                          
                       else if (playAgainStr.equalsIgnoreCase("yes") || playAgainStr.equalsIgnoreCase("y"))
                           inputValid = true;
                       else
                           System.out.println("Invalid input! Try again.");
                   }                  
               }              
           }              
       }
       catch (NumberFormatException e)
       {
           System.out.println("Error! Number of players must be an integer!");
       }      
   }
}