JAVA猜数游戏
爱情誓言-薄荷日记
一、设计任务与要求
1.1 设计任务与要求
通过本课程设计实践,达到以下目的:
(1)培养学生严谨务实的工作态度,并在老师的指导
下,提高分析问题和解
决问题的能力,促进理论联系实际学风养成。
(2)巩固和加深对面向对象程序设计的基本概念、基本理论和实现技术的理
解。
(3)掌握Java开发的主要环境与工具,掌握面向对象的常用控件的使用方
法。
(4)初步掌握面向对象系统分析与设计的基本方法和步骤,并能针对简单的
实际应用问题进行初步地分
析和设计。
(5)掌握Java编程语言,并针对具体应用问题进行编程实现。
(6)通过撰写课程设计论文,锻炼学生科技论文写作能力。
具体任务如下:
设计一个猜数字游戏,使该游戏实现比较数字大小等功能,并给予用户游戏
的喜悦感。
具体的游戏规则如下:
1).
输入一个数字,数字的范围再0-99之间,系统随机生成数也在此范围
内.
2).如果玩家
输入的不是系统要求的数字,系统将报错,并继续提示用户:
请输入在0~99之间的数字.
3).如果玩家输入的数字与随机生成数相比较,比随机生成数小.系统提示
您:您输入的数字偏小,请
您重新输入.
4). 如果玩家输入的数字与随机生成数相比较,比随机生成数大.系统提示
您:你输入的数字偏大,请您重新输入.
5).系统根据您猜数字的次数,自动计数,并在用户完成游
戏时显示该次游
戏的猜数次数和游戏评语.
6).除了猜数过程,用户可以在想退出的情况下
之间输入退出口令,或者显
示答案口令来完成该次游戏,亦可查询以往的游戏记录并清除游戏记录。
1.2 选题目的与意义
Java语言作为当今
INTERNET上最流行的编程语言,它的产生自然与游戏
密切相关. 本课程设计是为了配合Jav
a程序设计课程,帮助学生深入学习掌握
Java语言,熟练运用这个工具而设立的课程。通过课程设计
各个项目的综合训练,
加强学生对JAVA语言的理解,检验学生对专业理论知识理解与掌握的程度,锻
炼学生综合运用JAVA程序设计处理所学的知识实际分析问题、解决问题的能力。
通过对猜
数游戏程序设计的学习,使学生掌握网络编程的基本方法,能够根
据现实生活实践编制出一些实用的小程
序.为进一步学习网站信息的建设打下基
础.
此学习过程中,一方面巩固了学生的JAVA程
序设计的应用,加深对JAVA
语言的掌握及对面向对象程序设计基本思想的理解,提高对面向对象技术
的具体
应用;另一方面,猜数游戏可以通过JAVA设计展现其娱乐性,游戏简单易懂,
容易操
作上手。
二、需求分析
2.1 用户需求分析
游戏随机自动生成一个随机数random number即0~99(包括0和99)的整
数
字,然后让用户猜是什么数字。用户可以随便猜一个数字,游戏会提示太大
还是太小,从而缩小猜数范围
。经过几次猜测与提示后,直至猜到,给出所用
猜数次数和评语最终退出游戏。在游戏过程中。记录用户
最终猜对时所需要的
次数。游戏结束后公布结果。
具体要求:通过菜单栏里提供的选项,进入
游戏界面。系统提示猜数字游戏
的运行情况,一般情况下为正常,随即游戏者可以输入自己的猜数结果,
可以通
过按回车键完成输入。每次完成一次游戏时,给出猜测的次数的统计。按其他选
项还可以
选择退出游戏,查询答案,查询游戏记录,清除游戏记录。
游戏中要求完成一下内容:
1)要求记录产生的随机数并计算用户猜数次数、并完成提示玩家游戏信息
等功能;
2)要求在玩家输入不是数字或输入范围不符合时会提示错误信息;
3)要求能判断程序随机生成数字与用户猜的数字的大小,玩家猜的数字偏
1
p>
大于随机生成数就提示“您猜的数字偏大,请重新输入”或玩家猜的数字偏小于
随机
生成数就提示“您猜的数字偏小,请重新输入”;
4)要求在玩家猜对的时候,提示信息“猜对啦!”,并统计玩家猜数次数,
反馈给玩家;
5)要求在玩家发出“enter”口令时能进入游戏;
6)要求在玩家发出“answer”口令时能显示该次游戏的答案;
7)要求在玩家发出“record”口令时能显示以往游戏中的最好成绩;
8)要求在玩家发出“clear”口令时能清除以往的游戏记录,并显示记录已
被清除;
9)要求在玩家发出“exit”口令时能退出游戏。
2.2 开发环境分析
本软件的组成程序为JAVA程序设计语言,组够均较简单,直观意义上的较
独立。因
此,给予电子化的所构成的硬件的简单的可维护性的特点,决定该软件
的简单可维护性。
在装载程序时,正常就运行,异常就停止;JAVA编程系统出现错误,将会
产生不可预见的问题,热启
,整个终端程序就会再次启动;程序出现错误,重新
装载。若依然有错,按照提示逐渐装载。
程序开发中会使用到MyEclipse软件,它是一个十分优秀的用于开发Java,
J2
EE的Eclipse插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其
是对各种
开元产品的支持十分不错。MyEclipse企业级工作平台(MyEclipse
Enterprise Workbench ,简称MyEclipse)是对Eclipse ID
E的扩展,利用它我们
可以在数据库和JavaEE的开发、发布,以及应用程序服务器的整合方面极大
的
提高工作效率。它是功能丰富的JavaEE集集成开发环境,包括了完备的编码、
调试、测
试和发布功能,完整支持HTML, Struts, JSF, CSS, Javascript,
SQL,
Hibernate。
表2.2.1游戏运行环境分析表:
操作系统
内存容量
外用设备
CPU
光驱
磁盘空间
开发软件
中央处理器
2
Windowsxp2003
1G
鼠标 键盘
奔腾133
4倍速
250G
MyEclipse
(8.0 GA)
双核1.6GHZ
三、系统设计
3.1 系统总体设计
本系统总共分为:进入游戏系统、退出游戏系统、记录成绩系统、清除
成绩
系统,和显示答案功能系统。
进入游戏系统包括游戏提示、游戏时间计算、游戏
次数计算、生成随机数、
用户猜数、显示状态、显示记录、清除记录等功能;
开发整
个系统具备了周期时间短、简单易用、休闲益智等几大类显著的特性。
本次系统开发设计出了界面大方简
洁美化的游戏模式。
游戏规则如下:
1).
输入一个数字,数字的范围再0-99之间,系统随机生成数也在此范围
内.
2).如果玩家
输入的不是系统要求的数字,系统将报错,并继续提示用户:
请输入在0~99之间的数字.
3).如果玩家输入的数字与随机生成数相比较,比随机生成数小.系统提示
您:您输入的数字偏小,请
您重新输入.
4). 如果玩家输入的数字与随机生成数相比较,比随机生成数大.系统提示
您:你输入的数字偏大,请您重新输入.
5).系统根据您猜数字的次数,自动计数,并在用户完成游
戏时显示该次游
戏的猜数次数和游戏评语.
6).除了猜数过程,用户可以在想退出的情况下
之间输入退出口令,或者显
示答案口令来完成该次游戏,亦可查询以往的游戏记录并清除游戏记录。
3.2 功能模块设计
猜数游戏的功能模块包含进入游戏模块,用来初
始游戏,并记录用户猜测的
数据与游戏随机产生的随机数;成绩记录模块用来将用户游戏数据记录在计算
机
中,以便随时调用。答案显示模块用来提供用户正确的答案。记录清空模块用来
将用户之前的
游戏成绩记录删除清空。退出游戏模块可以使用户在后悔进入游戏
3
的情况下,立即结束游戏。
猜数游戏系统功能模块图如下:
猜数游戏
答
案
显
示
模
块
进
入
游
戏
模
块
成
绩
记
录
模
块
记
录
清
空
模
块
退
出
游
戏
模
块
图3.2.1
猜数游戏功能模块图
3.3 类的设计
游戏中,game作为类,负责创建游戏系统的运行,记忆测试系统由该类开
始执行。其中定义int
i 为猜数次数,定义n 为用户猜的数字,定义number
为一个随机数math random,
用于产生随机的数字,范围要求在0~99之间;程
序中运用方法,用于记录用户输入的数据,使用if
语句判断数字的大
小,使用while语句循环判断数字大小,并逐个与其后的值相比较,当表达式的<
br>值与随机数字值相等时, 即执行其后的语句,若程序中出现错误,则可通过try
catch
语句来跳出错误,继续执行下面的语句。使用n方法输
出语句,给出数字判断或评价。程序中设置了pr
intStackTrace()方法来打印异
常信息在程序中出错的位置及原因。
具体的成员方法说明及个别实现语句说明请见下表:
4
表3.3.1 成员方法说明表
方法
():
():
n():
printStackTrace()
表3.3.2 实现语句说明表
finally
try
catch
finally中的代码无论出现什么状况都会运行到。即使出现异常。
所以fi
nally一般都是处理对资源的释放等操作。
try catch 成对出现的,一个try就一定
要有catch,被try包裹的
代码说明,如果这些代码中只要抛出异常的话,就会停止当前的
代码运行,而跳到catch中,对于异常进行处理。try中没有发生
异常,所以catch中的代
码是执行不到的.
程序中不知道循环的次数,使用我还while语句进行动作的循环
功能
随机产生一个数
输入消息对话框
输出消息对话框
在命令行打印异常信息在程序中出错的
位置及原因。
while
类与成员变量成员方法及语句之间的关系图如下:
5
+game
成语变量
+i
:int
+number :int
+n :int
成员方法
()
()
n()
printStackTrace()
语句
+while
+for
+if else
+finaly
+try...catch
图3.1.1类与成员变量成员方法及语句之间的关系图
用户可通过输入框选择任务,如:开
始游戏,退出游戏,显示答案,成绩记
录,清除记录等。进入游戏后,程序自动生成随机数,并发送请求
用户输入数字,
通过else if语句判断数字与生成数的大小,并弹出对话框,输出信息。之后再<
br>重新输入直到猜对,程序可以无限次的输入数字。猜数正确后,会弹出对话框,
输出信息,给出游
戏最新记录,然后自动退出游戏。该游戏记录存档在D盘,以
记录猜数成绩信息,若输入clear,可
清除记录,显示记录空。Answer口令以显
示系统自动生成的随机数。Exit口令以直接退出游戏
。
游戏中,最重要的部分是判断数字大小,该过程中将定义好的n与随机生成
的数字numb
er比较,运用到if
else语句。猜对后,运用break语句跳转到评
价语句,显示游戏记录。Try
catch语句用于输入错误时跳出语句。
6
四、程序实现
4.1程序流程图
开始
Record
Answer Clear Exit
显示记录 显示答案 清除记录 直接退出
系统随机产生数字A
重新输入数字 重新输入数字
请求玩家输入数字B
判断数字A
与B的大小
A=B
A>B A
猜对啦,恭喜你!
你猜的数字偏小! 你猜的数字偏
显示猜数次数
结束
图4.1.1系统程序流程图
7
4.2
关键算法与技术实现
4.2.1 游戏菜单设置的具体算法
import
edReader;
import
import ption;
import treamReader;
import AccessFile;
public class
{
int i = 0;
void operate()
{
System.
out
System.
out
以上程序段通过定义
戏的菜单。
4.2.2
生成随机数的具体算法
void playGame(
{
int number
= (int) (() * 100);
System.
InputStreamReader isr =
BufferedReader br =
String str =
蔡馨颜 开发的猜数字小游戏
输入“enter”进入游戏
输入“exit”退出游
戏
输入“record”最新的游戏记录
输入“answer”显示该次游戏的正确答案
输入“clear”清除记录
变量来记录猜数字的次数,并通过输出语句,来显示游
number)
游戏开始,请猜数,输入
new
InputStreamReader(System.
new
BufferedReader(isr);
8
game
记录猜数字的次数
.println(欢迎来到
;
.println(请选择上面的选项:
int
int
n(0-100之间的一个数:
in);
int
n;
RandomAccessFile raf = null;
try
{
while (br != null && !(
{
str = ne();
n = nt(str);
i++; i记录输入数字的次数}}
以上程序段通过定义变量int来生成随机数,
数字,通过while语句实现退出。
4.2.3 比较数字大小的具体算法
if (a < number) {
n(你猜的数字偏小!
break;
}
else if (a >
number) {
n(你猜的数字偏大!
break;
}
else if (a == number) {
n(猜对啦,恭喜你!
n(你输入了
以上程序段通过ifelse语句实现
生成随机数与用户猜数之间的比较,并通过输
出语句显示相关评价。
定义变量int来记录用户的猜测的
次
9
4.2.4 记录与清除成绩的具体算法
File f = new
File(
raf = new RandomAccessFile(f,
(0);
while(()!=
gth(0); 写之前先将文件清空
nt(i);
输入数字的次数写入文件
(0); 定位到文件头
(()-1);定位到文件尾
n(最新的游戏记录:次
打印最新的猜数字记录
………
File f = new File(
RandomAccessFile
raf = new RandomAccessFile(f,
if (() > 0)
如果文件中有记录,则输出此数,否则显示“记
录空”的提示
{
int i =
t();
n(最新的猜数字记录: 次
}
else
n(无记录
}
else if
((输入“answer”显示该次游戏的正
确答案;
n(该次游戏的正确答案:
10
me(number); 进入游戏
}
else
if ((
……
以上程序段将游戏中记录成绩的文件自动存档在D盘里,便于游戏
中用户查
询成绩记录,除了成绩的查询,程序段还具有清除记录的功能。
4.2.5 清空成绩的具体算法
File f = new File(
RandomAccessFile raf =
(0);
gth(0);
nt(i);
(0);
定位到文件头
n(
}
}
}
catch (IOException e) {
TODO Auto-
generated catch block
tackTrace();
}
以上程序段可以实现将记录在D
件,将其内记录的成绩清除,随后用
被清空的口令告知用户。
RandomAccessFile(f,
打印最新的猜数字记录
D盘的文
n输出语句将记录已
new写之前先将文件清空
输入数字的次数写入文件
记录已被清空
盘里的游戏记录清除的
功能,寻找处于
System.
11
4.2.6
错误跳转的具体算法
try {
if (raf != null)
();
}
catch (IOException e)
{
TODO
Auto-generated catch block
tackTrace();
}
以上程序段通过try…catch语句实现错误状态下的跳出动作。
猜数游戏源程序如下:
import edReader;
import
import ption;
import treamReader;
import AccessFile;
public class game
{
int i = 0; 记录猜数字的次数
void
operate()
{
n(欢迎来到 蔡馨颜 开发的猜数字小游戏
输入“ent
er”进入游戏;
输入“exit”退出游戏;
输入“record”最新的游戏记录;
输入“answer”显示该次游戏的正确答案;
输入“clear”清除记录
n(请选择上
面的选项:
12
);
}
void
playGame(int number)
{
int number =
(int) (() * 100);
n(游戏开始,请猜数,输入0-100之间的一个数:
InputStreamReader
isr = new InputStreamReader();
BufferedReader
br = new BufferedReader(isr);
String str =
int n;
RandomAccessFile raf = null;
try
{
while (br != null && !(
str
= ne();
n = nt(str);
i++; i记录输入数字的次数
if (n < number) {
n(你猜的数字偏小
break;
}
else if (n > number) {
n(你猜的数字偏大
break;
}
else if
(n == number)
{
n(恭喜你,猜对啦!
n(你输入了次
File f = new File(
raf = new
RandomAccessFile(f,
(0);
while(()!=
gth(0); 写之前先将文件清空
13
nt(i); 输入数字的次数写入文件
(0); 定位到文件头
(()-1);定位到文件尾
n(最新的游戏记录:次
打印最新的猜数字记录
(0);
}
}
}
catch
(IOException e)
{
TODO Auto-generated
catch block
tackTrace();
}
Finally
{
try {
if (raf != null)
();
}
catch (IOException e)
{
TODO
Auto-generated catch block
tackTrace();
}
}
}
public static void
main(String[] args)
{
int number = (int)
(() * 100);
game r = new game();
e();
InputStreamReader isr = new
InputStreamReader();
14
BufferedReader br = new
BufferedReader(isr);
String s =
Try
{
while (s != null)
{
s = ne();
if
((输入“enter”进入游戏;
me(number);
else if
((输入“exit”退出游戏;
(0);
else if
((输入“record”打印最新的猜数字记
录;
{
File f = new
File(
RandomAccessFile raf = new
RandomAccessFile(f,
if (() > 0)
如果文件中有记录,则输出此数,否则显示“记
录空”的提示
{
int i =
t();
n(最新的猜数字记录: 次
}
else
n(无记录
}
else if
((输入“answer”显示该次游戏的正
确答案;
n(该次游戏的正确答案:
me(number); 进入游戏
}
else if ((
15
{
输入“clear”清除记录
File f = new File(
RandomAccessFile raf =
new RandomAccessFile(f,
(0);
gth(0);
写之前先将文件清空
nt(i); 输入数字的次数写入文件
(0);
定位到文件头
n(记录已被清空
}
}
}
catch (IOException e) {
TODO Auto-
generated catch block
tackTrace();
}
finally {
try {
if (br != null)
();
}
catch (IOException e) {
TODO Auto-generated catch block
tackTrace();
}
}
}
}
打印最新的猜数字记录
16
五、测试运行
5.1 系统测试方案
1.游戏功能测试:运行程序,显示游戏菜单栏。菜单应显示游戏作者
,进入
游戏,退出游戏,显示游戏记录,清除游戏记录,以及显示答案各选项;
若
无显示则程序错误。
2.查询功能测试:进入游戏菜单栏后,输入
答案;若无显示则程序出错。
3.极限
测试:由于该游戏的数字设置在
数字,则游戏永远提示数字大于答案,
游戏继续运行。
4.记录功能测试:显示游戏菜单栏后,输入
游戏中的最好成绩;若还未进行游戏就
选择输出记录,则显示无记录;若
未显示,则程序出错。
5.清除功能测试:显示游
戏菜单栏后,输入
录的成绩自动清除,并显示记录已被清除;若未显示则程序出错。
6.退出功能测试:显示游戏菜单栏后,输入
否则程序出错。
5.2
运行结果分析
answer口令,应显示该次游戏的
0~99范围内,
如用户输入超过
直至用户的数字在游戏允许范围内,
record口令,程序应该输出以往clear口令,程序应该将文件内记
exit口令,程序应该退出游戏,
17
99的
图5.2.1
游戏初始状态图
图5.2.2 游戏开始状态图
18
图5.2.3 游戏猜数过程图
图5.2.4 查询游戏记录状态图
19
图5.2.5 查询游戏答案状态图
图5.2.6 游戏记录清空状态图
图5.2.7
退出游戏状态图
显示菜单栏,供用户选择将要进行的工作。有四种选择:
answer指令用
于显示该次游戏中的正确答案,
exit指令用于选择直接退出游戏。进入游戏时,
,当输入的
数比随机数大时弹出对话框提示“大
20
record
clear
程序运行时,
指令用于显示游戏成绩记录,
指令用于清除系统记
录的成绩,
计算机产生一个随机数,系统请求用户输入猜的数字,当输入的数比随机数小
时弹出对话框提示“小了”
了”,要求玩家再次输入数字直到输入的
数和随机数一样时退出循环,并弹出成
功对话框,给出评语“恭喜你猜对了”,随即显示该次游戏中用户
猜数字的次数。
结束任务。
六、设计体会
本次课程设计定为任选一题
进行设计。
的课程设计。主要考虑到以前时间少课程内容多,
是很抓实,而对于设计一个猜数游
戏程序,
于我个人的学习情况比较合适,
对JAVA的一些基础知识掌握的更加牢固。
从这次实验中的学到了许多。比如:
没能实现的功能,它竟然能实现了!
前总是模模糊糊的,现
在心里十分清楚了。
平时的学习自身只注意到了书本上面的知识,
嫩,这次的学习让我从纸上
谈兵逐渐的过渡到实践出真知。
编写调试,课本和网上查阅相关资料相关文章,
个过程中,在把
书本上的知识给系统的复习了一下的同时,
太多不足,对JAVA语言整体知识构架不够熟悉,
自己的编程方式也不是太标准,
现。
通过这次课程设计,我明白了编写程序,
解,
同时要求程序设计者有较强的思维和动手能力。
编程思想,不能只关心程序的运行结果,
有严谨
地态度。
还有通过设计过程中大量地查阅网络文章,
解决相关问题。所以网络这个强大的工
具,
很好的帮手。终于可以自己设计程序了,
学的用途真大,想学编程是少不了的。以前感觉,
编程是多么的神秘,现在通过
自己实践,才知道,编程也没那么神秘,但却很有乐趣的。那种看到自己亲
手编
的程序运行出结果的感觉是无法用言语表达的
因此我建议,以后多组织一些这方面的实验,有一个挑战自己的机会。
思考一段时
间后,我决定做猜数游戏
JAVA课程基础内容掌握并不
由于其功能简单设计也相对较易,对<
br>也能使自己
try…catch语句就妙不可言。想尽办法
以
对一些类及方法的运用显得稚
经过了长时间的反复
终于完成了整个课程设计。在这
同时也发现了自己的
不能灵活地运用所学的知识点。
不仅要求对课本知识有较深刻的了
还要熟悉常用的编程技巧和
更要注重程序代码的结构,编程者更要
对一些关键知识点逐个地了解
并
确实是我们学习之中可以借助的一个
以前感觉学的都用不到,现在才知以前
21
并且通过设计这样的一个猜数程序,
除此之个还由许多个方法也得到
了巩固。
经常出现代码写错而调试很久的低级错误情况出
22