Java猜谜游戏
我正试图用Java编写一个程序,它取1-1000之间的一个随机数,然后随着猜测的进行,背景颜色会变为蓝色(冷)或红色(暖)。我不熟悉JavaGUI,但我认为其余的逻辑是正确的,不确定。它可以编译,但“猜测”按钮不起作用。任何指导都将不胜感激Java猜谜游戏,java,Java,我正试图用Java编写一个程序,它取1-1000之间的一个随机数,然后随着猜测的进行,背景颜色会变为蓝色(冷)或红色(暖)。我不熟悉JavaGUI,但我认为其余的逻辑是正确的,不确定。它可以编译,但“猜测”按钮不起作用。任何指导都将不胜感激 package guessGame; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.awt.color.*; import java.util.Ra
package guessGame;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.color.*;
import java.util.Random;
import java.util.Random;
import java.util.logging.FileHandler;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class GuessGame extends JFrame
{
private JFrame mainFrame;
private JButton GuessButton;
private JButton QuitButton;
private JLabel prompt1, prompt2;
private JTextField userInput;
private JLabel comment = new JLabel("What is your destiny?");
private JLabel comment2 = new JLabel (" ");
//private int number, guessCount;
//private int lastGuess;
private int randomNumber;
private Color background;
public GuessGame()
{
mainFrame = new JFrame ("Guessing Game!");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Creates components
GuessButton = new JButton("Guess");
QuitButton = new JButton("Quit");
prompt1 = new JLabel("I have a number between 1 and 1000.");
prompt2 = new JLabel("Can you guess my number? Enter your Guess:");
comment = new JLabel ("What is your destiny?");
comment2 = new JLabel (" ");
userInput = new JTextField(5);
//userInput.addActionListener(new GuessHandler());
//content pane
Container c = mainFrame.getContentPane();
c.setLayout(new FlowLayout());
//adding component to the pane
c.add(prompt1);
c.add(prompt2);
c.add(userInput);
c.add(comment2);
c.add(GuessButton);
c.add(QuitButton);
c.add(comment);
GuessButton.setMnemonic('G');
QuitButton.setMnemonic('Q');
mainFrame.setSize(300,200);
mainFrame.setLocationRelativeTo(null);
mainFrame.setVisible(true);
mainFrame.setResizable(false);
// define and register window event handler
// mainFrame.addWindowListener(new WindowAdapter() {
// public void windowClosing(WindowEvent e)
// { System.exit(0); }
// });
//creating the handler
GuessButtonHandler ghandler = new GuessButtonHandler(); //instantiate new object
GuessButton.addActionListener(ghandler); // add event listener
QuitButtonHandler qhandler = new QuitButtonHandler();
QuitButton.addActionListener(qhandler);
}
public void paint (Graphics g)
{
super.paint(g);
setBackground(background);
}
class QuitButtonHandler implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
}
class GuessButtonHandler implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
int getUserInput=0;
int diff;
int Difference;
randomNumber = new Random().nextInt(1001);
try {
getUserInput = Integer.parseInt(
userInput.getText().trim());
} catch (NumberFormatException ex){
comment.setText("Enter a VALID number!");
return;
}
if (getUserInput == randomNumber){
JOptionPane.showMessageDialog(null, "CONGRATULATIONS! You got it!!",
"Random Number: " + randomNumber,
JOptionPane.INFORMATION_MESSAGE);
randomNumber = new Random().nextInt(1000) + 1;
return;
}
if (getUserInput > randomNumber){
comment.setText( "Too High. Try a lower number." );
diff=getUserInput - randomNumber;
Difference=Math.abs(diff);
} else {
comment.setText( "Too Low. Try a higher number." );
diff=randomNumber - getUserInput;
Difference=Math.abs(diff);
}
if(Difference<=25){
comment2.setText("Cold");
setBackgroundColor(Color.blue);
}
if(Difference<=10){
comment2.setText("Warm");
setBackgroundColor(Color.red);
}
else {
}
}
private void setBackgroundColor(Color color) {
setBackgroundColor(color);
}
}
public static void main(String args[]) {
//instantiate gueesgame object
GuessGame app = new GuessGame();
}
}
包猜游戏;
导入java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
导入java.awt.color.*;
导入java.util.Random;
导入java.util.Random;
导入java.util.logging.FileHandler;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.WindowAdapter;
导入java.awt.event.WindowEvent;
公共类猜谜游戏扩展JFrame
{
专用JFrame主机;
私有JButton按钮;
私有JButton按钮;
私人JLabel prompt1、prompt2;
私有JTextField用户输入;
私人JLabel comment=newjlabel(“你的命运是什么?”);
私有JLabel comment2=新JLabel(“”);
//私有整数,猜测计数;
//私人猜测;
私有整数随机数;
私人色彩背景;
公众猜谜游戏
{
大型机=新的JFrame(“猜谜游戏!”);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//创建组件
猜按钮=新的JButton(“猜”);
QuitButton=新的JButton(“退出”);
prompt1=新的JLabel(“我有一个介于1和1000之间的数字”);
prompt2=新的JLabel(“你能猜出我的号码吗?输入你的猜测:”);
comment=newjlabel(“你的命运是什么?”);
注释2=新的JLabel(“”);
用户输入=新的JTextField(5);
//addActionListener(新的GuessHandler());
//内容窗格
容器c=mainFrame.getContentPane();
c、 setLayout(新的FlowLayout());
//将组件添加到窗格中
c、 增加(提示1);
c、 增加(提示2);
c、 添加(用户输入);
c、 添加(评注2);
c、 添加(猜测按钮);
c、 添加(退出按钮);
c、 添加(评论);
猜按钮。设置助记符('G');
QuitButton.setMnemonic('Q');
大型机。设置大小(300200);
mainFrame.setLocationRelativeTo(空);
mainFrame.setVisible(true);
mainFrame.setresizeable(false);
//定义并注册窗口事件处理程序
//mainFrame.addWindowListener(新的WindowAdapter(){
//公共无效窗口关闭(WindowEvent e)
//{System.exit(0);}
// });
//创建处理程序
GuessButtonHandler ghandler=新的GuessButtonHandler();//实例化新对象
GuessButton.addActionListener(ghandler);//添加事件侦听器
QuitButtonHandler qhandler=新的QuitButtonHandler();
QuitButton.addActionListener(qhandler);
}
公共空间涂料(图g)
{
超级油漆(g);
挫折背景(背景);
}
类QuitButtonHandler实现ActionListener
{
已执行的公共无效操作(操作事件e)
{
系统出口(0);
}
}
类GuessButtonHandler实现ActionListener
{
已执行的公共无效操作(操作事件e)
{
int getUserInput=0;
int-diff;
智力差异;
randomNumber=new Random().nextInt(1001);
试一试{
getUserInput=Integer.parseInt(
userInput.getText().trim());
}捕获(NumberFormatException ex){
comment.setText(“输入有效数字!”);
返回;
}
如果(getUserInput==randomNumber){
showMessageDialog(空,“恭喜!你成功了!!”,
“随机数:”+随机数,
JOptionPane.INFORMATION(信息和消息);
随机数=新随机数().nextInt(1000)+1;
返回;
}
如果(getUserInput>randomNumber){
setText(“太高,请尝试一个较低的数字。”);
diff=getUserInput-随机数;
差异=数学绝对值(差异);
}否则{
setText(“太低,请尝试更高的数字。”);
diff=随机数-getUserInput;
差异=数学绝对值(差异);
}
如果(差异您的Swing组件比您需要的多,并且您似乎在操作另一组组件时将一组组件添加到帧中。例如,您有两个JTextField
s、fieldBox
和userInput
。您将userInput
添加到帧中,但选中fieldBox
以查看猜测按钮h中的输入andler.由于字段框
总是空的,NumberFormatException
被异常处理程序捕获(它应该只捕获NumberFormatException
,而不是exception
),并且注释
被更新为“输入有效数字!”但是,就像双文本区域一样,comment
实际上并没有添加到框架中,prompt1
和prompt2
都是,所以您看不到更改您有比您需要的更多的Swing组件,并且您似乎在操作另一组时正在向框架中添加一组。例如,您有两个JTextField
s、fieldBox
和userInput
。您可以将userInput
添加到帧中,但在猜测按钮处理程序中选中fieldBox
以获取输入。由于fieldBox
始终为空,NumberFormatException
被异常处理程序捕获(它应该只捕获NumberFormatException
,而不是Exception
),并且comment
更新为“输入有效数字!”。但是,与双文本区域一样,comment
实际上并没有添加到框架中,prompt1
和prompt2
是,
private void setBackgroundColor(Color color) {
setBackground(color);
}
randomNumber = new Random().nextInt(1001);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.show();
mainFrame.setVisible(true);
private Color background;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
public class GuessGame extends JFrame {
private JTextField userInput;
private JLabel comment = new JLabel("What is your destiny?");
private JLabel comment2 = new JLabel(" ");
private int randomNumber;
public GuessGame() {
super("Guessing Game!");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Creates components
JButton guessButton = new JButton("Guess");
JButton quitButton = new JButton("Quit");
JLabel prompt1 = new JLabel("I have a number between 1 and 1000.");
JLabel prompt2 = new JLabel("Can you guess my number? Enter your Guess:");
comment = new JLabel("What is your destiny?");
comment2 = new JLabel(" ");
userInput = new JTextField(5);
//content pane
Container c = getContentPane();
setLayout(new FlowLayout());
//adding component to the pane
c.add(prompt1);
c.add(prompt2);
c.add(userInput);
c.add(comment2);
c.add(guessButton);
c.add(quitButton);
c.add(comment);
guessButton.setMnemonic('G');
quitButton.setMnemonic('Q');
setSize(300, 200);
setLocationRelativeTo(null);
setVisible(true);
setResizable(false);
initializeNumber();
//creating the handler
GuessButtonHandler ghandler = new GuessButtonHandler(); //instantiate new object
guessButton.addActionListener(ghandler); // add event listener
QuitButtonHandler qhandler = new QuitButtonHandler();
quitButton.addActionListener(qhandler);
}
private void initializeNumber() {
randomNumber = new Random().nextInt(1000) + 1;
}
class QuitButtonHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
class GuessButtonHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
int getUserInput;
int diff;
int Difference;
try {
getUserInput = Integer.parseInt(userInput.getText().trim());
if (getUserInput == randomNumber) {
JOptionPane.showMessageDialog(null, "CONGRATULATIONS! You got it!!",
"Random Number: " + randomNumber,
JOptionPane.INFORMATION_MESSAGE);
initializeNumber();
return;
}
if (getUserInput > randomNumber) {
comment.setText("Too High. Try a lower number.");
diff = getUserInput - randomNumber;
Difference = Math.abs(diff);
} else {
comment.setText("Too Low. Try a higher number.");
diff = randomNumber - getUserInput;
Difference = Math.abs(diff);
}
if (Difference <= 25) {
comment2.setText("Cold");
GuessGame.this.setBackgroundColor(Color.blue);
}
if (Difference <= 10) {
comment2.setText("Warm");
GuessGame.this.setBackgroundColor(Color.red);
}
} catch (NumberFormatException ex) {
comment.setText("Enter a VALID number!");
}
}
}
private void setBackgroundColor(Color color) {
getContentPane().setBackground(color);
}
public static void main(String args[]) {
//instantiate gueesgame object
GuessGame app = new GuessGame();
}
}