迷宫游戏计算机毕业设计论文基于Java的迷宫游戏.docx
《迷宫游戏计算机毕业设计论文基于Java的迷宫游戏.docx》由会员分享,可在线阅读,更多相关《迷宫游戏计算机毕业设计论文基于Java的迷宫游戏.docx(60页珍藏版)》请在冰点文库上搜索。
迷宫游戏计算机毕业设计论文基于Java的迷宫游戏
基于Java的迷宫游戏
摘要
迷宫游戏是我们最常见的游戏之一,该游戏出现在手机游戏、掌上游戏机和电脑游戏当中,因此迷宫游戏也是一个十分经典的游戏。
一般的迷宫游戏比较简单,游戏中随机出现一些障碍,要求玩家能够找出一条从起点到终点的通路。
它看似简单确变化无穷,迷宫游戏上手及其简单,但要熟练的掌握其中的奥秘且快速找出一条通路,难度却不低。
作为家喻户晓老少皆宜的大众游戏,其普及程度可以说是史上任何一款游戏都无法比较的。
本设计是一款基于Java的迷宫游戏。
目前用于游戏开发的计算机语言多种多样,而Java只是其中一种。
然而,Java是现在全球最时髦的开发工具之一,它拥有一套庞大且完整的类库,内置了其他怨言需要靠库甚至是操作系统才能支持的功能。
所以,程序员可以很容易的用Java编写并运行基于Java的游戏。
本文从游戏的背景研究和发展现状开始,详细描述了整个游戏的制作过程。
对实现功能以及操作过程进行了重点讨论,开发用到了Java类库中的许多包以及其中的类,例如java.util包,java.lang包,java.awt包等等,稳重会对这些包和类的用法进行讲解。
关键词游戏;迷宫;Java;算法
Absract
Java-BasedMazeGame
MazeGameisoneofthemostcommonofourgame,thegameappearedinmobilegames,handheldgameconsolesandcomputergameswhich,thereforemazegameisaveryclassicgame.Generallyrelativelysimplemazegame,thegamerandomlysomeobstacles,requiringplayerstobeabletofindapathfromstarttofinish.Itseemssimpleindeedenormous,anditssimplemazegamestarted,butaskilledmastermysterycutquicklyidentifyapath,thedifficultyreallyisnotlow.Asawell-knownpopulargameforallages,itspopularitycanbesaidthatthehistoryofanygamecannotbecompared.
ThisdesignisaJava-basedmazegame.Currentcomputerlanguageforavarietyofgamedevelopment,andJavaisjustoneofthem.However,Javaisnowoneoftheworld'smostfashionabledevelopmenttools,ithasalargeandcompletelibrary,built-inlibraryorothercomplaintsneedtorelyontheoperatingsystemtosupportfunctions.Therefore,theprogrammercaneasilywritteninJavaandrunJava-basedgames.
Inthispaper,thestatusofresearchanddevelopmentbackgroundofthegamebegan,adetaileddescriptionoftheentiregameproductionprocess.Therealizationoffunctionsandoperationsarefocusedontheprocess,thedevelopmentoftheJavaclasslibrariesusedinmanypackagesaswellasoneofthecategories,suchasjava.utilpackage,java.langpackage,java.awtpackageandsoon,willthesepackagesandsteadytypeofusagetoexplain.
Keywordsgame;maze;JavaLanguage;algorithm
1绪论
1.1课题的研究背景与意义
随着经济的快速发展,计算机的地位在人们生活中已日益突出,基于各种操作系统的娱乐游戏也越来越多、越来越大众化,成为人们生活中必不可少的一部分。
而随着人们生活品质的提高,电脑游戏也越来越多元化,迷宫游戏就是其中的一种。
迷宫游戏操作简单方便,也具有一定的思考力,能够引发人的思维及兴趣,老少皆宜,是一款经久不衰的大众化游戏。
游戏的最初目的就是让玩家在游戏中得到放松。
游戏一直存在于人类生活中,如今定义的游戏从早期的猜谜游戏,发展至如今的单击RPG游戏,网络游戏等,已经升华为更高级别意义上的娱乐游戏,对人们的感官刺激也越发强烈,得到乐趣也更多。
对于编写游戏而言,Java已变得足够成熟。
它现在是一种开发能都在多种平台上运行的中小型游戏的很好的方式。
此外,Java支持和其他库一起工作,而且它的速度变得越来越快。
由于Java游戏一般来说简单有趣,并且对用户硬件要求极小,所以Java游戏通常对85%的计算机用户都有吸引力。
1.2Java简介
1.2.1名字起源
Java是印度尼西亚爪哇岛的英文名称。
Java语言中的许多库类名称,多与咖啡有关:
如JavaBeans、NetBeans以及ObjectBeans等等。
SUN和JAVA的标识也正是一杯正冒着热气的咖啡。
1.2.2发展历史
`Java是由SunMicrosystems公司推出的Java面向对象程序设计语言(以下简称Java语言)和Java平台的总称。
用Java实现的HotJava浏览器(支持Javaapplet)显示了Java的魅力:
跨平台、动态的Web、Internet计算。
从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Javaapplet。
另一方面,Java技术也不断更新。
(2010年Oracle公司收购了SUN)
1.2.3语言特征
Java是一个纯粹的面向对象的程序设计语言,它继承了C++语言面向对象技术的核心。
Java舍弃了容易引起错误的指针、运算符重载、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。
在Java1.5版本中,Java又引入了泛型编程、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
Java不同于一般的编译执行计算机语言和解释执行计算机语言。
它首先将源代码编译成二进制字节码,然后依赖各种不同平台上的虚拟机来解释执行字节码。
从而实现了“一次编译、到处执行”的跨平台特性。
编辑Java源代码可以使用任何无格式的纯文本编辑器。
1.2.4开发平台
Java平台由Java虚拟机和Java应用编程接口(简称API)构成。
Java应用编程接口为此提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。
Java平台已经嵌入了几乎所有的操作系统。
这样Java程序可以就可以在各种系统中运行。
Java程序设计语言共分为三个体系JavaSE(java平台标准版),JavaEE(java平台企业版),JavaME(java平台微型版)。
2可行性研究
可行性研究的目的,就是用最小的代价在尽可能短的时间内确定问题是否能解决。
要达到这个目的,必须分析集中主要的可能解法的利弊,从而判断原定的系统规模和目标是否现实,系统完成后所能带来的经济效益时候大到值得投资开发这个系统的程度。
因此,可行性研究实质上是要进行一次大大压缩简化了的系统分析和设计的过程,也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。
2.1可行性分析
2.1.1技术可行性
开发本游戏的编程语言有多种,如:
VC,VB,Java等,但考虑到自身对语言的熟悉程度和编写程序的困难度,选择Java语言进行游戏的开发。
本游戏实在Windows环境下开发的,一般机器配置就可以满足要求,对机器本身没有太高的要求,环境只需装上jdk即可,Java是现在全球最流行的开发语言之一,他拥有一套庞大且完善的类库,内置了其他语言所需要的靠库甚至是操作系统才能支持的功能,拥有一个虚拟机。
Eclipse是SUN公司开发的Java集成开发环境工具,是目前最优秀的Java集成开发工具之一。
2.1.2经济可行性
由于本系统使用到的工具一般机器都具有,使用的环境也很简单,开发成本低。
Java一直以来由于其可以“跨平台”以及“一次编译,到处运行”等特点,且因为Java游戏简单有趣,并且对用户硬性要求极小,所以Java游戏通常对85%的计算机用户都有吸引力。
2.1.3操作可行性
由于整个系统的开发过程中从操作简便、界面美观、灵活使用、的用户要求为出发点,界面设计是要充分考虑玩家的感受,界面比较直观,互动性很好,操作起来简单明了。
2.1.4法律可行性
信息产业部已将游戏通用引擎研究及师范产品纳入国家“863计划”,这是中国首次将游戏技术纳入国家科技计划当中。
文化部也想国内多家游戏业的实力厂商首次颁发了《网络文化经营许可证》,加大对游戏的监管力度,进口游戏的审查制度,限制国内对国外的受理措施。
科技部指定科技发展计划,将把游戏开发的扶持力度加大。
这样一来,国内游戏厂商将可获得发展的核心技术平台,政策有利于保护中国游戏软件的自主知识产权,这位游戏开发发展创造了良好的政策环境。
3需求分析
所谓系统分析,就是指在整个系统开发过程中,解决“做什么”的问题,把要解决哪些问题,满足用户哪些具体的信息需求调查分析清楚,从逻辑上或者说从信息处理的功能希求上提出系统方案,即逻辑模型,为下一阶段进行物理设计方案设计,解决怎么办提供依据。
3.1系统初步分析
3.1.1用户需求分析
随着Internet的发展,进入信息时代后快速获得网络共享资源成为很简单的事情,人们对计算机产品产生更大的依赖性。
计算机的普及使得原本生活已经不嫩更适应人们的需要,广大计算机爱好者迫切的需要能够使用计算机进行必要的娱乐活动来丰富自己的生活,这样,计算机游戏应运而生。
据目前的游戏调研来看,由Java开发的游戏仍然是一个空白页,但是它却是一个继续填补的空白页。
而Java语言由于其天生的语言特性,很适合进行游戏应用的开发,但由于系统环境问题时的它一直以来未能用于游戏开发,而近来由于Java的发展,它已经摆脱了束缚,浮出了游戏开发的水面。
这也是玩家迫切要求的。
3.1.2功能需求分析
系统功能的需求指定系统必须提供的服务。
通过需求分析应该划分出系统必须完成的所有功能。
本作的功能模块主要包括游戏的后台设计,游戏的界面设计。
游戏的引擎设计的需求分析:
游戏后台是游戏的灵魂,也就是这个游戏的框架,它的好坏直接决定着游戏的质量。
它是控制所有游戏功能的主程序,包括画面的处理,路径寻找算法的实现,接收玩家的设置等。
所以坚定一个游戏的好坏,从内部设计的原因上说,是从游戏的后台设计体现出来的。
一个游戏的后台设计,直接关系到游戏设计的其他方面,诸如游戏的图形系统、声音系统及设计的物理模块等各方面。
就如一台CPU一样,游戏的后台也是直接牵制着整个游戏的设计。
它主要的作用是处理游戏的时间,运行游戏,输出相应提示,响应玩家的游戏监听时间等。
所以,游戏的后台设计是必要的功能模块,而且游戏的后台必须设计好,这样游戏才具有更好的可玩性。
游戏程序是一样精度要求很高的程序系统,因为其代码利用率很高。
一个实时运行的最终作品,每秒都会运行成千上万的程序,且需要极高频率在后台等待响应。
因此,其伙计设计应当相当严谨。
游戏界面设计的需求分析:
作为一个游戏吸引玩家的最重要的方便就是几面。
本作品界面简洁明了,是玩家人容易上手操作,且适应性强。
3.1.3系统的可靠性和可用性需求分析
可靠性需求定量地指定系统的可靠性,例如,游戏在运行过程中不能频繁发生错误而不得不中止游戏。
可用性则与可靠性密切相关,它量化了用户可以使用系统的程度。
例如,游戏的运行必须保证随时可以,不能在一段时间内,游戏产生不可预见的错误而致无法运行等。
4总体设计
总体设计过程通常由两个主要阶段组成:
系统设计阶段,确定系统的具体实现方案;结构设计阶段,确定软件结构和功能模块。
4.1系统开发
4.1.1系统开发的原则
经过需求分析阶段的工作,系统必须“做什么”已经明确,而系统开发是要明确“怎么做”。
总体设计的基本目的就是回答“概括地说,系统应该如何实现?
”这个问题,因此,总体设计又称概要设计或者初步设计。
通过这个阶段的工作将划分出组成系统的物理元素—程序、文件、数据库、人工过程和文档等等,但每个物理元素仍然处于黑盒子级,这些黑盒里的具体内容在详细设计中。
总体设计的另一项重要的任务就是设计软件的结构,也就是确定系统中每个程序是由哪些模块组成,以及这些模块相互之间的关系。
总体设计过程首先寻找实现目标系统的各种不同的方案。
然后从这些提供的选择方案中选取若干合理的方案,为每个合理的方案都准备一份系统流程图,列出组成系统所有元素,进程成本、效益分析,并且制定实现此方案的进度计划。
通常,设计出初步软件结构后还要进行多方改进,从而得到更合理的结构,进行必要的数据库设计,确定测试要求并且制定测试计划。
基于上面的叙述,在详细设计之前先进行总体设计的必要性:
可以站在全局高度上,花较少的成本,从较抽象的层次上分析对比多种系统方案和软件结构,从中选出最佳方案和最合理的软件结构,从而用较低的成本开发出较高成本的软件系统。
4.1.2系统设计阶段
系统设计阶段的主要目的是确定软件如何做的问题。
主要任务是确定系统中的大模块和设计方法,确定软件的功能模块和模块作用、组成、关系等。
本系统是一款较为传统的游戏,当玩家打开游戏,显示游戏界面,设置游戏难度之后便可开始游戏。
当玩家找不到通往出口的路径时,可以点击“显示路径”按钮来显示一条从入口到出口的通路,不过这样的机会只有一次。
也可以在此选择“绘制地图”,选择同一难度的其他地图样式,重新开始游戏。
当玩家自己找到出口时,游戏便会提醒“恭喜您,已找到出口!
”。
4.1.3结构设计阶段
经过系统设计阶段的思考和实践,需要对功能结构进行细致的划分。
一个程序的结构设计的好坏也需要决定其发展的重要指标。
对一个程序的模块划分往往也能是程序设计变得简单。
本游戏的模块大致分为后台引擎和用户界面两大块,界面模块包括总体界面设计和设置界面设计。
后台引擎模块包括深度优先迷宫生成算法和普里姆迷宫生成算法。
除此之外,还包括一个主界面控制类,用于界面算法和界面生成之间的连接控制,还有一个点类,主要用于定义点的相关操作,一个迷宫生成的接口类,类中声明了迷宫生成算法所需要定义的三个方法。
以为不做具体定义,所以被称为接口类。
其功能模块图如下:
图4-1功能模块图
4.2相关算法介绍
算法是解题方案的准确而完整的描述,其代表着用系统的方法描述解决问题的策略机制。
算法就相当于对一定规范的输入,在有限的时间内获得所要求的的输出。
描述算法的方法有好多种,常用的自然语言、结构化流程图,伪代码等,其中最普遍的就是流程图。
本设计除了实现迷宫的相关功能之外,还着重就实现迷宫的算法进行研究,通过算法及实现迷宫的特点比较深度优先算法和普里姆算法在迷宫生成方面的优劣性。
4.2.1深度优先算法生成迷宫介绍
DFSMap类使用深度优先算法得到地图的类。
设置一个二维数组,数组的值为格子的状态。
初始地图的上所有的格都设为墙,不可达。
之后,再定义出口和入口,也将其设置为背景,可以被访问的通道。
这样,生成的迷宫中显示的是每一个格子的四面都是墙。
从入口点开始向四个方向中的一个随机访问,每找到一个可被访问的点,就去掉该点上的墙,可被访问的点继续以这样的方式向下进行下去。
对每个已被访问的格子都设置为已访问。
当一个点对某一方向进行访问时,首先需要根据判断条件判断被访问的点是否被访问过,或者处于边界,若该点的四个方向已经被访问或者无法访问,就退回上一个点,而上一个点需重复进行这一过程。
这样一次遍历过后,可以确保每一个可被访问的点均被访问过。
由于每次访问的方向是随机的,这样导致许多种不同的遍历情况,因为形成了不同的迷宫。
所以迷宫的形成是堆积的,但是从起点到终点只有唯一路径。
在算法上,只要是利用栈来实现。
第一次先将第一个起始点入栈,之后每访问一个点就将该点入栈,之后再对栈顶点的四个方向进行随机访问。
若访问到新点,就将新点入栈,直到这个点的四个方向都无法访问时,将该点出栈。
然后利用栈顶的点继续朝着四个方向访问。
以此类推,直到所有的点全被遍历过,遍历就结束了,这样就形成了迷宫地图。
深度优先算法生成迷宫的流程图如图4-2。
图4-2深度优先算法生成迷宫
4.2.2普里姆算法生成迷宫介绍
普里姆算法是图的最小生成树的一种构造算法。
其构成最小生成树的过程为:
在所有“其一个顶点已经落在生成树上,另一个顶点尚未落在生成树上”的边中取一条权值为最小的边,逐条加在生成树上,直至生成树中含有n-1条边为止。
PriMap类是利用普里姆算法实现迷宫的形成。
首先,设置迷宫中的格子均为墙。
其次,选择入口点并将其设置为可行,然后将其邻墙放入列表中。
当列表中有状态为不可行的格子时,从列表中随机选择一个作为墙的格子。
此时,如果它相邻的格子不是迷宫的通路,则把墙打通,即设置此格子的状态为可行,让其成为迷宫的通路,再将该格子的邻墙加入列表;如果墙的邻格已经是通路,则就从列表中删除这面墙。
两种算法都有各自的有点,从两种生成算法所生成的迷宫中可以很清楚的看出。
深度优先算法所生成的迷宫有些扭曲,曲折较多,但想要找出一条通路比较容易。
所以深度优先算法适用于较为简单的迷宫的生成。
相较而言,普里姆算法比较复杂。
其生成的迷宫岔路较多,生成的迷宫看起来很自然,但是想要找出一条通路是比较有难度的。
所以相比,普里姆算法适用于难度较大的迷宫生成算法。
相关示意图如图4-3。
图4-3深普里姆算法生成迷宫
5详细设计
详细设计阶段的根本目标是确定应该怎样具体实现所要求的系统,也就是说,经过这个阶段的设计工作,应该得出对目标系统的精确描述,从而在编码阶段可以吧这个描述直接翻译成某种程序设计语言书写的程序。
详细设计的结果基本上决定了最终程序设计代码的质量。
详细设计的目标你仅仅是逻辑上正确地实现每个模块的功能,更重要的是设计出的处理过程尽可能简明易懂。
结构程序设计技术是实现上述目标的关键技术,因此是详细设计的逻辑基础。
5.1核心包的设计
本游戏主要由游戏界面和游戏后台两大部分组成,其中的基本类包括如下:
AbstractMap,DFSMap,MainController,MainFrame,PathMap,Point,SetFrame,ShowPane,Test
工程图如图5-1。
图5-1工程图
5.1.1MainFrame类的设计与实现
本类主要是主界面的显示设计。
主界面主要由JMenuBar、Container、JPanel三个容器组成。
其中JMenuBar主要放置菜单选项“开始”和“设置”,Container是用来显示地图,JPanel是放置“开始游戏”、“显示路线”及上下左右四个方向键。
之后为菜单项设置监听器以及为上下左右四个方向键设置监听。
MainFrame类的主要代码如下:
@SuppressWarnings("serial")
classEnterKeyListenerimplementsKeyListener{
@Override
publicvoidkeyTyped(KeyEvente){
//TODOAuto-generatedmethodstub
intkeyCode=e.getKeyCode();
switch(keyCode){
caseKeyEvent.VK_UP:
dfspan.play
(1);
break;
caseKeyEvent.VK_DOWN:
dfspan.play
(2);
break;
caseKeyEvent.VK_LEFT:
dfspan.play(3);
break;
caseKeyEvent.VK_RIGHT:
dfspan.play(4);
break;
}
}
classGoListenerimplementsActionListener//方向监听
{
inti;
GoListener(inti){
this.i=i;
}
@Override
publicvoidactionPerformed(ActionEvente){
//TODOAuto-generatedmethodstub
dfspan.play(i);
con.repaint();
}
}
classItemListenerimplementsActionListener//菜单项监听器
{
MainFramemainFrame;
publicItemListener(MainFramemainFrame){
//TODOAuto-generatedconstructorstub
this.mainFrame=mainFrame;
}
@Override
publicvoidactionPerformed(ActionEvente){
//TODOAuto-generatedmethodstub
if(e.getSource()==item11){
System.exit(0);
}elseif(e.getSource()==item21){
newSetFrame(mainFrame);
}
}
}
publicstaticvoidmain(String[]args){
newMainFrame();
}
}
主界面如图5-2。
图5-2主界面
5.1.2SetFrame类的设计与实现
SetFrame主要实现菜单中“设置”选项的设计。
在设置选项中可以选择生成迷宫的算法,各为深度优先算法或者普里姆算法。
还可以对游戏的难度进行设置,分别为“简单”、“中等”、“复杂”。
设置其默认选项为“深度优先算法”和“中等”难度。
设置完毕之后,按确认键开始游戏。
对不同