猜数字小游戏JAVA程序报告
支票存根-环保烟花
JAVA程序设计报告 
——猜数字小游戏 
目录 
一、
猜数字小游戏简介 …………………………………………4 
二、
用户需求分析………………………………………………4 
三、
问题描述……………………………………………………4 
1. 
2.
课程设计的任务 
课程设计的要求 
四、
模块设计……………………………………………………5 
1. 
2. 
3.
课程设计的要求 
功能模块设计 
流程图 
五、
功能设计……………………………………………………7 
1 .   随机数的产生模块 
2
.   输入判断模块  
3 .   记录猜测次数模块 
4. 
5.
6. 
计时模块 
输入输出模块 
成绩判断模块
  
六、
异常处理……………………………………………………9 
七、
调试分析……………………………………………………10 
八、
不足之处……………………………………………………11 
九、
总结…………………………………………………………12 
十、
程序附页……………………………………………………13 
摘  要 
猜数字是一款非常经典
的脑力游戏,游戏规则简单,是消磨时间、锻炼脑力
的好选择。通过选择猜数字游戏这个题目,可以让我
掌握Java中的包和类,并且
可以灵活的使用my eclipse软件。同时更加深入的了解字符界
面的编程过程。使
我更熟练的掌握Java程序框架的搭建和类的创建格式。在分析阶段,要进行面向<
br>对象的需求分析、系统设计、画出相应的需求分析图、系统设计模型图,这些工
作更能锻炼我的逻
辑思维,更能培养我思考的全面性。让我学会了多角度思考问
题,对我以后的编程奠定了更好的基础。
一、
猜数字小游戏简介 
系统随机产生任意一个1—100的自然数,玩家输入数字,
若输入的数字比随机生成数小,
系统将提示,数字太小请您重新输入;如果输入的数字比随机生成数大,
系统将提示,数字太
大请您重新输入;若输入的字符不是合法字符,系统将提示,您输入的数字不合法,
请从新输
入,游戏开始时,系统自动记录您猜数字的时间和次数,结束后显示游戏共花费的次数和时间<
br>及对游戏结果的评价。 
二、用户需求分析
设计一个猜数字游戏程序,要求具体如下特性:
a.输入任意一个数字。数字的要求是1—100的自然数即可。
b.系统对您输入的数字进行判断。 
如果玩家输入的数字与计算机随机生成数相比较,输入的
数字比随机生成数小.系统将提示
您,数字太小请您重新输入。 
如果玩家输入的数字与计算机
随机生成数相比较,如果输入的数字比随机生成数大。系统
将提示您,数字太大请您重新输入。
如果玩家输入的字符不是合法字符,系统将提示您,您输入的数字不合法,请从新输入。 
c.
游戏开始时,系统自动记录您猜数字的时间,结束后显示游戏共花费的时间。 
d.
每猜测一次,系统会记录下来,游戏结束后,显示共猜测多少次。 
e.
在游戏结束时,可以选择关闭游戏,或者再来一局 
f. 游戏结束前可选择直接显示答案
三、问题描述 
1.课程设计的任务:
根据所选题目,完成课程设计的分析、设计和编码,写出课程设计报告。
(1)掌握Java的语言规范,面向对象的核心概念和特性;
(2)掌握Java的编程技术,包括异常处理,图形界面设计,多线程,网络通信程序等;
(3)掌握Java应用软件的开发环境和开发过程;
(4)掌握面向对象的思想和程序设计方法。 
2.课程设计的要求: 
设计一个猜数
字游戏程序,该游戏可以由程序随机产生整数,玩游戏者通过由用户输入数
字来匹配上面所产生的数字。
用户随机输入数字,当与计算机产生的随机数相符合时,计算机
将提醒用户,游戏成功的信息,当有偏差
时,将会提醒偏差,如偏大或者是偏小。 
四、模块设计 
1 .  系统总体设计 
2 .  功能模块设计 
开   始 
开始界面 
产生随机数number
模块组成 
系统开始计时 
开始游戏 
 
3 .  流程图
 
注册 登陆 
由用户输入一个数guess 
登陆模块
产生随机
G>N 
输出输入模块 
记录时间次数 
G=N
计时模块 
重新开始 
G
显示答案 
Y
猜大 猜小 
系统结束计时 
五、 功能
1 .  随机数的产生模块
我们可以借助Java API提
数。 
首先在main函数中加入以
设计
供的Random类来产生一个随机
系统统计猜数次数 
及对成绩的评价
下代码: 
结   束 
Random random = new
Random(); 
  number = t(100);  产生一个1-100间的随机数
2 .  输入判断模块 
在游戏界面中输入不合法 
try { 
 
 
 
 
 
 
 
 
guess = nt(t());      玩家输入获取 
}  
catch
(Exception e) {  
  ssageDialog(null,
请输入一个1-100之间的整数
显示对话框,输入不合法 
 
 
 
 
 
 
 
 
 
 
t(清空文本框内容 
tFocus(); 
return; } 
3 .
记录猜测次数模块 
 记录玩家猜测的次数 
counter = 0; 
计数器增加一 
counter++; 
4 .  计时模块
计时模块的代码分别写在游戏的开始和游戏的结束,取得时间差,以毫秒为单位。 
long
startTime = tTimeMillis(); 
long endTime =
tTimeMillis(); 
5 .  输入输出模块 
 对玩家的输入进行判断。
if (guess > number) {  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ssageDialog(null, ≧v≦)o猜大了
t(
tFocus();
return; 
} 
if (guess < number) {  
 
 
ssageDialog(null,
≧v≦)o太小啦
t(
tFocus();  
 
 
 
 
 
 
 
 
 
return;
}  
if (guess == number) {  
 endTime =
tTimeMillis();  
6 .  成绩判断模块 
 判断成绩。 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
switch
(counter) {  
case 1:   
 
ssageDialog(null, ∩_∩)O太给力了 吧
break;
case 2:  
case 3:  
 
ssageDialog(null,好腻害
break;  
case 4:
case 5: 
case 6: 
 
ssageDialog(null,∩_∩)O猜对,很不错哦!
break;
case 7:  
case 8: 
case 9: 
case 10:
 
 
 
 
}
ssageDialog(null,﹏+)有点慢,还要多练习; 
break;
ssageDialog(null, ﹏+)oh! NO,太慢啦,
break;
default:  
六、 异常处理 
我们在运行程序时往往会出现许多错误,而J
ava语言提供了异常(Exception)处理机制
帮助程序员发现并处理异常。所谓异常,就是在
程序执行过程中能干扰程序正常流程的事
件。导致异常的原因很多,比如文件找不到、数组越界、除以零
等。当异常出现时,一个
异常对象将被自动生成并传递给Java“运行时环境”,如果“运行时环境”
找不到异常句柄,
Java程序便会自行中断。
 
try
{statement(s); 
} catch (exceptiontype1 name) {
statement(s); 
} catch (exceptiontype2
name) { 
statement(s); 
} finally {
statement(s); 
} 
  try语句括起来的语句可能
抛出异常。try语句至少要搭配一个catch语句或finally语句,不
能单独使用,我设计的
猜数字游戏需要从控制台获取玩家输入的数字,有多个异常处理 
try { 
setDefaultCloseOperation(E_ON_CLOSE);
getContentPane().setLayout(null); 
 
 
} catch (Exception e) { 
 
 
} 
tackTrace(); 
 
   
try { 
 
 获取玩家的输入 
guess = nt(t()); 
  }
catch (Exception e)
 
七、调试分析 
八、不足之处
本小游戏还未建立游戏记录部分,无法记录
玩家游戏成绩记录和建立游戏排行榜
在界面设计方面还较为简单, 
游戏还有很多可修改和增加难度的地方 
总结 
经过这几天努力终于完成了这份课设,虽然在操作的过程中我都遇到了许
多的困难,但是却使我得到了
许多的意外收获。Java是一种简单的,面向对象
的,分布式的,解释型的,健壮安全的,结构中立的
,可移植的,性能优异、
多线程的动态语言。在写代码的过程中我们也遇到了一些的困难,就是对一些<
br>有关Java语言的不理解,我便又到课本中去查找。一个项目的成败关键不全在
于技术。要想在
一个愉快的氛围里边以轻松的心情来完成紧张的工作,严谨的
态度和工作的热情都是必不可少的。以前上
课时有许多的问题并没有真正的认
识到,但通过这次试验的制作,使我掌握了许多更重要的知识点。
程序附页 
package JAVA; 
 public
class Login extends JFrame { 
ArrayList
 ArrayList
 private static final
long serialVersionUID = 1L; 
 public Login() {
  ation(100, 100); 
  e(400, 180); 
le(欢迎进入有趣的猜数字小游戏
  loginWindow(); 
setLocationRelativeTo(null);
窗口居中显示 
  ible(true); 
 } 
 public void
loginWindow() { 
  JLabel name = new
JLabel(请输入玩家姓名:
  JLabel password = new
JLabel(请输入登陆密码:
  final JTextField tfName = new
JTextField(20); 
  final JPasswordField
tfPassword = new JPasswordField(20); 
  JButton
ok = new JButton(注册
  JButton cancel = new
JButton(登录
  JPanel pm = new JPanel(); 
JPanel p1 = new JPanel(); 
  JPanel p2 = new
JPanel(); 
  JPanel p3 = new JPanel(); 
(name); 
  (tfName); 
  (password); 
(tfPassword); 
  ionListener(new
ActionListener() { 
   public void
actionPerformed(ActionEvent arg0) { 
    (t());
    (t()); 
    ssageDialog(null, 注册成功
t(
    t(
   } 
  }); 
ionListener(new ActionListener() { 
@SuppressWarnings(
   @Override 
@SuppressWarnings(
   public void
actionPerformed(ActionEvent arg0) { 
TODO Auto-generated method stub 
    for (int i
= 0; i < (); i++) { 
     if ((i).equals(t()))
{ 
      if ((i).equals(t())) { 
ssageDialog(null, 登陆成功
setVisible(false);隐藏原界面 
       new
GuessNum();进入主界面 
      } 
      else { 
ssageDialog(null, 用户名或密
码有误
      } 
} 
    } 
   } 
  }); 
  (ok); 
(cancel); 
  (p1); 
  (p2); 
  (p3); 
(pm); 
  aultCloseOperation(_ON_CLOSE); 
} 
 public static void main(String[] args) {
  new Login(); 
 } 
} 
package JAVA;
 private static final long serialVersionUID =
1L; 
 private JLabel jLabel1;  
 private
JTextField jTextField1;  
 private JButton
jButton1;  
 private JButton jButton2; 
private JButton jButton3; 
 private int number
= 0;  
 private int counter = 0;   
 long
startTime = tTimeMillis();  
 long endTime;
计算时间 
 public GuessNum() {  
  super (猜数字小游戏
  initChuangkou();   
  Random random = new
Random();   
  number = t(100);
产生一个1——100的
随机数 
 }              
private void initChuangkou() {  
  try { 
setDefaultCloseOperation(E_ON_CLOSE);
窗口关闭时销毁窗口 
getContentPane().setLayout(null);
设置窗口布局为绝对布局 
   JFrame frame = new JFrame(
   out(new FlowLayout());   
   jLabel1 =
new JLabel();  
getContentPane().add(jLabel1);   
t(★欢迎进入有趣的猜数字游戏 ★       请输入
1~100中的任
意一个数: 
   nds(75,20, 200, 50); 
jTextField1 = new JTextField();  
getContentPane().add(jTextField1);  
nds(110, 100, 112, 28);   
   Listener(new
KeyAdapter() { 
    public void
keyPressed(KeyEvent evt) { 
jTextField1KeyPressed(evt);   
    } 
}); 
jButton1 = new JButton();  
getContentPane().add(jButton1);  
   t(确定  
nds(120, 160, 100, 25);   
   ionListener(new
ActionListener() { 
    public void
actionPerformed(ActionEvent evt) {  
jButton1ActionPerformed(evt);   按钮被点击时 执行该 方法 
} 
   }); 
jButton2= new JButton(); 
getContentPane().add(jButton2); 
   t(显示答案
nds(120, 200, 100, 25); 
   ionListener(new
ActionListener() { 
    public void
actionPerformed(ActionEvent evt2) {  
jButton2ActionPerformed(evt2);   按钮被点击时 执行该 方法
    } 
   }); 
jButton3= new JButton();
   getContentPane().add(jButton3); 
t(再来一次
   nds(120,240,100,25); 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
案 
 
 
 
ionListener(new ActionListener() { 
   public
void actionPerformed(ActionEvent evt3) {  
jButton3ActionPerformed(evt3);   按钮被点击时 执行该 方法
   } 
  }); 
  pack();   
   e(340,
400);               窗口大小 
setLocationRelativeTo(null);         设置窗口在显示器居中显示
  }  
 catch (Exception e) {  
tackTrace();   
 }  
 setVisible(true);
 }  
private void
jButton2ActionPerformed(ActionEvent evt2) { 
ssageDialog(null, 答案是     直接显示答
setVisible(false);
隐藏原界面 
 return; 
} 
private void
jButton3ActionPerformed(ActionEvent evt3){ 
setVisible(false); 
  new GuessNum(); 
 }
private void
jButton1ActionPerformed(ActionEvent evt) {  
int guess = 0;  
  counter++;      计数器加一 
try { 
   guess = nt(t());        玩家输入获取 
}  
  catch (Exception e) {  
ssageDialog(null, 请输入一个1-100之间 的整
数显示对话框,输入不合法
    t(    清空文本框内容 
    tFocus(); 
return; 
    }  
  if (guess > number) {
   ssageDialog(null, ≧v≦)o猜大了 
   t( 
tFocus();  
   return; 
   } 
  if (guess
< number) {  
  
  
  
  
  
  
  
花了
  
成绩判断 
ssageDialog(null, ≧v≦)o太小啦 
 t( 
 tFocus();
 return;   
 }  
if (guess == number) {
 endTime = tTimeMillis();  
ssageDialog(null,您总共猜了+ counter + 次  共 
+ (endTime - startTime)  1000 + 秒的时间答对正确答案!
switch (counter) {  
case 1:   
ssageDialog(null, ∩_∩)O太给力了 吧 
 break;
case 2:  
case 3:  
ssageDialog(null,好腻害
 break;  
case 4:
case 5: 
case 6: 
ssageDialog(null,∩_∩)O这么快就猜对,很
   
   
   
   
   
   
   
   
   
不错哦!
   
   
   
   
   
 
 
 
 
 
 
 
 
 
 
 
件 
 
 
 
 
 
 
 
 
 
 
 
 break;
case 7:  
case 8: 
case 9: 
case 10:
 ssageDialog(null,﹏+)有点慢,还要多练习 
break;
 default:  
  ssageDialog(null, ﹏+)oh!
NO,太慢啦, 
  break;   
 }  
}  
t(
清空文本框内容 
tFocus();               文本框获取输入焦点
setVisible(false);                       隐藏原界面
}   
 private void
jTextField1KeyPressed(KeyEvent evt) {  
 if
(Code() == _ENTER) {  
  k();      文本框按回车键
执行“确定”按钮的事
 
 
 
 
 
  
  
 } 
 } 
}  
public static
void main(String[] args) {  
 new GuessNum();
 }