基于Java的迷宫游戏(程序代码+任务书+说明书+外文翻译+演示文稿)_第1页
基于Java的迷宫游戏(程序代码+任务书+说明书+外文翻译+演示文稿)_第2页
基于Java的迷宫游戏(程序代码+任务书+说明书+外文翻译+演示文稿)_第3页
基于Java的迷宫游戏(程序代码+任务书+说明书+外文翻译+演示文稿)_第4页
基于Java的迷宫游戏(程序代码+任务书+说明书+外文翻译+演示文稿)_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

i基于Java的迷宫游戏摘要迷宫游戏是我们最常见的游戏之一,该游戏出现在手机游戏、掌上游戏机和电脑游戏当中,因此迷宫游戏也是一个十分经典的游戏。一般的迷宫游戏比较简单,游戏中随机出现一些障碍,要求玩家能够找出一条从起点到终点的通路。它看似简单确变化无穷,迷宫游戏上手及其简单,但要熟练的掌握其中的奥秘且快速找出一条通路,难度却不低。作为家喻户晓老少皆宜的大众游戏,其普及程度可以说是史上任何一款游戏都无法比较的。本设计是一款基于Java的迷宫游戏。目前用于游戏开发的计算机语言多种多样,而Java只是其中一种。然而,Java是现在全球最时髦的开发工具之一,它拥有一套庞大且完整的类库,内置了其他怨言需要靠库甚至是操作系统才能支持的功能。所以,程序员可以很容易的用Java编写并运行基于Java的游戏。本文从游戏的背景研究和发展现状开始,详细描述了整个游戏的制作过程。对实现功能以及操作过程进行了重点讨论,开发用到了Java类库中的许多包以及其中的类,例如java.util包,java.lang包,java.awt包等等,稳重会对这些包和类的用法进行讲解。关键词游戏;迷宫;Java;算法iiAbsractJava-BasedMazeGameMazeGameisoneofthemostcommonofourgame,thegameappearedinmobilegames,handheldgameconsolesandcomputergameswhich,thereforemazegameisaveryclassicgame.Generallyrelativelysimplemazegame,thegamerandomlysomeobstacles,requiringplayerstobeabletofindapathfromstarttofinish.Itseemssimpleindeedenormous,anditssimplemazegamestarted,butaskilledmastermysterycutquicklyidentifyapath,thedifficultyreallyisnotlow.Asawell-knownpopulargameforallages,itspopularitycanbesaidthatthehistoryofanygamecannotbecompared.ThisdesignisaJava-basedmazegame.Currentcomputerlanguageforavarietyofgamedevelopment,andJavaisjustoneofthem.However,Javaisnowoneoftheworldsmostfashionabledevelopmenttools,ithasalargeandcompletelibrary,built-inlibraryorothercomplaintsneedtorelyontheoperatingsystemtosupportfunctions.Therefore,theprogrammercaneasilywritteninJavaandrunJava-basedgames.Inthispaper,thestatusofresearchanddevelopmentbackgroundofthegamebegan,adetaileddescriptionoftheentiregameproductionprocess.Therealizationoffunctionsandoperationsarefocusedontheprocess,thedevelopmentoftheJavaclasslibrariesusedinmanypackagesaswellasoneofthecategories,suchasjava.utilpackage,java.langpackage,java.awtpackageandsoon,willthesepackagesandsteadytypeofusagetoexplain.Keywordsgame;maze;JavaLanguage;algorithm0目录1绪论.51.1课题的研究背景与意义.51.2Java简介.51.2.1名字起源.51.2.2发展历史.51.2.3语言特征.51.2.4开发平台.62可行性研究.72.1可行性分析.72.1.1技术可行性.72.1.2经济可行性.72.1.3操作可行性.72.1.4法律可行性.73需求分析.83.1系统初步分析.83.1.1用户需求分析.83.1.2功能需求分析.83.1.3系统的可靠性和可用性需求分析.84总体设计.94.1系统开发.94.1.1系统开发的原则.94.1.2系统设计阶段.94.1.3结构设计阶段.94.2相关算法介绍.104.2.1深度优先算法生成迷宫介绍.104.2.2普里姆算法生成迷宫介绍.115详细设计.135.1核心包的设计.1315.1.1MainFrame类的设计与实现.135.1.2SetFrame类的设计与实现.155.1.3ShowPane类的设计与实现.175.1.4MainController类的设计与实现.205.1.5AbstractMap类的设计与实现.235.1.6DFSMap类的设计与实现.235.1.7PriMap类的设计与实现.295.1.8Point类的设计与实现.326结论.34参考文献.35致谢.36外文文献.37中文翻译.4701绪论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源代码可以使用任何无格式的纯文本编辑器。11.2.4开发平台Java平台由Java虚拟机和Java应用编程接口(简称API)构成。Java应用编程接口为此提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。Java平台已经嵌入了几乎所有的操作系统。这样Java程序可以就可以在各种系统中运行。Java程序设计语言共分为三个体系JavaSE(java平台标准版),JavaEE(java平台企业版),JavaME(java平台微型版)。22可行性研究可行性研究的目的,就是用最小的代价在尽可能短的时间内确定问题是否能解决。要达到这个目的,必须分析集中主要的可能解法的利弊,从而判断原定的系统规模和目标是否现实,系统完成后所能带来的经济效益时候大到值得投资开发这个系统的程度。因此,可行性研究实质上是要进行一次大大压缩简化了的系统分析和设计的过程,也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。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计划”,这是中国首次将游戏技术纳入国家科技计划当中。文化部也想国内多家游戏业的实力厂商首次颁发了网络文化经营许可证,加大对游戏的监管力度,进口游戏的审查制度,限制国内对国外的受理措施。科技部指定科技发展计划,将把游戏开发的扶持力度加大。这样一来,国内游戏厂商将可获得发展的核心技术平台,政策有利于保护中国游戏软件的自主知识产权,这位游戏开发发展创造了良好的政策环境。33需求分析所谓系统分析,就是指在整个系统开发过程中,解决“做什么”的问题,把要解决哪些问题,满足用户哪些具体的信息需求调查分析清楚,从逻辑上或者说从信息处理的功能希求上提出系统方案,即逻辑模型,为下一阶段进行物理设计方案设计,解决怎么办提供依据。3.1系统初步分析3.1.1用户需求分析随着Internet的发展,进入信息时代后快速获得网络共享资源成为很简单的事情,人们对计算机产品产生更大的依赖性。计算机的普及使得原本生活已经不嫩更适应人们的需要,广大计算机爱好者迫切的需要能够使用计算机进行必要的娱乐活动来丰富自己的生活,这样,计算机游戏应运而生。据目前的游戏调研来看,由Java开发的游戏仍然是一个空白页,但是它却是一个继续填补的空白页。而Java语言由于其天生的语言特性,很适合进行游戏应用的开发,但由于系统环境问题时的它一直以来未能用于游戏开发,而近来由于Java的发展,它已经摆脱了束缚,浮出了游戏开发的水面。这也是玩家迫切要求的。3.1.2功能需求分析系统功能的需求指定系统必须提供的服务。通过需求分析应该划分出系统必须完成的所有功能。本作的功能模块主要包括游戏的后台设计,游戏的界面设计。游戏的引擎设计的需求分析:游戏后台是游戏的灵魂,也就是这个游戏的框架,它的好坏直接决定着游戏的质量。它是控制所有游戏功能的主程序,包括画面的处理,路径寻找算法的实现,接收玩家的设置等。所以坚定一个游戏的好坏,从内部设计的原因上说,是从游戏的后台设计体现出来的。一个游戏的后台设计,直接关系到游戏设计的其他方面,诸如游戏的图形系统、声音系统及设计的物理模块等各方面。就如一台CPU一样,游戏的后台也是直接牵制着整个游戏的设计。它主要的作用是处理游戏的时间,运行游戏,输出相应提示,响应玩家的游戏监听时间等。所以,游戏的后台设计是必要的功能模块,而且游戏的后台必须设计好,这样游戏才具有更好的可玩性。游戏程序是一样精度要求很高的程序系统,因为其代码利用率很高。一个实时运行的最终作品,每秒都会运行成千上万的程序,且需要极高频率在后台等待响应。因此,其伙计设计应当相当严谨。游戏界面设计的需求分析:作为一个游戏吸引玩家的最重要的方便就是几面。本作品界面简洁明了,是玩家人容易上手操作,且适应性强。3.1.3系统的可靠性和可用性需求分析可靠性需求定量地指定系统的可靠性,例如,游戏在运行过程中不能频繁发生错误而不得不中止游戏。可用性则与可靠性密切相关,它量化了用户可以使用系统的程度。例如,游戏的运行必须保证随时可以,不能在一段时间内,游戏产生不可预见的错误而致无法运行等。44总体设计总体设计过程通常由两个主要阶段组成:系统设计阶段,确定系统的具体实现方案;结构设计阶段,确定软件结构和功能模块。4.1系统开发4.1.1系统开发的原则经过需求分析阶段的工作,系统必须“做什么”已经明确,而系统开发是要明确“怎么做”。总体设计的基本目的就是回答“概括地说,系统应该如何实现?”这个问题,因此,总体设计又称概要设计或者初步设计。通过这个阶段的工作将划分出组成系统的物理元素程序、文件、数据库、人工过程和文档等等,但每个物理元素仍然处于黑盒子级,这些黑盒里的具体内容在详细设计中。总体设计的另一项重要的任务就是设计软件的结构,也就是确定系统中每个程序是由哪些模块组成,以及这些模块相互之间的关系。总体设计过程首先寻找实现目标系统的各种不同的方案。然后从这些提供的选择方案中选取若干合理的方案,为每个合理的方案都准备一份系统流程图,列出组成系统所有元素,进程成本、效益分析,并且制定实现此方案的进度计划。通常,设计出初步软件结构后还要进行多方改进,从而得到更合理的结构,进行必要的数据库设计,确定测试要求并且制定测试计划。基于上面的叙述,在详细设计之前先进行总体设计的必要性:可以站在全局高度上,花较少的成本,从较抽象的层次上分析对比多种系统方案和软件结构,从中选出最佳方案和最合理的软件结构,从而用较低的成本开发出较高成本的软件系统。4.1.2系统设计阶段系统设计阶段的主要目的是确定软件如何做的问题。主要任务是确定系统中的大模块和设计方法,确定软件的功能模块和模块作用、组成、关系等。本系统是一款较为传统的游戏,当玩家打开游戏,显示游戏界面,设置游戏难度之后便可开始游戏。当玩家找不到通往出口的路径时,可以点击“显示路径”按钮来显示一条从入口到出口的通路,不过这样的机会只有一次。也可以在此选择“绘制地图”,选择同一难度的其他地图样式,重新开始游戏。当玩家自己找到出口时,游戏便会提醒“恭喜您,已找到出口!”。4.1.3结构设计阶段经过系统设计阶段的思考和实践,需要对功能结构进行细致的划分。一个程序的结构设计的好坏也需要决定其发展的重要指标。对一个程序的模块划分往往也能是程序设计变得简单。本游戏的模块大致分为后台引擎和用户界面两大块,界面模块包括总体界面设计和设置界面设计。后台引擎模块包括深度优先迷宫生成算法和普里姆迷宫生成算法。除此之外,还包括一个主界面控制类,用于界面算法和界面生成之间的连接控制,还有一个点类,主要用于定义点的相关操作,一个迷宫生成的接口类,类中声明了迷宫生成算法所需要定义的三个方法。以为不做具体定义,所以被称为接口类。其功能模块图如下:5图4-1功能模块图4.2相关算法介绍算法是解题方案的准确而完整的描述,其代表着用系统的方法描述解决问题的策略机制。算法就相当于对一定规范的输入,在有限的时间内获得所要求的的输出。描述算法的方法有好多种,常用的自然语言、结构化流程图,伪代码等,其中最普遍的就是流程图。本设计除了实现迷宫的相关功能之外,还着重就实现迷宫的算法进行研究,通过算法及实现迷宫的特点比较深度优先算法和普里姆算法在迷宫生成方面的优劣性。4.2.1深度优先算法生成迷宫介绍DFSMap类使用深度优先算法得到地图的类。设置一个二维数组,数组的值为格子的状态。初始地图的上所有的格都设为墙,不可达。之后,再定义出口和入口,也将其设置为背景,可以被访问的通道。这样,生成的迷宫中显示的是每一个格子的四面都是墙。从入口点开始向四个方向中的一个随机访问,每找到一个可被访问的点,就去掉该点上的墙,可被访问的点继续以这样的方式向下进行下去。对每个已被访问的格子都设置为已访问。当一个点对某一方向进行访问时,首先需要根据判断条件判断被访问的点是否被访问过,或者处于边界,若该点的四个方向已经被访问或者无法访问,就退回上一个点,而上一个点需重复进行这一过程。这样一次遍历过后,可以确保每一个可被访问的点均被访问过。由于每次访问的方向是随机的,这样导致许多种不同的遍历情况,因为形成了不同的迷宫。所以迷宫的形成是堆积的,但是从起点到终点只有唯一路径。在算法上,只要是利用栈来实现。第一次先将第一个起始点入栈,之后每访问一个点就将该点入栈,之后再对栈顶点的四个方向进行随机访问。若访问到新点,就将新点入栈,直到这个点的四个方向都无法访问时,将该点出栈。然后利用栈顶的点继续朝着四个方向访问。以此类推,直到所有的点全被遍历过,遍历就结束了,这样就形成了迷宫地图。深度优先算法生成迷宫的流程图如图4-2。6图4-2深度优先算法生成迷宫4.2.2普里姆算法生成迷宫介绍普里姆算法是图的最小生成树的一种构造算法。其构成最小生成树的过程为:在所有“其一个顶点已经落在生成树上,另一个顶点尚未落在生成树上”的边中取一条权值为最小的边,逐条加在生成树上,直至生成树中含有n-1条边为止。PriMap类是利用普里姆算法实现迷宫的形成。首先,设置迷宫中的格子均为墙。其次,选择入口点并将其设置为可行,然后将其邻墙放入列表中。当列表中有状态为不可行的格子时,从列表中随机选择一个作为墙的格子。此时,如果它相邻的格子不是迷宫的通路,则把墙打通,即设置此格子的状态为可行,让其成为迷宫的通路,再将该格子的邻墙加入列表;如果墙的邻格已经是通路,则就从列表中删除这面墙。两种算法都有各自的有点,从两种生成算法所生成的迷宫中可以很清楚的看出。深度优先算法所生成的迷宫有些扭曲,曲折较多,但想要找出一条通路比较容易。所以深度优先算法适用于较为简单的迷宫的生成。相较而言,普里姆算法比较复杂。其生成的迷宫岔路较多,生成的迷宫看起来很自然,但是想要找出一条通路是比较有难度的。所以相比,普里姆算法适用于难度较大的迷宫生成算法。相关示意图如图4-3。7图4-3深普里姆算法生成迷宫85详细设计详细设计阶段的根本目标是确定应该怎样具体实现所要求的系统,也就是说,经过这个阶段的设计工作,应该得出对目标系统的精确描述,从而在编码阶段可以吧这个描述直接翻译成某种程序设计语言书写的程序。详细设计的结果基本上决定了最终程序设计代码的质量。详细设计的目标你仅仅是逻辑上正确地实现每个模块的功能,更重要的是设计出的处理过程尽可能简明易懂。结构程序设计技术是实现上述目标的关键技术,因此是详细设计的逻辑基础。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)classEnterKeyListenerimplementsKeyListenerOverridepublicvoidkeyTyped(KeyEvente)/TODOAuto-generatedmethodstubintkeyCode=e.getKeyCode();switch(keyCode)caseKeyEvent.VK_UP:9dfspan.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;OverridepublicvoidactionPerformed(ActionEvente)/TODOAuto-generatedmethodstubdfspan.play(i);con.repaint();classItemListenerimplementsActionListener/菜单项监听器MainFramemainFrame;publicItemListener(MainFramemainFrame)/TODOAuto-generatedconstructorstubthis.mainFrame=mainFrame;OverridepublicvoidactionPerformed(ActionEvente)/TODOAuto-generatedmethodstubif(e.getSource()=item11)System.exit(0);elseif(e.getSource()=item21)newSetFrame(mainFrame);10publicstaticvoidmain(Stringargs)newMainFrame();主界面如图5-2。图5-2主界面5.1.2SetFrame类的设计与实现SetFrame主要实现菜单中“设置”选项的设计。在设置选项中可以选择生成迷宫的算法,各为深度优先算法或者普里姆算法。还可以对游戏的难度进行设置,分别为“简单”、“中等”、“复杂”。设置其默认选项为“深度优先算法”和“中等”难度。设置完毕之后,按确认键开始游戏。对不同的游戏难度进行相应,即不同难度的游戏设置地图的边界大小的不同。通过变换地图长宽的值近而改变地图的难易程度。当玩家不想在继续游戏时,可选择设置栏上的“开始”选项,继续选择“退出”,则可以退出游戏。SetFrame类的主要代码如下:privatevoidsetRadio()intm=main.getM();if(m=20)simRadio.setSelected(true);elseif(m=50)difRadio.setSelected(true);elseif(m=35)11midRadio.setSelected(true);privatevoidsetMapRadio()intw=main.getCurflag();if(w=0)dfsRadio.setSelected(true);elseif(w=1)priRadio.setSelected(true);elseif(w=2)graRadio.setSelected(true);classSureListenerimplementsActionListenerSetFrames;publicSureListener(SetFramesetFrame)/TODOAuto-generatedconstructorstubs=setFrame;Override/不同难度的响应publicvoidactionPerformed(ActionEvente)/TODOAuto-generatedmethodstubif(e.getSource()=okBut)if(simRadio.isSelected()main.setM(20);main.setN(20);if(dfsRadio.isSelected()main.setCurflag(0);elseif(priRadio.isSelected()main.setCurflag(1);elseif(graRadio.isSelected()main.setCurflag(2);elseif(e.getSource()=exitBut);/s.setVisible(false);main.setEnabled(true);s.setVisible(false);设置界面如图5-3。12图5-3设置界面图5.1.3ShowPane类的设计与实现首先将迷宫所有格子设置成背景黑色,绘制迷宫时,所有迷宫的墙均为绿色,若寻找出的路径中含有某块格子,则将此块格子设置成红色。若不依赖游戏寻找出的路径,而是玩家自己寻找路径,当玩家走到迷宫的出口时,则此时弹出对话框“恭喜你,到迷宫的尽头!”ShowPane类主要代码如下:SuppressWarnings(serial)publicclassShowPaneextendsJPanelbooleana;privatestaticfinalintSX=30;privatestaticfinalintSY=30;privateStackstack;ShowPane(booleana)this.a=a;stack=newStack();this.setBackground(Color.black);stack.add(newPoint(1,0);repaint();ShowPane()a=newboolean11;13stack=newStack();this.setBackground(Color.black);OverrideprotectedvoidpaintComponent(Graphicsg)/TODOAuto-generatedmethodstubg.setColor(Color.black);g.fillRect(0,0,this.getWidth(),this.getHeight();g.setColor(Color.green);for(inti=0;igetPath();5.1.6DFSMap类的设计与实现DFSMap类使用深度优先算法得到地图的类。设置一个二维数组,数组的值为格子的状态。初始地图的上所有的格都设为墙,不可达。之后,再定义出口和入口,也将其设置为背景,可以被访问的通道。这样,生成的迷宫中显示的是每一个格子的四面都是墙。迷宫形成:首先判断地图上的每一个点是否都已经被遍历过,若没有,得到一点的坐标,判断该点实在地图画布的四个角、四条边上、或是在中间位置,分别用0-8表示该点是在左上角、左下角、右上角、右下角、左边界、右边界、上边界、下边界、中间位置。之后逐一进行分析,若该点位于地图的四个角,则下一步只有两个方向可以选择;若该点位于地图的四条边界上,则下一步有三个方向可以选择;若该点位于地图中间位置,则下一步有四个方向可以选择。不管朝上下左右四个方向如何移动,若此点可达,即将该点入栈。DFSMap类的主要代码如下:publicclassDFSMapextendsAbstractMappublicStackgetPath()/得到/TODOAuto-generatedmethodstubreturnstack;privatebooleancheck()/判断是否全部走过。for(inti=1;istack;/用作队列,存放墙publicPriMap(intm,intn)stack=newStack();reset(m,n);publicbooleangetData()/TODOAuto-generatedmethodstubreturna;publicvoidreset(intm,intn)this.m=2*m+1;this.n=2*n+1;a=newbooleanthis.mthis.n;for(inti=0;igetPath()/TODOAuto-generatedmethodstubreturnstack;26privatevoidresetPostion()/创建一个随机生成数器,使用以毫秒为单位的当前时间Randomr=newRandom(System.currentTimeMillis();while(true)if(stack.size()=0)break;inti=r.nextInt(stack.size();Pointp=stack.remove(i);/移除此向量中指定位置的元素intx=p.getX();inty=p.getY();inttest=test(x,y);if(test=1)if(ax+1y=false)axy=true;currX=x+1;currY=y;acurrXcurrY=true;break;if(ax-1y=false)axy=true;currX=x-1;currY=y;acurrXcurrY=true;break;if(axy-1=false)axy=true;currX=x-1;currY=y;acurrXcurrY=true;break;相关示意图如图5-12和图5-13。27图5-12普里姆算法生成的地图图5-13普里姆算法地图的路径图285.1.8Point类的设计与实现Point类为一个点的坐标类,可通过此类,可以实现点的位置的设置和获取。Point类的主要代码如下:publicclassPointprivateintx;privateinty;publicinthashCode()/TODOAuto-generatedmethodstubreturn0;publicPoint(intx,inty)this.x=x;this.y=y;Overridepublicbooleanequals(Objectobj)/TODOAuto-generatedmethodstubPointp=(Point)obj;if(p.x=this.x&p.y=this.y)returntrue;elsereturnfalse;296结论本次毕业设计到此已经顺利结束。通过这次毕业设计,我学习到了很多东西。在以前的三年课程中我学到了很多课程,从开始的计算机理论基础,到C语言,数据结构,C+,Java,数据库系统概论等。虽然通过学习对这些课程都是比较肤浅的了解,而且也只是停留在堆理论只是的理解阶段,对其掌握程度还不够前面和熟悉。这次毕业设计,使我将大学四年中所学的课程贯穿整合起来,同时在设计中还涉及到一些之前没有学习过的新知识。对这些新知识的学习培养了我快速自学和应用新知识的能力。本次毕业设计不仅仅是我岁所学知识的一次综合应用,更是对我综合分析试剂问题、处理实际问题的能力的培养和锻炼。本次设计运用了Java相关知识及软件工程的思路进行开发。在实现功能的同时更加侧重对于生成迷宫算法的研究,主要针对深度优先算法和普里姆算法在迷宫中应用的对比。通过生成的迷宫可以看出深度优先算法所生成的迷宫较为扭曲,但有着一条明显的通路,可以较为容易的找到一条路径。而普里姆算法生成的迷宫岔路较多,整体上较为自然而复杂,想要找到一条通路较为有难度。由于时间、条件有限,经验不足等,本文所做的工作还有很多不足之处,还需要进一步学习和研究。30参考文献1严蔚敏.数据结构(C语言版)M.清华大学出版社,20062吴哲辉,崔焕庆,马炳先.算法设计方法J.机械工业出版社,20083耿祥义,张跃平.Java2实用教程(第三版)M.清华大学出版社,20064陆光义.Java游戏编程导学D.清华大学出版社,20045BruceEckel.TinkinginJavaJ.机械工业出版社,20076ThomasH.Cormen.IntroductiontoAlgorithmsM.机械工业出版社,20067MarkAllenweiss.数据结构与算法分析J.机械工业出版社,20048邹恒明.算法之道(第二版)M.机械工业出版社,20079SierraK.HeadFirstJava(第二版)J.中国电力出版社,200110李刚.疯狂Java讲义J.电子工业出版社,201231致谢作者在设计(论文)期间都是在苏小锐老师和张光胜老师的全面指导下完成的,感谢两位老师的不辞辛苦地为我指正设计和论文中的缺点和漏洞。感谢冯秀芳教授在毕业设计论文编写过程中给予的指导和帮助。感谢我的同学和朋友对我的关心和帮助。32外文文献ThegrowthoftheutilizationoftheWorldWideWeb(WWW)asamediumforthedeliveryofcomputer-basedpatientrecords(CBPR)hascreatedanewparadigminwhichclinicalinformationmaybedelivered.UntilrecentlytheauthoringtoolsandenvironmentforapplicationdevelopmentontheWWWhavebeenlimitedtoHyperTextMarkupLanguage(HTML)utilizingcommongatewayinterfacescripts.While,attimes,thisprovidesaneffectivemediumforthedeliveryofCBPR,itisalessthanoptimalsolution.Theserver-centricdynamicsandlowlevelsofinteractivitydonotprovideforarobustapplicationwhichisrequiredinaclinicalenvironment.TheemergenceofSunMicrosystemsJavalanguageisasolutiontotheproblem.InthispaperweexaminetheJavalanguageanditsimplicationstotheCBPR.Aquantitativeandqualitativeassessmentwasperformed.TheJavaenvironmentiscomparedtoHTMLandTelnetCBPRenvironments.Qualitativecomparisonsincludelevelofinteractivity,serverload,clientload,easeofuse,andapplicationcapabilities.Quantitativecomparisonsincludedatatransfertimedelays.TheJavalanguagehasdemonstratedpromisefordeliveringCBPRs.AbstractTheJavaprogramminglanguageisprimarilyusedforplatform-independentprogramming.Yetitalsooffersmanyproductivity,maintainabilityandperformancebenefitsforplatform-specificfunctions,suchasthegenerationofmachinecode.WehavecreatedreliableassemblersforSPARC,AMD64,IA32andPowerPCwhichsupportallusermodeandprivilegedinstructionsandwith64bitmodesupportforallbutthelatter.TheseassemblersaregeneratedasJavasourcecodebyourextensibleassemblerframework,whichitselfiswrittenintheJavalanguage.Theassemblergeneratoralsoproducesjavadoccommentsthatpreciselyspecifythelegalvaluesforeachoperand.OurdesignisbasedontheKleinAssemblerSystemwritteninSelf.Assemblersaregeneratedfromaspecification,asaretable-drivendisassemblersandunittests.ThespecificationsthatdrivethegeneratorsareexpressedasJavalanguageobjects.ThusnoextraparsersareneededanddevelopersdonotneedtolearnanynewsyntaxtoextendtheframeworkforadditionalISAs.Everygeneratedassembleristestedagainstapreexistingas

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论