java课程设计猜数游戏课程设计报告.doc
学号xxxx面向对象程序设计课程设计报告题目:下拉列表运算器设计专业:xxxxx班级:xxx姓名:xx指导教师:xx成绩:xxxxxx年 x月xx日目录1 设计内容及要求11.1 课程设计目的11.2 设计项目名称11.3 类的结构分布12 概要设计22.1系统总体功能22.2 游戏流程概述23 设计过程或程序代码33.1 猜数游戏33.2功能模块详细设计43.3 类的设计54 程序代码调试64.1程序流程64.2关键算法与技术实现64.2.1 随机数的获取64.2.2 输入输出64.2.3 判断时间74.2.4 自动计数74.2.5 结果输出84.2.6 图形界面的实现84.3 类的实现95设计结果与分析105.1登录界面105.2游戏界面105.3猜数举例11参考文献121 设计内容及要求功能要求:该程序用图形界面实现下面功能:用计算机产生一个100以内的随机数,游戏者进行猜数,猜中即胜,猜不中,提示是大了还是小了,继续猜,直至猜对为止。游戏结束后计算出玩家所用的时间与所猜的次数。1.1 课程设计目的通过设计一个标准化考试系统设计,进一步熟悉Java中的概念、基本知识和技能利用所学的基本知识和技能解决简单的面向对象的程序设计问题。了解系统开发的需求分析、层次设计、模块分解、编码测试、模块组装与整体调试的全过程,加深对Java的理解与eclipse环境的使用:逐步熟悉程序设计的方法,并养成良好的编程习惯。1.2 设计项目名称 猜数游戏设计1.3 类的结构分布图 1 类的分布2 概要设计在设计标准考试设计时,编写了2个Java源文件:GuessShu.java,Dengru.java.游戏分为随机数的获取,输入输出模块,判断模块,自动计数模块,结果输出模块。其中输入输出模块中系统会对玩家给出的数进行判断和输出。判断模块会对玩家的水平进行判断,并计算出玩家所用的时间和次数。2.1系统总体功能猜数游戏结果输出模 块自动计数模 块判断模 块输入输出 模 块随机数的获取时间系统对玩家给出的数进行判断和输出图 2 游戏框架2.2 游戏流程概述 开 始系统产生一个随机数X玩家输入一个在099范围内的数Y若X>Y 输出“猜小了”若X<Y输出“猜大了”对了! 储存记录 结 束图 3 游戏流程3 设计过程或程序代码3.1 猜数游戏1.随机数的获取:玩家输入一个数字,数字的范围在1-100之间,系统获取随机数。2. 输入输出模块:对玩家输入的数字进行判断和提示。如果玩家输入的不是系统要求的数字,系统将提示您,您输入的不是数字请重新输入.。如果玩家输入的数字与随机生成数相比较,比随机生成数小.系统提示您,数字太小请您重新输入。如果玩家输入的数字与随机生成数相比较,比随机生成数大.系统提示您,数字太大请您重新输入。3. 判断模块:算出所用时间在玩家猜中时给出其所用时间,系统给出对其水平的判断和是否继续的提示;对玩家要求判断执行。4.自动计数模块:系统根据您猜数字的次数,自动计数.5.结果输出模块:直到用户猜到数字为止,提示信息是否继续猜数字,如果继续将进入下一次游戏,如果退出将退出游戏系统.3.2功能模块详细设计(1)随机数的获取功能描述:玩家输入一个数字,数字的范围在1-100之间,系统获取随机数。(2) 输入输出模块功能描述:对玩家输入的数字进行判断和提示。如果玩家输入的不是系统要求的数字,系统将提示您,您输入的不是数字请重新输入.。如果玩家输入的数字与随机生成数相比较,比随机生成数小.系统提示您,数字太小请您重新输入。如果玩家输入的数字与随机生成数相比较,比随机生成数大.系统提示您,数字太大请您重新输入。输入输出模块对玩家输入的数字进行判断和提示您入的不是数 字您输入的太 小您输入的太 大猜对了图4 输入输出模块图(3) 判断模块功能描述:算出所用时间在玩家猜中时给出其所用时间,系统给出对其水平的判断和是否继续的提示;对玩家要求判断执行。(4) 自动计数模块功能描述:系统根据您猜数字的次数,自动计数.计数器加1玩家猜数字,若猜错图5 自动计数模块图(5) 结果输出模块功能描述:直到用户猜到数字为止,提示信息是否继续猜数字,如果继续将进入下一次游戏,如果退出将退出游戏系统.3.3 类的设计表1类的分类类名属性Math.random数学中的随机数。BorderLayout图形界面窗口的设计与调整Concurrentconcurrent 在并发编程中很常用的实用工具类。从用户的角度看,Java 源程序中的类分为两种:系统定义的类:即 Java 类库,它是系统定义好的类。Java 语言由语法规则和类库两部分组成,语法规则确定 Java 程序的书写规范;类库则提供了 Java 程序与运行它的系统软件(Java 虚拟机)之间的接口。用户自定义类:系统定义的类虽然实现了许多常见的功能,但是用户程序仍然需要针对特定问题的特定逻辑来定义自己的类。在 Java 程序中,用户自定义类的一般格式如下: class 类名数据成员成员方法类的结构是由类说明和类体两部分组成的。类的说明部分由关键字 class 与类名组成,类名的命名遵循 Java 标识符的定义规则。类体是类声明中花括号所包括的全部内容,它又是由数据成员(属性)和成员方法(方法)两部分组成。数据成员描述对象的属性;成员方法则刻画对象的行为或动作,每一个成员方法确定一个功能或操作。首先搭建Java程序框架。打开Eclipse,新建名为GuessNumberGame的项目,然后新建名为GuessNumber的Java类。GuessNumber加上合适的javadoc。第一步:随机数的产生我们可以借助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)。通过输入输出,应用程序和应用程序之间可以被串联起来使用。虽然标准输入输出是从UNIX发展出来的概念,在Windows中也广泛应用。猜数字游戏主要用到标准输入,更明确一些,就是控制台输入。相反,要从控制台输入,就需要用到System.in。它是一个纯粹的输入流,而猜数字游戏主要是通过控制台获取玩家的字符输入,我们需要把它包装成一个BufferedReader。第三步:使用BorderLayout对图形界面的窗口进行设计。4 程序代码调试4.1程序流程点击“获取随机数”按钮,系统获取到一个随机数。 玩家输入一个数,如果玩家输入的数比系统给出的随机数小,系统会提示“猜小了”。如果玩家输入的数比系统给出的随机数大,系统提示“猜大了”。 如果玩家猜对了数,会计算出玩家所用的时间和所猜的次数。如果玩家猜对了数。4.2关键算法与技术实现4.2.1 随机数的获取number = (int) (Math.random() * 10) + 1;4.2.2 输入输出 public void actionPerformed(ActionEvent e) if (e.getSource() = buttonGetNumber) number = (int) (Math.random() * 10) + 1; else if (e.getSource() = buttonEnter) int guess = 0;try guess = Integer.parseInt(inputNumber.getText();if (guess = number) JOptionPane.showMessageDialog(this, "猜对了");dui+; else if (guess > number) JOptionPane.showMessageDialog(this, "猜大了");da+;inputNumber.setText(null); else if (guess < number) JOptionPane.showMessageDialog(this, "猜小了");xiao+;inputNumber.setText(null); catch (NumberFormatException event) JOptionPane.showMessageDialog(this, "请输入数字字符");else if(e.getSource()=result)time2=System.currentTimeMillis();4.2.3 判断时间time2=System.currentTimeMillis();JOptionPane.showMessageDialog(this, "您此次操作花费时间为"+(time2-time1)+"ms"+"n"+"猜对有:"+dui+"次"+"n"+"猜大有:"+da+"次"+"n"+"猜小有:"+xiao+"n");4.2.4 自动计数if (guess = number) JOptionPane.showMessageDialog(this, "猜对了");dui+; else if (guess > number) JOptionPane.showMessageDialog(this, "猜大了");da+;inputNumber.setText(null); else if (guess < number) JOptionPane.showMessageDialog(this, "猜小了");xiao+;inputNumber.setText(null)4.2.5 结果输出 JOptionPane.showMessageDialog(this, "您此次操作花费时间为"+(time2-time1)+"ms"+"n"+"猜对有:"+dui+"次"+"n"+"猜大有:"+da+"次"+"n"+"猜小有:"+xiao+"n");4.2.6 图形界面的实现 JPanel jp1,jp2,jp3;JTextField inputNumber;JLabel jl1,jl2;JButton buttonGetNumber, buttonEnter,exit,result;long time1,time2;int da=0,xiao=0,dui=0;public GuessShu() time1=System.currentTimeMillis();jp1=new JPanel();jl1=new JLabel("产生随机数");buttonGetNumber = new JButton("随机数");jp1.add(jl1);jp1.add(buttonGetNumber);jp2=new JPanel();jl2=new JLabel("输入你猜的数");inputNumber = new JTextField("0", 5);jp2.add(jl2);jp2.add(inputNumber);jp3=new JPanel();buttonEnter = new JButton("确定");result=new JButton("结果");exit=new JButton("结束");exit.addActionListener(this);jp3.add(buttonEnter);jp3.add(result);jp3.add(exit);result.addActionListener(this);buttonEnter.addActionListener(this);buttonGetNumber.addActionListener(this);this.setLayout(new GridLayout(3, 1); / 3, 1this.getContentPane().add(jp1);this.getContentPane().add(jp2);this.getContentPane().add(jp3);this.setResizable(false);this.setTitle("沈悦:猜数字游戏");this.setBounds(100, 100, 280, 200);this.setVisible(true);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);4.3 类的实现首先搭建Java程序框架。打开Eclipse,新建名为shenyue的项目,然后新建名为GuessNumber的Java类,再建立一个Dengru的Java类第一步:随机数的产生我们可以借助Java API提供的Random类来产生一个随机数。首先在main函数中加入以下三行代码:/ 新建一个随机数产生器,然后生成一个1到100之间的整数。 number=(int)(Math.random()*100);Eclipse立即在错误语句处划出红线,把鼠标移动到红线上。包(Package)的概念Java API中包含了极其丰富、类似于Random这样由Sun预先定义好的类。不同包中可以有同名同姓的类,如果没有包的概念,就会遇到命名冲突问题。此外,包还能进行安全控制。Random类是在java.util这个包中。可以手动在源程序顶部输入import java.util.Random;语句来申明该程序将要使用java.util包中的Random类,然而有了Eclipse,就不用那么麻烦了把光标移动到有红色波浪线的Random上,然后按下CtrlShiftM,Eclipse会自动帮你完成导入的工作了,此时保存一下源代码。第二句语句定义一个整型变量number来保存随机产生的整数,并且用直接初始化的方法把random产生的随机数赋给number变量。第二步:标准输入输出标准输入输出(Standard I/O)是指可以被应用程序使用的信息流。应用程序可以从标准输入(Standard input)读取数据,向标准输出(Standard output)写数据,把出错信息发送到标准错误(Standard error)。通过输入输出,应用程序和应用程序之间可以被串联起来使用。虽然标准输入输出是从UNIX发展出来的概念,在Windows中也广泛应用。猜数字游戏主要用到标准输入,更明确一些,就是控制台输入。相反,要从控制台输入,就需要用到System.in。它是一个纯粹的输入流,而猜数字游戏主要是通过控制台获取玩家的字符输入,我们需要把它包装成一个BufferedReader。 第三步:使用BorderLayout对图形界面的窗口进行设计。5设计结果与分析5.1登录界面图4输入账号与密码5.2游戏界面图5 进入游戏界面5.3猜数举例第一次猜数第二次猜数第三次猜数第七次猜数按下结果按钮参考文献格式:1耿祥义张跃平.Java面向对象程序设计 M.北京清华大学出版社2009.11. 2耿祥义张跃平.Java课程设计第二版 M.北京清华大学出版2008.7.3庞丽萍 阳富名.计算机操作系统 第二版 M 北京 清华大学出版 2010.