1-100以内的猜数游戏_第1页
1-100以内的猜数游戏_第2页
1-100以内的猜数游戏_第3页
1-100以内的猜数游戏_第4页
1-100以内的猜数游戏_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、*实践教学实践教学*软件学院软件学院2014 年春季学期Java 课程设计课程设计 说明书题题 目:目:1-1001-100 以内的猜数游戏以内的猜数游戏专业班级:专业班级: 姓姓 名:名: 学学 号:号: 指导教师:指导教师: 成成 绩:绩:- 2 -目录目录目录目录.- 2 -摘要摘要.- 3 -序言序言.- 4 -1 1、需求分析、需求分析.- 5 -1.1 课程设计目的.- 5 -1.2 课程设计的任务及要求.- 5 -2.2.设计思路设计思路.- 6 -2.1 系统总体设计.- 6 -2.2 功能模块设计.- 7 -2.2.1 功能模块详细设计.- 7 -3 3、详细设计、详细设计.

2、- 10 -3.1 程序流程图.- 10 -3.2 源程序和关键算法.- 11 -3.2.1 源程序.- 11 -3.2.2 关键算法.- 15 -4 4、运行调试与分析讨论、运行调试与分析讨论.- 20 -4.1 测试方案.- 20 -4.2 运行结果分析.- 21 -4.3 类与数据结构实现.- 24 -5 5、设计体会与小结、设计体会与小结.- 25 -参考文献参考文献.- 27 -致致 谢谢.- 28 - 3 -摘要摘要本设计将一个 1-100 以内的猜数字游戏作为研究对象。设计出一个有系统随机选出一个1-100 的数字不显示出来,由玩家猜这个数字,直到猜中为止,并显示出玩家猜中数字所

3、用时间和次数对玩家做出评判,并对所涉及的相关技术进行初步的探讨。程序运行就进入游戏玩家就可以进行数字猜猜看了。关键字: 数字游戏 java 代码 图形化界面(GUI)编程- 4 -序言 这次课程设计内容是猜数游戏,利用 java 平台进行设计编程。这次课程设计让我们更深入的了解了 java 编程,并且能更熟练的编写 java 程序能力,还提升了我们分析和解决问题的能力,这次程序设计使我们对于 java 语言的认识更加透彻。对于这次的猜数游戏课程设计十分有意思,过程也遇到了各种问题,通过查找资料和各种调试,并且能在5天内完成这次课设体现了团队的合作能力。 本猜数游戏的程序是将一个1-100以内的

4、猜数字游戏作为研究对象。设计出一个有系统随机选出一个1-100的数字不显示出来,由玩家猜这个数字,直到猜中为止,并显示出玩家猜中数字所用时间和次数对玩家做出评判。操作简单易懂,对于玩家的评判的语言风趣幽默。 虽然按时完成了这次的猜数游戏程序设计,但我们还有许多不足之处,需要进行更多的机会来编写 java 程序。- 5 -1、需求分析1.1 课程设计目的课程设计目的(1)使学生巩固和提高 Java 编程技术;(2)培养学生掌握程序设计的基本思路和方法; (3)加强学生研发、调试程序的能力;(4)培养学生分析、解决问题的能力; (5)提高学生的科技论文写作能力。1.2 课程设计的任务及要求课程设计

5、的任务及要求任务:图形化界面(GUI)编程,开发一个猜数游戏程序(1)计算机产生随机数(1-100) ,不显示(2)由玩家来测数字猜中即胜(3)猜不中,提示是大了还是小了,继续猜,直至猜准(4)给出所用时间和评语- 6 -2.设计思路2.1 系统总体设计系统总体设计猜数字游戏游戏随机给出一个 1100 (包括 1 和 100) 之间的数字,然后让你猜是什么数字。你可以随便猜一个数字,游戏会提示太大还是太小,从而缩小结果范围。经过几次猜测与提示后,最终推出答案。图一游戏界面:采用图形界面显示。页面有如下功能:开始,结束,重来。游戏开始后,由计算机产生一个 1-100 的随机数,不显示在图形界面,

6、但显示在字符界面。用户只需输入所猜想的数字,打印在输入框内,按“确定”按钮表示确定,游戏返回提示语句,按照提示语句操作,直至游戏结束。同时,计算机开始对游戏进行计时和计数功能。游戏过程中,如果不想继续玩了,可以直接退出,想重新开局,按“重新开始”按钮即可。想控制界面大小只需拖拽图形界面边框即可。游戏界面产生随机数游戏说明重新开始游戏开始关闭游戏记录次数输出字符记录时间- 7 -游戏结束后,可以选择“关闭”游戏,或者是“重新开始” 。2.2 功能模块设计图二2.2.1功能模块详细设计功能模块详细设计1 1、随机数的获取、随机数的获取功能描述:玩家输入一个数字,数字的范围在 1-100 之间,系统

7、获取随机数。2 2 、输入输出模块、输入输出模块猜数游戏随机数的获取输入输出 模 块系统对玩家给出的数进行判断和输出判断模 块时间是否继续的选择水平自动计数模块结果输出模块- 8 -功能描述:对玩家输入的数字进行判断和提示。如果玩家输入的不是系统要求的数字,系统将提示您,您输入的不是数字请重新输入.。如果玩家输入的数字与随机生成数相比较,比随机生成数小.系统提示您,数字太小请您重新输入。如果玩家输入的数字与随机生成数相比较,比随机生成数大.系统提示您,数字太大请您重新输入。输入输出模块对玩家输入的数字进行判断和提示您输入的不是数字您输入的太小您输入的太大猜对了图三3 3 、判断模块、判断模块功

8、能描述:算出所用时间在玩家猜中时给出其所用时间,系统给出对其水平的判断和是否继续的提示;对玩家要求判断执行。判断模块时间计算功 能系统对玩家的水平做出 判断提示玩家重新开始- 9 -4 4、 自动计数模块自动计数模块功能描述:系统根据您猜数字的次数,自动计数. 5 5、 结果输出模块结果输出模块功能描述:直到用户猜到数字为止,提示信息是否重新猜数字,如果重新开始将进入下一次游戏,如果关闭将退出游戏系统。玩家猜数字,若猜错计数器加 1- 10 -3、详细设计3.1 程序流程图程序流程图开 始系统开始计时由用户输入一个数 yxy输入的大了,再小一点吧输入的小了,再大一点吧YN由计算机产生随机数 x

9、x=y系统结束计时系统统计猜数次数结 束- 11 -3.2 源程序和关键算法源程序和关键算法3.2.1 源程序源程序/* 程序运行时自动产生 1-100 的随机数 * 接受用户键盘输入数据并给出指示信息 * 直至猜对,游戏者猜对后,显示猜对次数 * 并且供计时功能 */import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.util.Random;import

10、 javax.swing.*;public class GuessNum extends javax.swing.JFrame /Set Look & Feel try /设置窗口外观为 windows 外观 javax.swing.UIManager.setLookAndFeel(com.sun.java.swing.plaf.windows.WindowsLookAndFeel); catch(ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFe

11、elException e) private JLabel jLabel1; private JTextField jTextField1; private JButton jButton1; private JButton jButton2; private int number=0; private int counter=0; long startTime = System.currentTimeMillis(); long endTime; /* * Auto-generated main method to display this JFrame */- 12 - public st

12、atic void main(String args) GuessNum inst = new GuessNum(); inst.setVisible(true); /显示窗口 /* *新建一个随机数产生器,然后生成一个 1 到 100 之间的整数*/ public GuessNum() super(); initGUI(); Random random = new Random(); number = random.nextInt(100); /产生一个 1-100 间的随机数 /* *初始化窗口组件 */ private void initGUI() try setDefaultClose

13、Operation(WindowConstants.DISPOSE_ON_CLOSE);/窗口关闭时销毁窗口 getContentPane().setLayout(null);/设置窗口布局为绝对布局 jLabel1 = new JLabel(); getContentPane().add(jLabel1); jLabel1.setText(欢迎进入有趣的猜数字游戏;+ 1 到 100 之间的整数,你猜是什么?快来猜猜看(.)+ 请输入你想猜的数:); jLabel1.setBounds(45, 0, 420, 150);/设置标签位置 jTextField1 = new JTextField

14、(); getContentPane().add(jTextField1); jTextField1.setBounds(42, 168, 112, 28);/输入窗口大小 jTextField1.addKeyListener(new KeyAdapter()/文本框添加键盘按键监听-监听回车键 public void keyPressed(KeyEvent evt) jTextField1KeyPressed(evt); ); jButton1 = new JButton(); getContentPane().add(jButton1);- 13 - jButton1.setText(确定

15、); jButton1.setBounds(182, 168, 77, 28);/确定按钮 jButton1.addActionListener(new ActionListener()/按钮添加监听 Override public void actionPerformed(ActionEvent evt) jButton1ActionPerformed(evt);/按钮被点击时 执行该方法 ); jButton2 = new JButton(); getContentPane().add(jButton2); jButton2.setText(重新开始); jButton2.setBound

16、s(280, 168, 91, 28);/设置重新开始按钮 jButton2.addActionListener(new ActionListener() Override public void actionPerformed(ActionEvent evt) jButton2ActionPerformed(evt); ); pack(); this.setSize(450, 280);/ 设置窗口大小 setLocationRelativeTo(null);/ 设置窗口在显示器居中显示 catch (Exception e) e.printStackTrace(); /* * “确定”按钮

17、事件监听 * param evt */ private void jButton1ActionPerformed(ActionEvent evt) int guess=0; / 记录玩家所猜测的数字 counter+; / 计数器增加一/ try,catch 的异常管理。 try / 获取玩家的输入 guess=Integer.parseInt(jTextField1.getText(); catch (Exception e) - 14 - / 如果玩家不是输入一个合法的整数,则让他重新输入。 JOptionPane.showMessageDialog(null, 数字不合法,请输入一个 1

18、-100 之间的整数!); jTextField1.setText();/清空文本框内容 jTextField1.requestFocus();/文本框获取输入焦点 return ; / 对玩家的输入进行判断。 if (guess number) JOptionPane.showMessageDialog(null, 猜的有点大了!,再小一点吧!); jTextField1.setText(); jTextField1.requestFocus(); return ; if (guess number) JOptionPane.showMessageDialog(null, 猜的有点大了!,再

19、小一点吧!); jTextField1.setText(); jTextField1.requestFocus(); return ; if (guess number) JOptionPane.showMessageDialog(null, 猜的一有点小了!,再大一点吧!); jTextField1.setText(); jTextField1.requestFocus(); return ; if (guess = number) endTime=System.currentTimeMillis();- 17 -(3 3)判定成绩模块)判定成绩模块/ 判断成绩。 switch (count

20、er) case 1: JOptionPane.showMessageDialog(null,好厉害,真棒! (); break; case 2: case 3: case 4: case 5: case 6: case 7: JOptionPane.showMessageDialog(null,这么快就猜对了,好厉害哦! (); break; default:JOptionPane.showMessageDialog(null,猜了半天才猜出来,小同志,尚须努力啊! (_); break; JOptionPane.showMessageDialog(null,您总共猜了+counter+次

21、共花了+(endTime-startTime)/1000+秒的时间答对正确答案!); jTextField1.setText(); jTextField1.requestFocus(); switch 语句是基于整型表达式的条件判断语句,猜数字用它来进行成绩判断。可以看出,switch 语句是和若干 case 语句和一个 default 语句搭配使用的。代码中的 switch 语句用 counter 变量的值进行判断。当 counter 的值为 1 时,便执行 case 1 里面的语句,即打印“好厉害,真棒!”的字样,随后的 break 语句表示整个 switch 语句执行到这里结束了。当 c

22、ounter 的值为 2 时,便执行 case 2 里面的语句。可以发现 case 2 到case 6 都没有 break 语句,这表示依次执行下面的语句,从而 counter 的值为2 至 7 时,都打印“这么快就猜对了,好厉害哦!”字样。- 18 -当 counter 的值不是 1 至 7 时,便执行 default 语句,打印“猜了半天才猜出来,小同志,尚须努力啊!”的字样。(4 4)计时模块)计时模块计时模块的代码分别写在游戏的开始和游戏的结束,取得时间差,以毫秒为单位。long startTime = System.currentTimeMillis();long endTime =

23、 System.currentTimeMillis();(5 5)异常处理)异常处理Java 语言提供了异常(Exception)处理机制帮助程序员发现并处理异常。所谓异常,就是在程序执行过程中能干扰程序正常流程的事件。导致异常的原因很多,比如文件找不到、数组越界、除以零等。当异常出现时,一个异常对象将被自动生成并传递给 Java“运行时环境”(runtime system),说得专业一点,就是抛出一个异常。异常对象包含了异常类型、程序运行状态等信息。 “运行时环境”得到异常对象后便打断程序的正常流程,自动寻找一个专门处理该异常的代码块来解决问题。这样的代码块称作异常句柄(Exception

24、Handler)。你可以在异常句柄中尝试修复错误、重试或者报错,或者实在无法进行下去的时候来个自我了断。如果“运行时环境”找不到异常句柄,Java 程序便会自行中断。一个典型的异常处理如下:try statement(s); catch (exceptiontype1 name) statement(s); catch (exceptiontype2 name) statement(s); finally - 19 -statement(s); 其中:try 语句括起来的语句可能抛出异常。try 语句至少要搭配一个 catch 语句或 finally 语句,不能单独使用。catch 语句必须和

25、一个 try 语句配套使用,根据异常类型(exception type)分别处理不同的异常。也就是说,Java 有许多预先定义的异常,你可以通过多个catch 语句对它们分门别类地处理。你还可以自己定义异常类型。如果 try 语句块中没有抛出异常,这里自然不会被执行。finally 语句也必须和一个 try 语句配套使用,与 catch 语句不同,无论try 语句块中是否抛出异常,finally 所包括的语句块都会被执行我设计的猜数字游戏需要从控制台获取玩家输入的数字,有多个异常处理可以编写如下代码: /Set Look & Feel try javax.swing.UIManager

26、.setLookAndFeel(com.sun.java.swing.plaf.windows.WindowsLookAndFeel); catch(Exception e) e.printStackTrace(); / try,catch 的异常管理。 try guess=Integer.parseInt(jTextField1.getText(); catch (Exception e) 使用异常机制的诸多好处:使得程序更健壮,界面更友善。把程序的业务逻辑与错误处理分开,代码更合理,更美观。- 20 -异常可以分层次处理,使得代码更简洁。同类的异常可以归到一类一起处理,处理更方便。4、运行

27、调试与分析讨论4.1 测试方案测试方案点击运行程序后,显示出图形界面。系统自动获取到一个随机数。玩家输入一个数,点击“确定”按钮。如果玩家输入的数比系统给出的随机数小,系统会提示“您猜的太小了,请继续猜!” 。如果玩家输入的数比系统给出的随机数大,系统提示“您猜的太大了,请继续猜!” 。如果玩家猜对了数,但是所用时间大于七次,系统会提示“猜了半天才猜出来,小同志,尚须努力啊!” ,并且会计算出玩家所用的时间和所猜的次数。如果玩家猜对了数,而且所用时间小于七次,系统会提示“这么快就猜对了,好厉害哦!” ,并且会计算出玩家所用的时间和所猜的次数。如果玩家想重新再玩一次,点击“重新开始”按钮即可继续

28、玩下一轮游戏。- 21 -4.2 运行结果分析运行结果分析开始运行程序时图形界面的显示玩家输入一个数“25”后,点击“确定” ,系统提示“猜的有点小了,再大一点!” 。- 22 -玩家再次输入一个数“70”后,点击“确定” ,系统提示您“猜的有点大了,再小一点!” 。玩家再次输入一个数“32” ,点击“确定” ,系统提示“猜了半天才猜出来,小同志,尚须努力” ,单击确定显示“您总共猜了 8 次,您猜数字总共花了 33 秒” 。- 23 -玩家再重新玩一次,获取随机数后,玩家输入一个随机数“90” ,点击“确定” ,系统提示“正确”!您总共猜了 2 次,您猜数字总共花了 14 秒” 。- 24

29、-如果玩家输入数字不再 1 到 100 以内数字系统提示错误!4.34.3 类与数据结构实现类与数据结构实现首先搭建 Java 程序框架。打开 Eclipse,新建名为 GuessNumGame 的项目,然后新建名为 GuessNum 的 Java 类。GuessNum 加上合适的 javadoc。(1)随机数的产生我们可以借助 Java API 提供的 Random 类来产生一个随机数。首先在 main 函数中加入以下三行代码:/ 新建一个随机数产生器,然后生成一个 1 到 100 之间的整数。Random random = new Random();int num = random.nex

30、tInt(100);第一句定义了一个类型是 Random 类的变量 random(Java 语言区分大小写,所以 Random 和 random 是不同意思),并且用 new 操作符生成一个 Random 类的实例赋给 random 变量。random 变量实际上是一个参照,指向内存中用 new 操作符新建的 Random 类的实大多数情况下可以把 random 直接看做是一个 Random- 25 -类的实例,可以通过“random”加上“.操作符”来调用 Random 类的方法,用random.nextInt(100)来获取一个 1 至 100 之间的随机数。第二句语句定义一个整型变量 n

31、umber 来保存随机产生的整数,并且用直接初始化的方法把 random 产生的随机数赋给 number 变量。(2)输入输出界面 标准输入输出(Standard I/O)是指可以被应用程序使用的信息流。比如,应用程序可以从标准输入(Standard input)读取数据,向标准输出(Standard output)写数据,把出错信息发送到标准错误(Standard error)。猜数字游戏主要用到标准输入,即控制台输入。用 System.out.println 进行控制台输出,用System.in 进行控制台输入。它是一个纯粹的输入流,而猜数字游戏主要是通过控制台获取玩家的字符输入,则需要把它包装成一个 BufferedReader 实例来使用BufferedRe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论