《java课程设计猜数字游戏.docx》由会员分享,可在线阅读,更多相关《java课程设计猜数字游戏.docx(24页珍藏版)》请在三一办公上搜索。
1、java课程设计猜数字游戏目 录 前言. 1 正文. 1 1、设计任务与要求. 1 1.1 设计任务与要求. 1 1.2 选题目的与意义. 1 2、需求分析. 2 2.1 用户需求分析. 2 2.2 开发环境分析. 2 3、系统设计. 3 3.1 系统总体设计:. 3 3.1.1 总体设计分析. 3 3.1.2 程序结构 . 3 3.2 功能模块设计. 5 3.2.1 功能模块图 . 5 3.2.2 功能模块详细设计. 5 3.3 类的设计: . 7 4、程序实现. 8 4.1 程序流程图. 8 4.2 关键算法与技术实现. 9 4.2.1 随机数的获取. 9 4.2.2 输入输出 . 10
2、4.2.3 判断时间 . 11 4.2.4 自动计数 . 11 4.2.5 结果输出 . 11 4.2.6 图形界面的实现. 12 4.3 类的实现 . 13 5、源程序:. 14 6、测试运行. 17 6.1 系统测试方案. 17 6.2 运行结果分析. 18 6.3结论 . 18 致谢 . 19 参考文献. 19 前言 Java是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能优异、多线程的动态语言。猜数字游戏是一个简单,有趣的小游戏。通过设计猜数字游戏,可以进一步了解Swing图形用户界面设计,事件处理和异常处理机制。利用Eclipse平台,综合运用Ja
3、va基础知识,设计猜数字游戏。 正文 1、设计任务与要求 1.1 设计任务与要求 功能要求:该程序用图形界面实现下面功能:用计算机产生一个100以内的随机数,游戏者进行猜数,猜中即胜,猜不中,提示是大了还是小了,继续猜,直至猜对为止。游戏结束后给出评语并计算出玩家所用的时间与所猜的次数。 具体要求: (1) 输入任意一个数字。数字的要求是1100的自然数即可。 (2) 系统对您输入的数字进行判断。如果玩家输入的数字与计算机随机生成数相比较,输入的数字比随机生成数小.系统将提示您,数字太小请您重新输入。如果玩家输入的数字与计算机随机生成数相比较,如果输入的数字比随机生成数大。系统将提示您,数字太
4、大请您重新输入。如果玩家输入的字符不是合法字符,系统将提示您,您输入的数字不合法,请从新输入。 (3) 每猜测一次,系统会记录下来,游戏结束后,显示共猜测多少次。 ,进入游戏界面。 是对Eclipse IDE的扩展,利用它我们可以在数据库和JavaEE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML, Struts, JSF, CSS, Javascript, SQL, Hibernate。 在结构上, Eclipse的特征可以被分为7类: 1. JavaEE模型 2. WEB开发工具
5、 3. EJB开发工具 4. 应用程序服务器的连接器 5. JavaEE项目部署服务 6. 数据库服务 2 7. Eclipse整合帮助 对于以上每一种功能上的类别,在Eclipse中都有相应的功能部件,并通过一系列的插件来实现它们。Eclipse结构上的这种模块化,可以让我们在不影响其他模块的情况下,对任一模块进行单独的扩展和升级。 简单而言,Eclipse是Eclipse的插件,也是一款功能强大的JavaEE集成开发环境,支持代码编写、配置、测试以及除错。 该程序基于JDK和Eclipse编写,选用Eclipse是界面设计所需。根据系统范围随机产生一个数字,可根据玩家选择给出不同的数字。玩
6、家输入所猜数字时给出与真实数字的大小比较。在玩家猜中时,可给出其所用时间,并给出评价。最后,游戏的结束与继续可由玩家控制。 3、系统设计 3.1 系统总体设计: 3.1.1 总体设计分析 1.随机数的获取:玩家输入一个数字,数字的范围在1-100之间,系统获取随机数。 2. 输入输出模块:对玩家输入的数字进行判断和提示。如果玩家输入的不是系统要求的数字,系统将提示您,您输入的不是数字请重新输入.。如果玩家输入的数字与随机生成数相比较,比随机生成数小.系统提示您,数字太小请您重新输入。如果玩家输入的数字与随机生成数相比较,比随机生成数大.系统提示您,数字太大请您重新输入。 3. 判断模块:算出所
7、用时间在玩家猜中时给出其所用时间,系统给出对其水平的判断和是否继续的提示;对玩家要求判断执行。 4.自动计数模块:系统根据您猜数字的次数,自动计数. 5.结果输出模块:直到用户猜到数字为止,提示信息是否继续猜数字,如果继续将进入下一次游戏,如果退出将退出游戏系统. 3.1.2 程序结构 点击“获取随机数”按钮,系统获取到一个随机数。 玩家输入一个数,如果玩家输入的数比系统给出的随机数小,系统会提示“您猜的太小了,请继续猜!”。如果玩家输入的数比系统给出的随机数大,系统提示“您猜的太大了,请继续猜!”。 如果玩家猜对了数,但是所用时间大于十秒,系统会提示“这么久才猜出来,有点笨!”,并且会计算出
8、玩家所用的时间和所猜的次数。如果玩家猜对了数,而且所用时间小于十秒,系统会提示“恭喜您,猜对了!您真棒,智商真高!”,并且会计算出玩家所用的时间和所猜的次数。 3 恭喜您, 猜对了! 这么久才猜出来,有点笨 猜对 输出“您猜的太大了,请继续猜” 若XY 系统产生一个随机数X 玩家输入一个在099范围内的数Y 开 始 图1 程序结构图 结 束 储存记录 4 3.2 功能模块设计 3.2.1 功能模块图 游戏分为随机数的获取,输入输出模块,判断模块,自动计数模块,结果输出模块。其中输入输出模块中系统会对玩家给出的数进行判断和输出。判断模块会对玩家的水平进行判断,并计算出玩家所用的时间和次数。 猜数
9、游戏 随机数的获取 输入输出 模 块 判断模 块 自动计数模 块 结果输出模 块 系统玩家出的进行断和出 对给数判输时间 水平 是否 继续 的选 择 图2 功能模块图 3.2.2 功能模块详细设计 随机数的获取 功能描述:玩家输入一个数字,数字的范围在1-100之间,系统获取随机数。 输入输出模块 功能描述:对玩家输入的数字进行判断和提示。如果玩家输入的不是系统要求的数字,系统将提示您,您输入的不是数字请重新输入.。如果玩家输入的数字与随机生成数相比较,5 比随机生成数小.系统提示您,数字太小请您重新输入。如果玩家输入的数字与随机生成数相比较,比随机生成数大.系统提示您,数字太大请您重新输入。
10、 输入输出模块 对玩家输入的数字进行判断和提示 您输入的不是数 字 您输入的太 小 您输入的太 大 猜对了 图3 输入输出模块图 (3) 判断模块 功能描述:算出所用时间在玩家猜中时给出其所用时间,系统给出对其水平的判断和是否继续的提示;对玩家要求判断执行。 判断模块 时间计算功 能 系统对玩家的水平做出 判断 提示玩家是否继 续 图4 判断模块图 (4) 自动计数模块 功能描述:系统根据您猜数字的次数,自动计数. 玩家猜数字,若猜错 6 计数器加1 图5 自动计数模块图 (5) 结果输出模块 功能描述:直到用户猜到数字为止,提示信息是否继续猜数字,如果继续将进入下一次游戏,如果退出将退出游戏
11、系统. 3.3 类的设计: 表1类的分类 类名 Math.random BorderLayout Concurrent 数学中的随机数。 图形界面窗口的设计与调整 concurrent 在并发编程中很常用的实用工具类。 从用户的角度看,Java 源程序中的类分为两种: 系统定义的类:即 Java 类库,它是系统定义好的类。Java 语言由语法规则和类库两部分组成,语法规则确定 Java 程序的书写规范;类库则提供了 Java 程序与运行它的系统软件之间的接口。 用户自定义类:系统定义的类虽然实现了许多常见的功能,但是用户程序仍然需要针对特定问题的特定逻辑来定义自己的类。 在 Java 程序中,
12、用户自定义类的一般格式如下: class 类名 数据成员 成员方法 类的结构是由类说明和类体两部分组成的。 类的说明部分由关键字 class 与类名组成,类名的命名遵循 Java 标识符的定义规则。 类体是类声明中花括号所包括的全部内容,它又是由数据成员和成员方法两部分组成。 数据成员描述对象的属性;成员方法则刻画对象的行为或动作,每一个成员方法确定一个功能或操作。 7 属性 首先搭建Java程序框架。打开Eclipse,新建名为GuessNumberGame的项目,然后新建名为GuessNumber的Java类。GuessNumber加上合适的javadoc。 第一步:随机数的产生 我们可以
13、借助Java API提供的Random类来产生一个随机数。 首先在main函数中加入以下三行代码: / 新建一个随机数产生器,然后生成一个1到100之间的整数。 num=(int)(Math.random*100); String answer; Scanner input=new Scanner(System.in); 第二步:标准输入输出 标准输入输出(Standard I/O)是指可以被应用程序使用的信息流。应用程序可以从标准输入(Standard input)读取数据,向标准输出(Standard output)写数据,把出错信息发送到标准错误(Standard error)。通过输入
14、输出,应用程序和应用程序之间可以被串联起来使用。虽然标准输入输出是从UNIX发展出来的概念,在Windows中也广泛应用。 猜数字游戏主要用到标准输入,更明确一些,就是控制台输入。相反,要从控制台输入,就需要用到System.in。它是一个纯粹的输入流,而猜数字游戏主要是通过控制台获取玩家的字符输入,我们需要把它包装成一个BufferedReader。 第三步:使用BorderLayout对图形界面的窗口进行设计。 4、程序实现 4.1 程序流程图 点击“获取随机数”按钮,系统获取到一个随机数。 玩家输入一个数,如果玩家输入的数比系统给出的随机数小,系统会提示“您猜的太小了,请继续猜!”。如果
15、玩家输入的数比系统给出的随机数大,系统提示“您猜的太大了,请继续猜!”。 如果玩家猜对了数,但是所用时间大于十秒,系统会提示“这么久才猜出来,有点笨!”,并且会计算出玩家所用的时间和所猜的次数。如果玩家猜对了数,而且所用时间小于十秒,系统会提示“恭喜您,猜对了!您真棒,智商真高!”,并且会计算出玩家所用的时间和所猜的次数。 8 恭喜您, 猜对了! 这么久才猜出来,有点笨 猜对 输出“您猜的太大了,请继续猜” 若XY 开 始 系统产生一个随机数X 玩家输入一个在099范围内的数Y 图6 程序流程图 4.2 关键算法与技术实现 4.2.1 随机数的获取 num=(int)(Math.random*
16、100); 结 束 储存记录 9 String answer; Scanner input=new Scanner(System.in); 4.2.2 输入输出 for(i=1;i=10;i+) if(num2num) lbshow.setText(您猜的太大了,请继续猜!); continue; long endTime=System.currentTimeMillis; long t; t=(endTime-startTime)/1000; strshow=您总共猜了+counter+次,您猜数字总共花了+(endTime-startTime)/1000+秒; if(t10) lbshow
17、.setText(这么久才猜出来,有点笨!+strshow); 4.2.3 判断时间 startTime=System.currentTimeMillis; long endTime=System.currentTimeMillis; strshow=您猜数字总共花了+(endTime-startTime)/1000+秒; 4.2.4 自动计数 int geust=0; counter+; strshow=您总共猜了+counter+次; 4.2.5 结果输出 long t; t=(endTime-startTime)/1000; strshow=您总共猜了+counter+次,您猜数字总共花
18、了+(endTime-startTime)/1000+秒; if(t10) lbshow.setText(这么久才猜出来,有点笨!+strshow); 11 4.2.6 图形界面的实现 BorderLayout bdmg=new BorderLayout; Button button1=new Button(获取随机数); Button button2=new Button(确定); String str=null; String str2=null; long startTime; int num,num2; int counter=0; myGeustNum my1=new myGeust
19、Num; TextField input; Label lbshow=new Label(); Label lbshow2=new Label(); int i; String strshow; public void init setLayout(bdmg); add(button1,BorderLayout.NORTH); button1.addActionListener(this); button1.setSize(50,50); Label lb1=new Label( 请输入); lb1.setSize(50,20); this.add(lb1,BorderLayout.WEST)
20、; input=new TextField(10); input.setSize(40,50); add(input,BorderLayout.CENTER); add(button2,BorderLayout.EAST); lb1.setSize(50,20); button2.addActionListener(this); button2.setSize(50,20); 12 add(lbshow,BorderLayout.SOUTH); setSize(450,200); 4.3 类的实现 首先搭建Java程序框架。打开Eclipse,新建名为GuessNumberGame的项目,然后
21、新建名为GuessNumber的Java类。GuessNumber加上合适的javadoc。 第一步:随机数的产生 我们可以借助Java API提供的Random类来产生一个随机数。 首先在main函数中加入以下三行代码: / 新建一个随机数产生器,然后生成一个1到100之间的整数。 num=(int)(Math.random*100); String answer; Scanner input=new Scanner(System.in); Eclipse立即在错误语句处划出红线,把鼠标移动到红线上。 包(Package)的概念 Java API中包含了极其丰富、类似于Random这样由Su
22、n预先定义好的类。不同包中可以有同名同姓的类,如果没有包的概念,就会遇到命名冲突问题。此外,包还能进行安全控制。Random类是在java.util这个包中。可以手动在源程序顶部输入import java.util.Random;语句来申明该程序将要使用java.util包中的Random类,然而有了Eclipse,就不用那么麻烦了把光标移动到有红色波浪线的Random上,然后按下CtrlShiftM,Eclipse会自动帮你完成导入的工作了,此时保存一下源代码。 第二句语句定义一个整型变量number来保存随机产生的整数,并且用直接初始化的方法把random产生的随机数赋给number变量。
23、 第二步:标准输入输出 标准输入输出(Standard I/O)是指可以被应用程序使用的信息流。应用程序可以从标准输入(Standard input)读取数据,向标准输出(Standard output)写数据,把出错信息发13 送到标准错误(Standard error)。通过输入输出,应用程序和应用程序之间可以被串联起来使用。虽然标准输入输出是从UNIX发展出来的概念,在Windows中也广泛应用。 猜数字游戏主要用到标准输入,更明确一些,就是控制台输入。相反,要从控制台输入,就需要用到System.in。它是一个纯粹的输入流,而猜数字游戏主要是通过控制台获取玩家的字符输入,我们需要把它包
24、装成一个BufferedReader。 第三步:使用BorderLayout对图形界面的窗口进行设计。 5、源程序: Package a; import java.awt.Color; import java.awt.Container; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.Box; import javax.swing.JButton; import javax.swing.JFrame;
25、import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JTextField; class WindowButton extends JFrame implements ActionListener /* */ private static final long serialVersionUID = 1L; int number; JTextField inputNumber; JLabel feedBack; JButton buttonGetNumber,buttonEnter; Windo
26、wButton(String s) super(猜数字小游戏); buttonGetNumber=new JButton(得到一个随机数); feedBack=new JLabel(无反馈信息,JLabel.CENTER); feedBack.setBackground(Color.green); inputNumber=new JTextField(0,5); buttonEnter=new JButton(确定); buttonEnter.addActionListener(this); buttonGetNumber.addActionListener(this); buttonGetN
27、umber.addActionListener(this); Box boxH1=Box.createHorizontalBox; boxH1.add(new JLabel(获取1-100之间的随机数:); 14 * boxH1.add(buttonGetNumber); Box boxH2=Box.createHorizontalBox; boxH2.add(new JLabel(输入您的猜测: ); boxH2.add(inputNumber); Box boxH3=Box.createHorizontalBox; boxH3.add(new JLabel(单击确定按钮: ); boxH3
28、.add(buttonEnter); Box boxH4=Box.createHorizontalBox; boxH4.add(new JLabel(反馈信息: ); boxH4.add(feedBack); Box baseBox=Box.createVerticalBox; baseBox.add(boxH1); baseBox.add(boxH2); baseBox.add(boxH3); baseBox.add(boxH4); Container con=getContentPane; con.setLayout(new FlowLayout); con.add(baseBox); c
29、on.validate; setBounds(120,125,279,200); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100,100,150,150); setVisible(true); validate; public void actionPerformed(ActionEvent e) if(e.getSource=buttonGetNumber) number=(int)(Math.random*100)+1; else if(e.getSource=buttonEnt
30、er) int guess=0; try guess=Integer.parseInt(inputNumber.getText); if(guess=number) JOptionPane.showMessageDialog(this,猜对了); else if(guessnumber) JOptionPane.showMessageDialog(this,猜大了); inputNumber.setText(null); else if(guessnumber) JOptionPane.showMessageDialog(this,猜小了); inputNumber.setText(null)
31、; catch(NumberFormatException event) JOptionPane.showMessageDialog(this,请输入数字字符); 15 public class 猜数字游戏 public static void main(String args) new WindowButton(猜数字小游戏); package b; import java.util.Date; import java.util.Scanner; public class test2 public static void main(String args) /给定生成随机数的范围11000 Scanner input = new Scanner(System.in); int num = (int) (Math.random * 100) + 1; System.out.println(系统已经生成数字,猜猜看这个数字是多少?(如果实在猜不出来,就输入投降吧); Date d1 = new Date; int gNum = 0; int count = 0; boolean isHandup = false; do co