当前位置:文档之家› JAVA猜数游戏实训报告

JAVA猜数游戏实训报告

XXXXXXX 大学实习(实训)报告名称Java程序设计项目实训01猜数游戏2112年12月31日至2013年1月6日共1周院系计算机工程系班级姓名系主任教研室主任指导教师目录目录 (2)一、课程设计的目的与要求 (3)二、题目说明 (3)2.1程序开发背景 (3)2.2开发工具介绍 (4)三、总体设计 (4)3.1.系统总体设计: (4)3.2.系统流程图: (5)3.3功能结构图: (6)四、详细说明 (6)4.1 类与数据结构的实现 (6)4.2 关键算法的实现 (7)4.3 运行结果分析 (11)五、遇到的问题和解决方法 (13)六、课程设计总结 (13)七、参考文献 (14)附录(源程序代码) (14)一、课程设计的目的与要求1) 复习,巩固Java语言的基础知识,进一步加深对Java语言的理解和掌握;2) 实训为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力,提高学生适应实际,实践编程的能力;3) 培养学生在项目开发中团队合作精神,创新意识及能力。

二、题目说明功能要求:计算机产生随机数,猜中即胜,猜不中,提示是大了还是小了,继续猜,直至猜到,给出所用时间和评语.界面要示:用字符界面实现,也可用图形界面实现.2.1程序开发背景设计一个猜数字游戏程序,要求具体如下特性:(1)趣味性:要求游戏内容丰富多彩,语言风趣幽默。

(2)大众性:要求游戏界面操作简单,游戏规则简单易懂。

(3)合理性:游戏设计严谨,有条理,具体需求如下①输入任意一个数字。

数字的要求是1—100的整数即可。

②系统对您输入的数字进行判断。

如果玩家输入的数字与计算机随机生成数相比较,输入的数字比随机生成数小.系统将提示您,数字太小请您重新输入。

如果玩家输入的数字与计算机随机生成数相比较,如果输入的数字比随机生成数大。

系统将提示您,数字太大请您重新输入。

如果玩家输入的字符不是合法字符,系统将提示您,您输入的数字不合法,请从新输入。

③游戏开始时,系统自动记录您猜的时间,结束后显示所花费的时间。

④每猜测一次,系统会记录下来,游戏结束后,显示共猜测多少次。

⑤在游戏开始时,自动显示游戏规则。

⑥在游戏结束时,可以选择关闭游戏,或者重新开始。

2.2开发工具介绍eclipse简介:Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。

就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

幸运的是,Eclipse 附带了一个标准的插件集,包括 Java 开发工具(Java Development Tools,JDT)。

Eclipse 的设计思想是:一切皆为插件。

它自身的核心是非常小的,其它所有的功能都以插件的形式附加到该核心上。

Eclipse中三个最吸引人的地方:一是它创新性的图形API,即SWT/JFace,在此之前,我曾经用过Java 的AWT/SWING来开发Windows应用程序,AWT/SWING其界面客观地讲不够美观,而且界面响应速度比较慢;而SWT/JFace则大大改善了Java在这方面的能力。

二是它的插件机制。

三是利用它的插件机制开发的众多功能强大的插三、总体设计3.1.系统总体设计:猜数字游戏—游戏随机给出一个1—100 (包括1和100) 之间的数字,然后让你猜是什么数字。

你可以随便猜一个数字,游戏会提示大了还是小了,从而缩小结果范围。

经过几次猜测与提示后,最终猜出答案。

3.2.系统流程图:3.3功能结构图:4.1 类与数据结构的实现首先搭建Java程序框架。

打开Eclipse,新建名为zsy的项目,然后新建名为zsy的Java类。

zsy加上合适的javadoc。

(1)随机数的产生可以借助Java API提供的Random类来产生一个随机数。

首先在main函数中加入以下2行代码:新建一个随机数产生器,然后生成一个1到100之间的整数。

Random random = new Random();int number = random.nextInt(100);第一句定义了一个类型是Random类的变量random(Java语言区分大小写,所以Random和random 是不同意思),并且用new操作符生成一个Random类的实例赋给random变量。

random变量实际上是一个参照,指向内存中用new操作符新建的Random类的实大多数情况下可以把random直接看做是一个Random类的实例,可以通过“random”加上“.操作符”来调用Random类的方法,用random.nextInt(100)来获取一个1至100之间的随机数。

第二句语句定义一个整型变量number来保存随机产生的整数,并且用直接初始化的方法把random产生的随机数赋给number变量。

(2)输入输出界面标准输入输出(Standard I/O)是指可以被应用程序使用的信息流。

比如,应用程序可以从标准输入(Standard input)读取数据,向标准输出(Standard output)写数据,把出错信息发送到标准错误(Standard error)。

猜数字游戏主要用到标准输入,即控制台输入。

用System.out.println进行控制台输出,用System.in进行控制台输入。

它是一个纯粹的输入流,而猜数字游戏主要是通过控制台获取玩家的字符输入,则需要把它包装成一个BufferedReader 实例来使用。

BufferedReader input = new BufferedReader(new InputStreamReader(System.in)):这时,input就是一个能处理来自控制台输入的、支持Unicode的、可以整行读取的一个BufferedReader实例,比如能通过input.readLine()方法获取玩家在控制台整整一行的输入。

4.2 关键算法的实现(1)记录猜测次数模块记录玩家猜测的次数,计数器增加一:counter = 0;counter++;首先定义了一个counter变量来记录玩家猜测的次数,并直接初始化为0。

在打印一行游戏提示以后,便开始一个do-while语句。

在do-while语句中,首先用异常处理语句获取玩家的输入,如果玩家输入不合法,提示以后用continue语句从头重新执行循环语句,等待玩家的输入。

从而,guess变量一定包含一个合法的整数。

之后要对玩家的输入进行判断。

如果玩家的猜测太大或者太小,都做出提示。

接着把计数器增加1,表示玩家做过一次猜测。

最后便是do-while语句的判断:当玩家猜测的数字和随机产生的答案不同,则再次进入循环,否则便结束循环,执行下面的代码。

(2)输入输出模块用来获取玩家的输入的代码:guess=Integer.parseInt(jTextField1.getText());如果玩家不是输入一个合法的整数,则让他重新输入,代码如下:JOptionPane.showMessageDialog(null, "亲,数字不合法,请输入一个1-100之间的整数!");jTextField1.setText("");jTextField1.requestFocus();return ;}对玩家的输入进行判断,代码如下:if (guess > number){JOptionPane.showMessageDialog(null, "亲,输的大了,再小一点吧!");jTextField1.setText("");jTextField1.requestFocus();return ;}if (guess < number){JOptionPane.showMessageDialog(null, "亲,输的小了,再大一点吧!");jTextField1.setText("");jTextField1.requestFocus();return ;}if (guess == number) {endTime=System.currentTimeMillis();(3)判定成绩模块判断成绩打代码如下:switch (counter) {case 1: JOptionPane.showMessageDialog(null,"亲,要不要这么给力啊!膜拜!");break;case 2:case 3:case 4:case 5:case 6:case 7:case 8: JOptionPane.showMessageDialog(null,"这么快就猜对了,你很smart啊!");break;default:JOptionPane.showMessageDialog(null,"猜了半天才猜出来,小同志,尚须努力啊!");break;}JOptionPane.showMessageDialog(null,"您总共猜了"+counter+"次共花了"+(endTime-startTime)/1000+"秒的时间答对正确答案!");}jTextField1.setText("");jTextField1.requestFocus();}switch语句是基于整型表达式的条件判断语句,猜数字用它来进行成绩判断。

可以看出,switch 语句是和若干case语句和一个default语句搭配使用的。

代码中的switch语句用counter变量的值进行判断。

当counter的值为1时,便执行case 1里面的语句,即打印“你是神么??这也太给力了吧!!”的字样,随后的break语句表示整个switch语句执行到这里结束了。

当counter的值为2时,便执行case 2里面的语句。

可以发现case 2到case 6都没有break 语句,这表示依次执行下面的语句,从而counter的值为2至7时,都打印“这么快就猜对了,你很smart啊!”字样。

当counter的值不是1至8时,便执行default语句,打印“猜了半天才猜出来,小同志,尚须努力啊!”的字样。

(4)计时模块计时模块的代码分别写在游戏的开始和游戏的结束,取得时间差,以毫秒为单位。

long startTime = System.currentTimeMillis();long endTime = System.currentTimeMillis();(5)异常处理一个典型的异常处理如下:try {statement(s);} catch (exceptiontype1 name) {statement(s);} catch (exceptiontype2 name) {statement(s);} finally {statement(s);}try语句括起来的语句可能抛出异常。

相关主题