201621123065《JAVA课程设计报告》

一、 需求分析

  • 1.玩家输入一个数字,数字的范围在1~100之间,系统自动随机获取。
  • 2.对玩家输入的数字进行判断大小,如果不是正确答案,则系统给出或大或小提示,用户继续进行猜测。
  • 3.玩家猜中时系统对于所猜次数给出不同的评语,并把猜测过程所用时间记录于一个文本中。
  • 4.每次猜测系统自动统计猜测次数并显示。
  • 5.猜中后可自动进行下一轮游戏。

二、 课题及本人任务

  • 课题:猜数游戏
  • 本人任务:整个程序

三、 总体设计

游戏随机给出一个1~100(包括100)之间的数字,然后用户猜测是什么数字。用户可以随便猜测一个数字,游戏会提示太大还是太小,从而缩小范围。经过几次猜测与提示后,最终推出答案。(系统设计如下图)

游戏界面:采用图形界面显示。
游戏开始后,由计算机产生一个1~100的随机数。用户只需输入所猜想的数字,打印在输入框内,按Enter键表示确定,游戏返回提示语句并清空输入框,直到游戏结束。同时计算机计算猜测次数并显示,计算游戏时间并存入一个文档。可以通过按窗体关闭符直接结束游戏。

四、 主要功能展示与代码分析

  • 功能展示:

  • 初始界面:

输入一个数字后:系统给出提示并清空输入框

猜对后给出评语:

继续则进行下一轮游戏:

用于存储猜测时间的文件:

该文件存储游戏时间(毫秒):

  • 代码分析:
package KESHE;


import javax.swing.*;  
import java.awt.*;  
import java.awt.event.*;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.awt.BorderLayout;  
import static java.awt.BorderLayout.*;  
  
public class Finish extends JFrame {  
	
int number,random,counter; //猜的数,答案,次数
long  time;//时间
JLabel welcomeJLabel;//定义一个组件  
JLabel hintJLabel;  //提示显示框
JTextField guessField;  //输入框
JPanel panel;//显示背景色  
  
  
public Finish() {  //布局
      super("猜数字");  //窗体名
     
      panel=new JPanel();  
      panel.setBackground(Color.PINK);  //定义背景色
    
     welcomeJLabel= new JLabel("已随机生成一个1到100的整数,来猜猜看吧");  
     add(welcomeJLabel,NORTH);  
    
     guessField=new JTextField(25);  //容乃字符长度
     panel.add(guessField);  
     add(panel); //默认添加到中间  
    
     hintJLabel= new JLabel("");  //初始换提示框
     add(hintJLabel,SOUTH);  

     TextFieldHandler handler=new TextFieldHandler();  
     guessField.addActionListener(handler);  //监听
    
     random=(int)(1+100*Math.random());  //产生随机数
     
}  

    long begintime=System.currentTimeMillis();//开始计时


private class TextFieldHandler implements ActionListener   {  
  
    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("");  //置空输入框
             }  
                    else{  
                       hintJLabel.setText("猜低了,请继续!已试错"+(++counter)+"次");  
                       guessField.setText("");  
              }  
      } 
      
      
            long endtime=System.currentTimeMillis();//结束计时
            time=endtime-begintime;//总时间
      //猜中后的用户提示 
            File f= new File("d:" + File.separator + "课设测试") ;//新建一个文件夹
            Writer out = null ;	
          try {
    	     String con=String.valueOf(time);//把time转换成字符串
      	con+="\r\n";//换行
		out = new FileWriter(f,true);
		out.write(con) ;// 将内容输出,保存文件
		out.close() ;// 关闭文件


	     } catch (IOException e) {
		// TODO Auto-generated catch block
		      e.printStackTrace();
	    }
      if (counter<3)  
          JOptionPane.showMessageDialog(null, "恭喜您,猜中了,真厉害!");  
      else if (counter==6)  
          JOptionPane.showMessageDialog(null, "终于猜中了!");  
      else  
          JOptionPane.showMessageDialog(null, "您终于猜中了╮(╯▽╰)╭,您其实可以做得更好的!");  
      
      //开始下一轮猜数字游戏前的初始化工作  
     guessField.setText("");  
     random=(int)(1+100*Math.random());  
     counter=0;  
        
       }  
   }  
}  
  
public static void main(String[] args)  
{  
   Finish f = new Finish(); // create ListFrame  
   f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
   f.setSize(400,300);   
   f.setVisible(true);   
}  
}  

五、 测试与改进

  1. 把背景色改成了粉色
  2. 对于每次猜测给出提示和已经猜的次数,用户体验比较直观
  3. 一次游戏结束之后可以直接进行下一轮,无需再重新启动程序
  4. 生成jar文件,更方便使用。

六、 附录
源代码:

package KESHE;


import javax.swing.*;  
import java.awt.*;  
import java.awt.event.*;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.awt.BorderLayout;  
import static java.awt.BorderLayout.*;  
  
public class Finish extends JFrame {  
	
int number,random,counter; //猜的数,答案,次数
long  time;//时间
JLabel welcomeJLabel;//定义一个组件  
JLabel hintJLabel;  //提示显示框
JTextField guessField;  //输入框
JPanel panel;//显示背景色  
  
  
public Finish() {  //布局
      super("猜数字");  //窗体名
     
      panel=new JPanel();  
      panel.setBackground(Color.PINK);  //定义背景色
    
     welcomeJLabel= new JLabel("已随机生成一个1到100的整数,来猜猜看吧");  
     add(welcomeJLabel,NORTH);  
    
     guessField=new JTextField(25);  //容乃字符长度
     panel.add(guessField);  
     add(panel); //默认添加到中间  
    
     hintJLabel= new JLabel("");  //初始换提示框
     add(hintJLabel,SOUTH);  

     TextFieldHandler handler=new TextFieldHandler();  
     guessField.addActionListener(handler);  //监听
    
     random=(int)(1+100*Math.random());  //产生随机数
     
}  

    long begintime=System.currentTimeMillis();//开始计时


private class TextFieldHandler implements ActionListener   {  
  
    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("");  //置空输入框
             }  
                    else{  
                       hintJLabel.setText("猜低了,请继续!已试错"+(++counter)+"次");  
                       guessField.setText("");  
              }  
      } 
      
      
            long endtime=System.currentTimeMillis();//结束计时
            time=endtime-begintime;//总时间
      //猜中后的用户提示 
            File f= new File("d:" + File.separator + "课设测试") ;//新建一个文件夹
            Writer out = null ;	
          try {
    	     String con=String.valueOf(time);//把time转换成字符串
      	con+="\r\n";//换行
		out = new FileWriter(f,true);
		out.write(con) ;// 将内容输出,保存文件
		out.close() ;// 关闭文件


	     } catch (IOException e) {
		// TODO Auto-generated catch block
		      e.printStackTrace();
	    }
      if (counter<3)  
          JOptionPane.showMessageDialog(null, "恭喜您,猜中了,真厉害!");  
      else if (counter==6)  
          JOptionPane.showMessageDialog(null, "终于猜中了!");  
      else  
          JOptionPane.showMessageDialog(null, "您终于猜中了╮(╯▽╰)╭,您其实可以做得更好的!");  
      
      //开始下一轮猜数字游戏前的初始化工作  
     guessField.setText("");  
     random=(int)(1+100*Math.random());  
     counter=0;  
        
       }  
   }  
}  
  
public static void main(String[] args)  
{  
   Finish f = new Finish(); // create ListFrame  
   f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
   f.setSize(400,300);   
   f.setVisible(true);   
}  
}  

posted @ 2018-01-25 12:15  Devilss  阅读(221)  评论(0编辑  收藏  举报