In: Computer Science
Develop a Java application that plays a "guess the number" game as described below.
a) The user interface is displayed and the user clicks the “Start Game” button to begin the game.
b) Your application then gets a random number in the range 1-1000 inclusive (you might want to use Math.random or the Random class).
c) The application then displays the following prompt (probably via a JLabel): I have a number between 1 and 1000 can you guess my number? Please enter a number for your first guess and then hit Enter. Post a textbox for the user to enter a number and post a message telling the user to hit 'Enter' after entering a guess in a textbox (probably using a JTextField).
d) Input the user's guess in the code for a previously-registered event-handler method (consider using the event-handling approach discussed in the text, or the actionPerformed method of class based on the ActionListener interface, which will require some additional research outside the text).
e) For the first guess color the entire background red, meaning that they are getting warmer and for some initial confidence. You might want to use the setBackground method for a container. If this is the second or later guess, and they are further from the correct number than the last guess, then color the entire background blue. If they get the correct number then color the background some other color than red or blue.
f) If the user guesses the number correctly, respond with their number, post a congratulatory message, get a new random number, and display a JButton to start a new game. Otherwise, to help the user close in on the correct number, post a message, with their guessed number, whether they are "TOO HIGH" or "TOO LOW" from the correct number, and whether they are "WARMER" or "COLDER" (this should match the background color). Also report the guess number of the next guess (e.g. "Enter guess number nnn"). You might want to use a concatenated string in JLabel for these incorrect guess messages.
g) The process is repeated each game until the user guesses the correct number. Be sure that you erase obsolete status messages.
PROGRAM CODE:
package GUI;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class GuessTheNumber {
public static int randomNumber()
{
Random random = new Random();
return (random.nextInt(1000) + 1);
}
public static void main(String[] args) {
JFrame frame = new JFrame("Maximum");
JButton startGame = new JButton("Start Game");
JLabel result = new JLabel("");
//components within the panel
JPanel pane = new JPanel(new FlowLayout());
pane.setBackground(Color.RED);
startGame.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String message = "I have a number between 1 and 1000 can you guess my number?\nPlease enter a number for your first guess and then hit Enter.\nEnter 0 to quit";
int numGuesses = 1;
int number = randomNumber();
while(true)
{
try
{
int value = Integer.valueOf(JOptionPane.showInputDialog(message));
if(value < 0 || value > 1000)
throw new NumberFormatException();
if(value == number)
{
pane.setBackground(Color.YELLOW);
result.setText("You won! Number is " + number + ". Total number of guesses: " + numGuesses);
break;
}
else if(value==0)
{
result.setText("You failed! Number is " + number + ". Total number of Guesses: " + numGuesses);
break;
}
else if(value > number)
{
pane.setBackground(Color.BLUE);
result.setText("You guessed " + value + ". It is TOO HIGH from the correct number");
}
else if(value < number)
{
pane.setBackground(Color.RED);
result.setText("You guessed " + value + ". It is TOO LOW from the correct number");
}
numGuesses++;
message = "Enter guess number " + numGuesses;
}
catch(NumberFormatException nfe)
{
JOptionPane.showMessageDialog(null, "Please enter a number between 1 and 1000 or 0 to quit");
}
}}
});
//components within the frame
pane.add(startGame);
pane.add(result, FlowLayout.CENTER);
frame.setContentPane(pane);
frame.setVisible(true);
frame.setMinimumSize(new Dimension(400, 400));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
}
}
OUTPUT: