个人项目

https://github.com/xuweizheng/test

一、实践目的

1、掌握基本输入输出。

2、掌握方法定义与调用,理解参数传递方式。

3、掌握数组的声明、定义与初始化,数组的处理。

4、掌握数组作为方法参数和返回值。

5. 掌握Java的语言规范,面向对象的核心概念和特性;

6. 掌握Java的编程技术,包括异常处理,图形界面设计;

7. 掌握Java应用软件的开发环境和开发过程;

8. 掌握面向对象的思想和程序设计方法

 

二、实践要求

利用方法、数组、基本输入输出等Java基础知识,给出所选项目的基本设计与实现。

三、项目需求

猜数字游戏

本设计将一个1-100以内的猜数字游戏作为研究对象。设计出一个有系统随机选出一个1-100的数字不显示出来,由玩家猜这个数字,直到猜中为止,并显示出玩家猜中数字所用时间和次数对玩家做出评判,并对所涉及的相关技术进行初步的探讨。

程序运行就进入游戏玩家就可以进行数字猜猜看了。

四、项目设计方案

 

4.1课程设计的要求

设计一个猜数字游戏程序,该游戏可以由程序随机产生整数,玩游戏者通过由用户输入数字来匹配上面所产生的数字。用户随机输入数字,当与计算机产生的随机数相符合时,计算机将提醒用户,游戏成功的信息,当有偏差时,将会提醒偏差,如偏大或者是偏小。

4.2 系统总体设计

 

 

猜数字游戏—游戏随机给出一个1—100 (包括1和100) 之间的数字,然后让你猜是什么数字。你可以随便猜一个数字,游戏会提示太大还是太小,从而缩小结果范围。经过几次猜测与提示后,最终推出答案。(如图1)

图1系统设计结构图

游戏界面:采用图形界面显示。页面有如下功能:开始,结束,重来。

游戏开始后,由计算机产生一个1-100的随机数,不显示在图形界面,但显示在字符界面。用户只需输入所猜想的数字,打印在输入框内,按“确定”按钮表示确定,游戏返回提示语句,按照提示语句操作,直至游戏结束。

            同时,计算机开始对游戏进行计时和计数功能。

游戏过程中,如果不想继续玩了,可以直接退出,想重新开局,按“重新开始”按钮即可。想控制界面大小只需拖拽图形界面边框即可。

游戏结束后,可以选择“关闭”游戏,或者是“重新开始”。

4.3功能模块设计

4.4功能模块详细设计

   1、随机数的获取

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

 2 、输入输出模块

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

3 、判断模块

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

 

4、 自动计数模块

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

5、 结果输出模块

    功能描述:直到用户猜到数字为止,提示信息是否重新猜数字,如果重新开始将进入下一次游戏,如果关闭将退出游戏系统。

五、详细设计

5.1 程序流程图(如图6)

5.2uml图

六、核心算法详细设计     

 6.1关键算法

(1)记录猜测次数模块

记录玩家猜测的次数
counter = 0;

计数器增加一

counter++;

 

首先定义了一个counter变量来记录玩家猜测的次数,并直接初始化为0。在打印一行游戏提示以后,便开始一个do-while语句。

在do-while语句中,首先用异常处理语句获取玩家的输入,如果玩家输入不合法,提示以后用continue语句从头重新执行循环语句,等待玩家的输入。从而,guess变量一定包含一个合法的整数。之后要对玩家的输入进行判断。

如果玩家的猜测太大或者太小,都做出提示。接着把计数器增加1,表示玩家做过一次猜测。

最后便是do-while语句的判断:当玩家猜测的数字和随机产生的答案不同,则再次进入循环,否则便结束循环,执行下面的代码。 (用Eclipse的Alt+/快捷键帮助编写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: JOptionPane.showMessageDialog(null,"这么快就猜对了,好厉害哦!  ↖(^ω^)↗");

    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时,都打印“这么快就猜对了,好厉害哦!”字样。

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

 (4)计时模块

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

long startTime = System.currentTimeMillis();

long endTime = System.currentTimeMillis();

 (5)异常处理

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

一个典型的异常处理如下:

try {

statement(s);

 } catch (exceptiontype1 name) {

statement(s);

 } catch (exceptiontype2 name) {

statement(s);

} finally {

statement(s);

 }

  其中:

  try语句括起来的语句可能抛出异常。try语句至少要搭配一个catch语句或finally语句,不能单独使用。
  catch语句必须和一个try语句配套使用,根据异常类型(exception type)分别处理不同的异常。也就是说,Java有许多预先定义的异常,你可以通过多个catch语句对它们分门别类地处理。你还可以自己定义异常类型。如果try语句块中没有抛出异常,这里自然不会被执行。
  finally语句也必须和一个try语句配套使用,与catch语句不同,无论try语句块中是否抛出异常,finally所包括的语句块都会被执行

我设计的猜数字游戏需要从控制台获取玩家输入的数字,有多个异常处理

可以编写如下代码:

{

  //Set Look & Feel

  try {

   javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");

  } catch(Exception e) {

   e.printStackTrace();

  }

 }

 

       // try,catch的异常管理。

  try {

   guess=Integer.parseInt(jTextField1.getText());

  } catch (Exception e) {

使用异常机制的诸多好处:

使得程序更健壮,界面更友善。

把程序的业务逻辑与错误处理分开,代码更合理,更美观。

异常可以分层次处理,使得代码更简洁。

    同类的异常可以归到一类一起处理,处理更方便。

6.2类与数据结构实现

首先搭建Java程序框架。打开Eclipse,新建名为GuessNumGame的项目,然后新建名为GuessNum的Java类。GuessNum加上合适的javadoc。

(1)随机数的产生

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

首先在main函数中加入以下三行代码:

// 新建一个随机数产生器,然后生成一个1到100之间的整数。

Random random = new Random();
int num = 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()方法获取玩家在控制台整整一行的输入。

七、使用说明与运行结果截图

 (1)开始运行程序时图形界面的显示(如图8)

玩家输入一个数“58”后,点击“确定”,系统提示“猜的有点小了,再大一点!”。(如图9)

玩家再次输入一个数“70”后,点击“确定”,系统提示您“猜的有点大了,再小一点!”。(如图10)

玩家再次输入一个数“32”,点击“确定”,系统提示“猜了半天才猜出来,小同志,尚须努力”,单击确定显示“您总共猜了8次,您猜数字总共花了33秒”。(如图11 12)

玩家再重新玩一次,获取随机数后,玩家输入一个随机数“90”,点击“确定”,系统提示“正确”!您总共猜了2次,您猜数字总共花了14秒”。(如图13)

如果玩家输入数字不再1到100以内数字系统提示错误!(如图14)

八、实验总结

经过这次实验,我发现在操作的过程中我都遇到了很多的困难,同时我也得到了很多的收获的。

在选题初期时,不知道选什么题比较好,后来衡量了一下自己,最终选择是猜数字游戏。

在本次试验中,给我印象最为深刻的是程序的编译过程中,从中我学到了许多以前学有学会和没有学到的函数。比如do-while语句的判断,控制台输入的概念和方法。除此之个还不其它一些函数也得到了巩固。以前总是模模糊糊的,现在心里十分清楚了。,对一些类及方法的运用显得只能,这次的学习让我从纸上谈兵逐渐的过渡到实践出真知。通过这次课程设计,我进一步加深对基础理论的理解,扩大专业知识面,对收集资料、查阅文献、方案制定等实践方面得到了很好的锻练,促进对所学知识应用能力的提高。同时我渐渐的复习了Java使用方法和编程语法,之后的编程过程也相对得心应手,基本完成了预期计划的要求。

 

 

posted @ 2015-04-26 15:09  xuweizheng  阅读(485)  评论(4编辑  收藏  举报