Java源码-猜数字小游戏(Swing编程版)

2008年的时候,在学习Java how to program第五版的时候,写过一个猜数字小游戏,是用Applet写的;
现在,我要用Swing重写这个小游戏,同时,加入一些新功能,如:背景颜色(红色表示偏高,蓝色表示偏低)、弹框、字体控制、布局管理器的使用。

运行截屏:


代码如下:
//Guess a number between 1 and 1000
//Java how to program, 10/e, Exercise 12.14
//by pandenghuang@163.com
/* (Guess-the-Number Game) Write an application that plays “guess the number” as follows:
Your application chooses the number to be guessed by selecting an integer at random in the range
1–1000. The application then displays the following in a label:
I have a number between 1 and 1000. Can you guess my number?
Please enter your first guess.
A  JTextField should be used to input the guess. As each guess is input, the background color
should change to either red or blue. Red indicates that the user is getting “warmer,” and blue,
“colder.” A  JLabel should display either  "Too High" or  "Too Low" to help the user zero in. When
the user gets the correct answer,  "Correct!" should be displayed, and the  JTextField used for
input should be changed to be uneditable. A  JButton should be provided to allow the user to play
the game again. When the  JButton is clicked, a new random number should be generated and the
input  JTextField changed to be editable.
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.BorderLayout;
import static java.awt.BorderLayout.*;

public class NumberGuessGame2016 extends JFrame {
int number,random,counter=0;
JLabel welcomeJLabel;
JLabel hintJLabel;
JTextField guessField;
JPanel panel;//显示不同背景色


public NumberGuessGame2016() {
   super("猜数字小游戏游戏");
   setLayout(new BorderLayout());
   
   panel=new JPanel();
   panel.setBackground(Color.WHITE);
  
   welcomeJLabel= new JLabel("游戏规则:已随机生成一个1到1000的整数,您能在10次以内猜出来吗?");
   welcomeJLabel.setFont(new Font("Simsun",1,10));
   add(welcomeJLabel,NORTH);
  
   guessField=new JTextField(20);
   guessField.setFont(new Font("Arial",1,10));
   panel.add(guessField);
   add(panel); //默认添加到中间
  
   hintJLabel= new JLabel("");
   add(hintJLabel,SOUTH);
   hintJLabel.setFont(new Font("Simsun",1,10));
      
   TextFieldHandler handler=new TextFieldHandler();
   guessField.addActionListener(handler);
  
   random=(int)(1+1000*Math.random());
   
}

private class TextFieldHandler implements ActionListener 
{
   // process textfield events

   @Override
   public void actionPerformed (ActionEvent event)
   {
	  while(true){
      number=Integer.parseInt(guessField.getText());
      while(number!=random)
      {
          number=Integer.parseInt(guessField.getText());
          if(number>random)
              {
              hintJLabel.setText("猜高了,不要放弃哦↖(^ω^)↗。已试错"+(++counter)+"次");
              guessField.setText("");
              panel.setBackground(Color.RED);
              }
          else
              {
        	  hintJLabel.setText("猜低了,请继续!已试错"+(++counter)+"次");
        	  panel.setBackground(Color.BLUE);
              guessField.setText("");
              }
      }
      //猜中后的用户提示
      if (counter<10)
    	  JOptionPane.showMessageDialog(null, "恭喜你,猜中了,难道你知道答案?O(∩_∩)O~");
      else if (counter==10)
    	  JOptionPane.showMessageDialog(null, "辛苦了,终于猜中了!");
      else
    	  JOptionPane.showMessageDialog(null, "您终于猜中了╮(╯▽╰)╭,您其实可以做得更好的!");
 	
      //开始下一轮猜数字游戏前的初始化工作
      guessField.setText("");
     random=(int)(1+1000*Math.random());
     counter=0;
      
	   }
   }
}

public static void main(String[] args)
{ 
   NumberGuessGame2016 f = new NumberGuessGame2016(); // create ListFrame
   f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   f.setSize(400,300); 
   f.setVisible(true); 
}
}



  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值