JAVA猜数游戏.docx
- 文档编号:4348151
- 上传时间:2022-11-30
- 格式:DOCX
- 页数:24
- 大小:264.02KB
JAVA猜数游戏.docx
《JAVA猜数游戏.docx》由会员分享,可在线阅读,更多相关《JAVA猜数游戏.docx(24页珍藏版)》请在冰豆网上搜索。
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上最流行的编程语言,它的产生自然与游戏密切相关.本课程设计是为了配合Java程序设计课程,帮助学生深入学习掌握Java语言,熟练运用这个工具而设立的课程。
通过课程设计各个项目的综合训练,加强学生对JAVA语言的理解,检验学生对专业理论知识理解与掌握的程度,锻炼学生综合运用JAVA程序设计处理所学的知识实际分析问题、解决问题的能力。
通过对猜数游戏程序设计的学习,使学生掌握网络编程的基本方法,能够根据现实生活实践编制出一些实用的小程序.为进一步学习网站信息的建设打下基础.
此学习过程中,一方面巩固了学生的JAVA程序设计的应用,加深对JAVA语言的掌握及对面向对象程序设计基本思想的理解,提高对面向对象技术的具体应用;另一方面,猜数游戏可以通过JAVA设计展现其娱乐性,游戏简单易懂,容易操作上手。
二、需求分析
2.1用户需求分析
游戏随机自动生成一个随机数randomnumber即0~99(包括0和99)的整数字,然后让用户猜是什么数字。
用户可以随便猜一个数字,游戏会提示太大还是太小,从而缩小猜数范围。
经过几次猜测与提示后,直至猜到,给出所用猜数次数和评语最终退出游戏。
在游戏过程中。
记录用户最终猜对时所需要的次数。
游戏结束后公布结果。
具体要求:
通过菜单栏里提供的选项,进入游戏界面。
系统提示猜数字游戏的运行情况,一般情况下为正常,随即游戏者可以输入自己的猜数结果,可以通过按回车键完成输入。
每次完成一次游戏时,给出猜测的次数的统计。
按其他选项还可以选择退出游戏,查询答案,查询游戏记录,清除游戏记录。
游戏中要求完成一下内容:
1)要求记录产生的随机数并计算用户猜数次数、并完成提示玩家游戏信息等功能;
2)要求在玩家输入不是数字或输入范围不符合时会提示错误信息;
3)要求能判断程序随机生成数字与用户猜的数字的大小,玩家猜的数字偏大于随机生成数就提示“您猜的数字偏大,请重新输入”或玩家猜的数字偏小于随机生成数就提示“您猜的数字偏小,请重新输入”;
4)要求在玩家猜对的时候,提示信息“猜对啦!
”,并统计玩家猜数次数,反馈给玩家;
5)要求在玩家发出“enter”口令时能进入游戏;
6)要求在玩家发出“answer”口令时能显示该次游戏的答案;
7)要求在玩家发出“record”口令时能显示以往游戏中的最好成绩;
8)要求在玩家发出“clear”口令时能清除以往的游戏记录,并显示记录已被清除;
9)要求在玩家发出“exit”口令时能退出游戏。
2.2开发环境分析
本软件的组成程序为JAVA程序设计语言,组够均较简单,直观意义上的较独立。
因此,给予电子化的所构成的硬件的简单的可维护性的特点,决定该软件的简单可维护性。
在装载程序时,正常就运行,异常就停止;JAVA编程系统出现错误,将会产生不可预见的问题,热启,整个终端程序就会再次启动;程序出现错误,重新装载。
若依然有错,按照提示逐渐装载。
程序开发中会使用到MyEclipse软件,它是一个十分优秀的用于开发Java,J2EE的Eclipse插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开元产品的支持十分不错。
MyEclipse企业级工作平台(MyEclipseEnterpriseWorkbench,简称MyEclipse)是对EclipseIDE的扩展,利用它我们可以在数据库和JavaEE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。
它是功能丰富的JavaEE集集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML,Struts,JSF,CSS,Javascript,SQL,Hibernate。
表2.2.1游戏运行环境分析表:
操作系统
Windows/xp/2003
内存容量
1G
外用设备
鼠标键盘
CPU
奔腾133
光驱
4倍速
磁盘空间
250G
开发软件
MyEclipse(8.0GA)
中央处理器
双核1.6GHZ
三、系统设计
3.1系统总体设计
本系统总共分为:
进入游戏系统、退出游戏系统、记录成绩系统、清除成绩系统,和显示答案功能系统。
进入游戏系统包括游戏提示、游戏时间计算、游戏次数计算、生成随机数、用户猜数、显示状态、显示记录、清除记录等功能;
开发整个系统具备了周期时间短、简单易用、休闲益智等几大类显著的特性。
本次系统开发设计出了界面大方简洁美化的游戏模式。
游戏规则如下:
1).输入一个数字,数字的范围再0-99之间,系统随机生成数也在此范围内.
2).如果玩家输入的不是系统要求的数字,系统将报错,并继续提示用户:
请输入在0~99之间的数字.
3).如果玩家输入的数字与随机生成数相比较,比随机生成数小.系统提示您:
您输入的数字偏小,请您重新输入.
4).如果玩家输入的数字与随机生成数相比较,比随机生成数大.系统提示您:
你输入的数字偏大,请您重新输入.
5).系统根据您猜数字的次数,自动计数,并在用户完成游戏时显示该次游戏的猜数次数和游戏评语.
6).除了猜数过程,用户可以在想退出的情况下之间输入退出口令,或者显示答案口令来完成该次游戏,亦可查询以往的游戏记录并清除游戏记录。
3.2功能模块设计
猜数游戏的功能模块包含进入游戏模块,用来初始游戏,并记录用户猜测的数据与游戏随机产生的随机数;成绩记录模块用来将用户游戏数据记录在计算机中,以便随时调用。
答案显示模块用来提供用户正确的答案。
记录清空模块用来将用户之前的游戏成绩记录删除清空。
退出游戏模块可以使用户在后悔进入游戏的情况下,立即结束游戏。
猜数游戏系统功能模块图如下:
图3.2.1猜数游戏功能模块图
3.3类的设计
游戏中,game作为类,负责创建游戏系统的运行,记忆测试系统由该类开始执行。
其中定义inti为猜数次数,定义n为用户猜的数字,定义number为一个随机数mathrandom,用于产生随机的数字,范围要求在0~99之间;程序中运用方法system.in,用于记录用户输入的数据,使用if语句判断数字的大小,使用while语句循环判断数字大小,并逐个与其后的值相比较,当表达式的值与随机数字值相等时,即执行其后的语句,若程序中出现错误,则可通过trycatch语句来跳出错误,继续执行下面的语句。
使用System.out.println方法输出语句,给出数字判断或评价。
程序中设置了printStackTrace()方法来打印异常信息在程序中出错的位置及原因。
具体的成员方法说明及个别实现语句说明请见下表:
表3.3.1成员方法说明表
方法
功能
Math.random():
随机产生一个数
System.in():
输入消息对话框
System.out.println():
输出消息对话框
printStackTrace()
在命令行打印异常信息在程序中出错的位置及原因。
表3.3.2实现语句说明表
finally
finally中的代码无论出现什么状况都会运行到。
即使出现异常。
所以finally一般都是处理对资源的释放等操作。
trycatch
trycatch成对出现的,一个try就一定要有catch,被try包裹的代码说明,如果这些代码中只要抛出异常的话,就会停止当前的代码运行,而跳到catch中,对于异常进行处理。
try中没有发生异常,所以catch中的代码是执行不到的.
while
程序中不知道循环的次数,使用我还while语句进行动作的循环
类与成员变量成员方法及语句之间的关系图如下:
+game
成语变量
+i:
int
+number:
int
+n:
int
成员方法
Math.random()
System.in()
System.out.println()
printStackTrace()
语句
+while
+for
+ifelse
+finaly
+try...catch
图3.1.1类与成员变量成员方法及语句之间的关系图
用户可通过输入框选择任务,如:
开始游戏,退出游戏,显示答案,成绩记录,清除记录等。
进入游戏后,程序自动生成随机数,并发送请求用户输入数字,通过elseif语句判断数字与生成数的大小,并弹出对话框,输出信息。
之后再重新输入直到猜对,程序可以无限次的输入数字。
猜数正确后,会弹出对话框,输出信息,给出游戏最新记录,然后自动退出游戏。
该游戏记录存档在D盘,以记录猜数成绩信息,若输入clear,可清除记录,显示记录空。
Answer口令以显示系统自动生成的随机数。
Exit口令以直接退出游戏。
游戏中,最重要的部分是判断数字大小,该过程中将定义好的n与随机生成的数字number比较,运用到ifelse语句。
猜对后,运用break语句跳转到评价语句,显示游戏记录。
Trycatch语句用于输入错误时跳出语句。
四、程序实现
4.1程序流程图
RecordAnswerClearExit
重新输入数字重新输入数字
图4.1.1系统程序流程图
4.2关键算法与技术实现
4.2.1游戏菜单设置的具体算法
importjava.io.BufferedReader;
importjava.io.File;
importjava.io.IOException;
importjava.io.InputStreamReader;
importjava.io.RandomAccessFile;
publicclassgame
{
inti=0;//记录猜数字的次数
voidoperate()
{
System.out.println("欢迎来到蔡馨颜开发的猜数字小游戏"+
"\n"+"输入“enter”进入游戏;"+
"\n"+"输入“exit”退出游戏;"+
"\n"+"输入“record”最新的游戏记录;"+
"\n"+"输入“answer”显示该次游戏的正确答案;"+
"\n"+"输入“clear”清除记录"+"\n");
System.out.println("请选择上面的选项:
");
以上程序段通过定义int变量来记录猜数字的次数,并通过输出语句,来显示游戏的菜单。
4.2.2生成随机数的具体算法
voidplayGame(intnumber)
{
//intnumber=(int)(Math.random()*100);
System.out.println("游戏开始,请猜数,输入0-100之间的一个数:
");
InputStreamReaderisr=newInputStreamReader(System.in);
BufferedReaderbr=newBufferedReader(isr);
Stringstr="";
intn;
RandomAccessFileraf=null;
try
{
while(br!
=null&&!
str.equals("exit"))
{
str=br.readLine();
n=Integer.parseInt(str);
i++;//i记录输入数字的次数}}
以上程序段通过定义变量int来生成随机数,定义变量int来记录用户的猜测的数字,通过while语句实现退出。
4.2.3比较数字大小的具体算法
if(a System.out.println("你猜的数字偏小! "); //break; } elseif(a>number){ System.out.println("你猜的数字偏大! "); //break; } elseif(a==number){ System.out.println("猜对啦,恭喜你! "); System.out.println("你输入了"+i+"次"); 以上程序段通过ifelse语句实现生成随机数与用户猜数之间的比较,并通过输出语句显示相关评价。 4.2.4记录与清除成绩的具体算法 Filef=newFile("d: \\RandomAccessFile.txt"); raf=newRandomAccessFile(f,"rw"); //raf.seek(0); //while(f.length()! = raf.setLength(0);//写之前先将文件清空 raf.writeInt(i);//输入数字的次数写入文件 raf.seek(0);//定位到文件头 //raf.seek(raf.length()-1);//定位到文件尾 System.out.println("最新的游戏记录: "+raf.readInt()+"次");//打印最新的猜数字记录 ……… Filef=newFile("d: \\RandomAccessFile.txt"); RandomAccessFileraf=newRandomAccessFile(f,"rw"); if(raf.length()>0)//如果文件中有记录,则输出此数,否则显示“记录空”的提示 { inti=raf.readInt(); System.out.println("最新的猜数字记录: "+i+"次"); } else System.out.println("无记录"); } elseif(s.equals("answer")){//输入“answer”显示该次游戏的正确答案; System.out.println("该次游戏的正确答案: "+number); r.playGame(number);//进入游戏 } elseif(s.equals("clear")) …… 以上程序段将游戏中记录成绩的文件自动存档在D盘里,便于游戏中用户查询成绩记录,除了成绩的查询,程序段还具有清除记录的功能。 4.2.5清空成绩的具体算法 Filef=newFile("d: \\RandomAccessFile.txt"); RandomAccessFileraf=newRandomAccessFile(f,"rw"); //raf.seek(0); raf.setLength(0);//写之前先将文件清空 //raf.writeInt(i);//输入数字的次数写入文件 //raf.seek(0);//定位到文件头 System.out.println("记录已被清空");//打印最新的猜数字记录 } } }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } 以上程序段可以实现将记录在D盘里的游戏记录清除的功能,寻找处于D盘的文件,将其内记录的成绩清除,随后用System.out.println输出语句将记录已被清空的口令告知用户。 4.2.6错误跳转的具体算法 try{ if(raf! =null) raf.close(); } catch(IOExceptione) { //TODOAuto-generatedcatchblock e.printStackTrace(); } 以上程序段通过try…catch语句实现错误状态下的跳出动作。 猜数游戏源程序如下: importjava.io.BufferedReader; importjava.io.File; importjava.io.IOException; importjava.io.InputStreamReader; importjava.io.RandomAccessFile; publicclassgame { inti=0;//记录猜数字的次数 voidoperate() { System.out.println("欢迎来到蔡馨颜开发的猜数字小游戏"+ "\n"+"输入“enter”进入游戏;"+ "\n"+"输入“exit”退出游戏;"+ "\n"+"输入“record”最新的游戏记录;"+ "\n"+"输入“answer”显示该次游戏的正确答案;"+ "\n"+"输入“clear”清除记录"+"\n");System.out.println("请选择上面的选项: " ); } voidplayGame(intnumber) { //intnumber=(int)(Math.random()*100); System.out.println("游戏开始,请猜数,输入0-100之间的一个数: "); InputStreamReaderisr=newInputStreamReader(System.in); BufferedReaderbr=newBufferedReader(isr); Stringstr=""; intn; RandomAccessFileraf=null; try { while(br! =null&&! str.equals("exit")){ str=br.readLine(); n=Integer.parseInt(str); i++;//i记录输入数字的次数 if(n System.out.println("你猜的数字偏小"); //break; } elseif(n>number){ System.out.println("你猜的数字偏大"); //break; } elseif(n==number) { System.out.println("恭喜你,猜对啦! "); System.out.println("你输入了"+i+"次"); Filef=newFile("d: \\RandomAccessFile.txt"); raf=newRandomAccessFile(f,"rw"); //raf.seek(0); //while(f.length()! = raf.setLength(0);//写之前先将文件清空 raf.writeInt(i);//输入数字的次数写入文件 raf.seek(0);//定位到文件头 //raf.seek(raf.length()-1);//定位到文件尾 System.out.println("最新的游戏记录: "+raf.readInt()+"次");//打印最新的猜数字记录 System.exit(0); } } } catch(IOExceptione) { //TODOAuto-generatedcatchblock e.printStackTrace(); } Finally { try{ if(raf! =null) raf.close(); } catch(IOExceptione) { //TODOAuto-generatedcatchblock e.printStackTrace(); } } } publicstaticvoidmain(String[]args) { intnumber=(int)(Math.random()*100); gamer=newgame(); r.operate(); InputStreamReaderisr=newInputStreamReader(System.in); BufferedReaderbr=newBufferedReader(isr); Strings=""; Try { while(s! =null) { s=br.readLine(); if(s.equals("enter"))//输入“enter”进入游戏; r.playGame(number); elseif(s.equals("exit"))//输入“exit”退出游戏; System.exit(0); elseif(s.equals("record"))//输入“record”打印最新的猜数字记录; { Filef=newFile("d: \\RandomAccessFile.txt"); RandomAccessFileraf=newRandomAccessFile(f,"rw"); if(raf.length()>0)//如果文件中有记录,则输出此数,否则显示“记录空”的提示 { inti=raf.readInt(); System.out.println("最新的猜数字记录: "+i+"次"); } else System.out.println("无记录"); } elseif(s.equa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 游戏