天天看点

结对项目

一.   题目简介:  

功能要求:该程序用图形界面实现下面功能:用计算机产生一个100以内的随机数,游戏者进行猜数,猜中即胜,猜不中,提示是大了还是小了,继续猜,直至猜对为止。游戏结束后给出评语并计算出玩家所用的时间与所猜的次数。

具体要求:

(1) 输入任意一个数字。数字的要求是1—100的自然数即可。

(2) 系统对您输入的数字进行判断。如果玩家输入的数字与计算机随机生成数相比较,输入的数字比随机生成数小.系统将提示您,数字太小请您重新输入。如果玩家输入的数字与计算机随机生成数相比较,如果输入的数字比随机生成数大。系统将提示您,数字太大请您重新输入。如果玩家输入的字符不是合法字符,系统将提示您,您输入的数字不合法,请从新输入。

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

(4) 欢迎界面:通过这里提供的选项(或按钮),进入游戏界面。

(5) 游戏界面提供“获取随机数”按钮,系统获取到随机数,游戏者输入自己的猜测结果,通过按“确认”按钮完成输入。每次提示输入猜测结果时,给出猜测的准确度提示。

(6) 按“获取随机数”按钮,继续游戏。

(7) 游戏结束后给出评语并计算出玩家所用的时间与所猜次数。

界面要示:用图形界面实现。

二.   结对分工及过程

在本次作业中,我刘效玲负责写代码,文丽君负责测试代码。

github链接:http://github.com/wenlijun/

设计过程:

(1)随机数的获取

功能描述:玩家输入一个数字,数字的范围在1-100之间,系统获取随机数。

(2)输入输出模块

功能描述:对玩家输入的数字进行判断和提示。如果玩家输入的不是系统要求的数字,系统将提示您,您输入的不是数字请重新输入.。如果玩家输入的数字与随机生成数相比较,比随机生成数小.系统提示您,数字太小请您重新输入。如果玩家输入的数字与随机生成数相比较,比随机生成数大.系统提示您,数字太大请您重新输入。

输入输出模块
对玩家输入的数字进行判断和提示
您输入的不是数 字
您输入的太 小
您输入的太 大
猜对了

图3 输入输出模块图

(3) 判断模块

功能描述:算出所用时间在玩家猜中时给出其所用时间,系统给出对其水平的判断和是否继续的提示;对玩家要求判断执行。

判断模块
时间计算功 能
系统对玩家的水平做出      判断
提示玩家是否继 续

图4 判断模块图

(4) 自动计数模块

功能描述:系统根据您猜数字的次数,自动计数.

玩家猜数字,若猜错
计数器加1

图5 自动计数模块图

(5) 结果输出模块

功能描述:直到用户猜到数字为止,提示信息是否继续猜数字,如果继续将进入下一次游戏,如果退出将退出游戏系统.

 类的设计:

表1类的分类

类名 属性
Math.random 数学中的随机数。
BorderLayout 图形界面窗口的设计与调整
Concurrent concurrent 在并发编程中很常用的实用工具类。

从用户的角度看,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对图形界面的窗口进行设计。

三.程序实现

1 程序流程图

点击“获取随机数”按钮,系统获取到一个随机数。 玩家输入一个数,如果玩家输入的数比系统给出的随机数小,系统会提示“您猜的太小了,请继续猜!”。如果玩家输入的数比系统给出的随机数大,系统提示“您猜的太大了,请继续猜!”。 如果玩家猜对了数,但是所用时间大于十秒,系统会提示“这么久才猜出来,有点笨!”,并且会计算出玩家所用的时间和所猜的次数。如果玩家猜对了数,而且所用时间小于十秒,系统会提示“恭喜您,猜对了!您真棒,智商真高!”,并且会计算出玩家所用的时间和所猜的次数。

系统产生一个随机数X
玩家输入一个在0~99范围内的数Y
若X>Y
输出“您猜的太小了,请继续猜”
若X<Y
输出“您猜的太大了,请继续猜”
猜对
这么久才猜出来,有点笨
储存记录

恭喜您,猜对了!

您真棒!

 结 束

                           图6 程序流程图

2 关键算法与技术实现

package 软件个人作业;

import java.util.InputMismatchException;

import java.util.Scanner;

public class R {

        public static void main(String[] args) {

                // 产生一个随机数

                int number = (int) (Math.random() * 100) + 1;

                // 加入count

                int count = 0;

                // 在这里加入最大值,和最小值

                int max = 100;

                int min = 1;

                while (true) {

                        // 键盘录入数据

                        Scanner sc = new Scanner(System.in);

                        System.out.println("请输入你要猜的数据:(" + min + "~" + max + ")");

                        try {

                                count++;

                                int guessNumber = sc.nextInt();

                                // 判断

                                if (guessNumber > number) {

                                        max = guessNumber;

                                        System.out.println("您输入的太大");

                                } else if (guessNumber < number) {

                                        min = guessNumber;

                                        System.out.println("您输入的太小");

                                } else {

                                        System.out.println("恭喜你,花了" + count + "次就猜中了");

                                        // 问是否继续

                                        System.out.println("请问还要继续吗?(yes)");

                                        sc = new Scanner(System.in);

                                        String str = sc.nextLine();

                                        if ("yes".equals(str)) {

                                                // 重写赋值随机数

                                                number = (int) (Math.random() * 100) + 1;

                                                count = 0;

                                                max = 100;

                                                min = 1;

                                        } else {

                                                break;

                                        }

                                }

                        } catch (InputMismatchException e) {

                                System.out.println("你输入的不是数字");

                        }

                }

        }

}

3 类的实现

    num=(int)(Math.random()*100);      

String answer;     

 Eclipse立即在错误语句处划出红线,把鼠标移动到红线上。

包(Package)的概念

Java API中包含了极其丰富、类似于Random这样由Sun预先定义好的类。不同包中可以有同名同姓的类,如果没有包的概念,就会遇到命名冲突问题。此外,包还能进行安全控制。Random类是在java.util这个包中。可以手动在源程序顶部输入import java.util.Random;语句来申明该程序将要使用java.util包中的Random类,然而有了Eclipse,就不用那么麻烦了—把光标移动到有红色波浪线的Random上,然后按下Ctrl+Shift+M,Eclipse会自动帮你完成导入的工作了,此时保存一下源代码。

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

    第三步:使用BorderLayout对图形界面的窗口进行设计。

四.测试运行

1 系统测试方案

1.点击运行程序后,显示出图形界面。

2.点击“获取随机数”按钮,系统获取到一个随机数。

3 .玩家输入一个数,点击“确定”按钮。如果玩家输入的数比系统给出的随机数小,系统会提示“您猜的太小了,请继续猜!”。如果玩家输入的数比系统给出的随机数大,系统提示“您猜的太大了,请继续猜!”。

4 .如果玩家猜对了数,但是所用时间大于十秒,系统会提示“这么久才猜出来,有点笨!”,并且会计算出玩家所用的时间和所猜的次数。如果玩家猜对了数,而且所用时间小于十秒,系统会提示“恭喜您,猜对了!您真棒,智商真高!”,并且会计算出玩家所用的时间和所猜的次数。

5. 如果玩家想重新再玩一次,点击“获取随机数”按钮即可继续玩下一轮游戏。

2 运行结果分析

开始运行程序时图形界面的显示

结对项目
结对项目
结对项目
结对项目
结对项目
结对项目
结对项目

五.心得与问题

  这是第一次结对编程,觉得很新奇,同时也有些问题,比方说分工,交流方面,因为平时时间较少,交流的还是不够多,经过几天的时间,终于弄完了,但是框架图没出来,看起来不方便,也请评论者谅解,以后会改进的。通过这次实践,把理论用到了实验中,使我更加认识了java的功能,只希望以后,老师能更加了解我们,跟我们一同进步。