毕业论文-基于java语言推箱子游戏的设计与实现_第1页
毕业论文-基于java语言推箱子游戏的设计与实现_第2页
毕业论文-基于java语言推箱子游戏的设计与实现_第3页
毕业论文-基于java语言推箱子游戏的设计与实现_第4页
毕业论文-基于java语言推箱子游戏的设计与实现_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

基于JAVA语言推箱子游戏的设计与实现摘要社会在进步,人们生活质量也在日益提高。高强度的压力也接踵而来。社会中急需出现新的有效方式来缓解人们的压力。此次设计符合了社会需求,JAVA推箱子游戏可以让人们在闲暇之余,体验游戏的乐趣。具有操作简单,易于上手的特点。推箱子游戏的玩法十分简单控制人物绕过障碍物,到达目的地。此次试验基于JAVA语言。将游戏地图做成通用的关卡设计,关卡用文本实现在文本文件里设置好关卡,游戏核心模块中图片随机生成采用了数字和图片绑定,运用随机函数以及数组交换的算法,实现了游戏图片初始化状态,有效的解决了图片排布问题,方案简单易行。充分运用堆栈的存储特点实现悔棋功能。用迭代计算小人和箱子的移动,一个计算人是否能到达某一个格子一个是计算箱子是否能到达相邻的某一个格子。舒缓的音乐配合有趣的步骤,相信能引起很多人的兴趣。作为一个具有悠久历史的游戏,也能够引起人的怀念和共鸣。关键词压力;游戏;JAVA多功能JAVAIMPLEMENTATIONOFTHESOKOBANGAMEABSTRACTSOCIALPROGRESS,QUALITYOFLIFEISALSOINCREASINGHIGHINTENSITYPRESSUREALSOFOLLOWTHEEMERGENCEOFNEWSOCIALURGENTLYNEEDEDANEFFECTIVEWAYTORELIEVEPEOPLESSTRESSTHISISDESIGNEDTOMEETTHENEEDSOFTHECOMMUNITY,JAVASOKOBANGAMEALLOWSPEOPLEINHERSPARETIME,EXPERIENCETHEFUNOFTHEGAMEWITHSIMPLEOPERATION,EASYTOUSEFEATURESSOKOBANGAMEPLAYISVERYSIMPLECONTROLTHECHARACTERAROUNDOBSTACLESTOREACHTHEDESTINATIONTHETESTISBASEDONJAVALANGUAGETHEGAMEMAPMADEGENERICLEVELDESIGN,CHECKPOINTSSETUPCHECKPOINTSTOACHIEVEWITHATEXTINATEXTFILE,THEGAMECOREMODULEUSESARANDOMLYGENERATEDDIGITALIMAGESANDPICTURESBINDING,USINGARANDOMARRAYOFFUNCTIONSANDALGORITHMSEXCHANGETOACHIEVEAGAMEPICTURESINITIALIZATIONSTATE,EFFECTIVELYSOLVETHEPROBLEMOFPICTUREARRANGEMENT,THEPROGRAMISSIMPLEMAKEFULLUSEOFTHESTORAGECHARACTERISTICSOFTHESTACKTOACHIEVEUNDOFUNCTIONMOBILECOMPUTINGANDBOXESOFITERATIVEVILLAIN,ACALCULATIONWHETHERONECANREACHACERTAINGRIDISTOCALCULATEWHETHERACASECANREACHANEIGHBORINGLATTICESOOTHINGMUSICWITHINTERESTINGSTEP,WHICHWILLHOPEFULLYLEADTOALOTOFPEOPLESINTERESTASAGAMEWITHALONGHISTORY,BUTALSOCANCAUSEPEOPLETOMISSANDRESONANCEKEYWORDSPRESSUREGAMESJAVAMULTIFUNCTION目录摘要IABSTRACTII引言11系统分析211技术可行性分析2111可行性目的2112可行性研究前提2113算法可行性分析2114平台选择412需求分析8121引言8122游戏需求8123软硬件需求9124接口控制913方案论证9131C语言的优点9132JAVA语言的优点10133C语言的优点11134方案选择132概要设计1521游戏设计分析15211地图文件的引用15212程序运逻辑15213绘图15214显示平台1522注意事项1523游戏流程图1624函数模型163详细设计2031游戏总体结构与代码2032选关模块2133地图的绘制形成2234小人与箱子移动的算法2435小人上下移动模块2636悔棋模块2737音乐控制284游戏测试3041软件测试30411软件测试简介30412测试方法30413测试步骤3142游戏系统性能分析31结论32参考文献33致谢34原文35翻译42引言策略性游戏可以锻炼人的思维能力还能缓解人的压力,使人们暂时忘却生活当中的烦恼,增强人们的逻辑思维能力,游戏的艺术美也吸引着越来越多的玩家和厂商,寓教于乐,在放松人们心情的同时还可以活跃双手,在节奏越来越快的生活中,游戏如清风般扑来,丰富了人们的生活,随着时代的进步,游戏产业逐渐壮大,成为人们生活中不可或缺的一部分。推箱子游戏起源于日本,在游戏中人们可以提高逻辑思维能力。它的玩法也非常简单。控制人物不停的移动将箱子推到目的位置。难点在于移动的位置,以及箱子到达指定位置的顺序,只有多加思考才能获得游戏的胜利。反复推敲,锻炼了人们的耐性。本次的开发尽量多的设置了关卡数目,增强游戏的耐玩性,同时在画面上有所提高,借鉴了许多达人的经验和技术,引发了我对游戏的热爱,丰富了个人生活,相信推箱子游戏在今后的社会总会越来越引人注目。1系统分析11技术可行性分析111可行性目的通过推箱子游戏中使用的JAVA技术,让我能够更加熟练的使用MYECLIPE。同时了解相关运行环境的配置。将理论知识和实际操作结合起来。达到学以致用的目的。网上资料的查询极大的提高了我的自学能力。希望经过此次设计,锻炼自己的思考,解决问题的能力。对系统开发的流程有更深层次的理解,检验学习成果和实际动手能力,对底层知识有更深的了解。为今后的工作打好基础。112可行性研究前提基本需求通过规范的开发流程,采用面向对象的分析设计方法实现游戏美观,易玩,及时等特性。操作性方面主要通过键盘的借口实现,操作键位是上,下,左,右。主要开发目标通过此次研究熟练JAVA的相关知识和技术的应用,界面美化的工作需要同学的的帮助,了解团队和合作的重要,熟悉不同领域相关技术的交叉,完成JAVA推箱子游戏的基本功能。条件假定和限制JAVA相关技术的使用不是很熟练,如果有些游戏BUG没有及时发现,相关升级版本需要之后弥补,更正。可行性研究所采用的方法和步骤通过研究分析推箱子小游戏所需要的功能以及实现的方法、确定主体结构。利用所学到的知识,以最简洁、最容易的办法,边开发边测试边修改,实现一个初级游戏软件。评价尺度实现基础的推箱子功能,如输赢判定,人物的移动位置,箱子的移动位置,同时加强画面的优化,音乐的选定等基础功能。更强的优化需要以后的升级和修改,实相关功能就达到目标。113算法可行性分析管理可行性此次设计基于JAVA,有面向对象,可移植性,安全性,并发机制,支持可视化图形界面等特点。易于管理。经济可行性本次设计注重游戏功能的实现,达到设计目的,不用于其他的商业用途。通过此次设计增强JAVA技术和实践的结合。同时了解可视化界面,设计操作界面和页面的跳转更换。操作环境需要MYECLIPSE。相关资料可以上网查询。硬件方面可以使用HP笔记本。所以易于操作。技术可行性对于本游戏,可以使用如VB,JAVA,DELPHI等相关的编程语言,但是考虑到编写程序的难易程度以及对编译语言的了解程度,本游戏选择JAVA程序语言作为编程语言。需要对变量定义、变量初始化、界面初始化、游戏初始化等,然后就可以进入游戏,处理游戏过程中的各种操作。社会可行性本次设计基于学习的需要,所做毕业设计的内容不会在社会上进行商业运作。网上所查的资料以及相关的知识的引用,属于学术交流,不涉及版权,以及法律责任。同时不会对社会产生负面的影响,不存在不可行性。现建立一个二维常数队列(A0,B0),将所有位置对应于二维队列中的一个位置。将石头的位置上设定数字2,箱子的位置上设定数字1,空地的位置上设定数字0,将任务初始的位置上设定数字3。这样就完成了初始化的过程。将人物可以直接到达的箱子周围的空地算出来(个人认为这一步深度优先比较好),存入另一个数列中。将人物和箱子的当前位置记入变量I,J中,人物移动到每个位置上后,人物与箱子的位置差绝对值一定为1。用这个差值算出如果箱子可以移动时的下一位置的当前状态,当状态不为0时,舍弃这个位置,即此路不通,这路算法结束;若状态为0,则将箱子的位置和人物位置全部移动到下一位置,这个时候将箱子位置和人物位置记入新的二维常数队列(A1,B1)中。这时再用上一个判断加上这个判断当变量I,J与二维常数队列(A1,B1)中记录的对应位置一致时认定该路不通,这样用深度优先循环下去。直到得到最终的位置M,N。当然这是一个箱子的算法,要是是两个箱子就将常数列用(A0,B0,C0)代替,然后将第二个箱子的位置写在C0中就可以了。这实际上是一个寻路问题,最简单的用一个广度优先搜索就可以找到最短路径。从角色当前位置开始,每次向所有可能方向展开一层,如下图直到扩展到目标位置。根据节点的父子关系能反推出移动步骤。如下图11所示图11推箱子地图演示输出结果很简单,从当前栈底到栈顶,每个元素代表一步移动。由于移动步骤只记录了主角推动箱子的位置,可以根据上一个问题的解决办法,能得到当前主角位置到主角推动位置的路径。要判断当前局面是否在之前的移动步骤上出现过,这个问题到现在我还没有想出特别好的方法。容易想到最笨的方法的是从上到下访问当前栈内所有元素,恢复出之前的所有状态逐一比较,包括主角是否在同一封闭空间。聪明一点的话可以根据关卡状态计算出某种唯一的特征值记录在压栈数据中,只要比较该特征值就可以了。仍然使用问题1的广度优先扩展,容易找出所有和主角所在空间相邻的箱子,判断箱子是否可以从主角所在空间推动也不难,先看是哪一面相邻,再看箱子另一面是否为空。114平台选择一、首先我们需要做到MYECLIPSE到底是什么下面允许我做一些简要的介绍应该大家都知道ECLIPSE优点免费、程序代码排版功能、有中文化包、可增设许多功能强大的外挂、支持多种操作系统WINDOWS、LINUX、SOLARIS、MACOSX等等,而MYECLIPSE企业级工作平台(MYECLIPSEENTERPRISEWORKBENCH,简称MYECLIPSE)是对ECLIPSEIDE的扩展,利用它我们可以在数据库和J2EE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的J2EE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML,STRUTS,JSF,CSS,JAVASCRIPT,SQL,HIBERNATE。在结构上,MYECLIPSE的特征可以被分为7类1J2EE模型。2WEB开发工具。3EJB开发工具。4应用程序服务器的连接器。5J2EE项目部署服务。6数据库服务。7MYECLIPSE整合帮助。对于以上每一种功能上的类别,在ECLIPSE中都有相应的功能部件,并通过一系列的插件来实现它们。MYECLIPSE结构上的这种模块化,可以让我们在不影响其他模块的情况下,对任一模块进行单独的扩展和升级。简单而言,MYECLIPSE是ECLIPSE的插件,也是一款功能强大的J2EE集成开发环境,支持代码编写、配置、测试以及除错。二、接着既然我们已经知道了这个软件,那么她又可以帮我们作些什么呢这里我作一些简要的介绍由于MYECLIPSE相继推出不同的版本,每个版本又有其各自的特点,在此我只介绍我当前在用的整个版本6XGA总结起来讲这个版本支持这些以下功能1平台和安装支持(1)兼容ECLIPSE33/EUROPA10。(2)支持JAVA5可以CTRLSHIFTF,但是这样以后只有运行才知道ALERT的是什么,而且JS中如果有英文注释也还是保存不了,点击右键“PROPERTIES”在TEXTFILEENCODING中点OTHER选择GBK。4如果是MYECLIPSE5以下的版本,有时会出现这样的问题在断点调试的时候没有绿色的条显示,断点走到另外一个文件的时候视图里也不自动跳转到那个页面,这样调试起来很麻烦,需要手动的点击跟到断点位置看变量的值解决办法在ECLIPSEWINDOWPREFERENCESTOMCATSOURCEPATH中左侧,中要跟踪的工程后APPLY,OK。然后重启TOMCAT;这项在MYECLIPSE6中是没有的,貌似MYECLIPSE6中没出过这样的问题;今天又碰到一个问题,补充一下修改了一个文件,比如添加了一句打印SYSTEMOUTPRINTLN“11111111“,执行时发现不打印,把CLASS反编译,发现这句确实已经添加上了,重启TOMCAT,这句没问题了,但是再做修改还是不生效,最终发现是在WINDOWPREFERENCESMYECLIPSEINTERNETTOOLSCACHE中取消了勾选DISABLECACHING,重新勾选就好用了。5设定BREAKPOINTS查找代码中空指针是哪一行产生的,并调试在DEBUG视图中,选择BREAKPOINTS在其下一行有ADDJAVAEXCEPTIONBREAKPOINT图标在CHOOSEANEXCEPTION中输入NULLPOINTEREXCEPTION即可,不用的时候我们可以把那个断点点掉不要删除。12需求分析121引言对软件需求分析特别重要。在软件工程的历史中,很长时间里人们一直认为需求分析是整个软件工程中的一个简单步骤,但在过去十多年中越来越多的人认识到它是整个过程中最关键的一个过程。只有通过软件需求分析,才能把软件功能和性能的总体概念描述为具体的软件需求规格说明,从而奠定软件开发的基础。许多大型应用系统的失败,最后均归结到需求分析的失败要么获取需求的方法不当,使得需求分析不到位或不彻底,导致开发者反复多次地进行需求分析,致使设计、编码、测试无法顺利进行;要么客户配合不好,导致客户对需求不确认,或客户需求不断变化,同样致使设计、编码、测试无法顺利进行。软件设计的需求的作用大于程序的设计。122游戏需求玩家是通过对小人的移动操作来控制推动箱子的,并且玩家需要避过障碍物以及死角,才能将其推放到指定位置从而达到过关的目的。如果玩家将箱子推入死角导致箱子无法移动或不能移动到指定位置则闯关失败,可以通过悔步或重新开始等操作来重新挑战本关。游戏功能需求如下所示游戏界面需求简洁美观的用户界面,可以带给用户自然清晰的画面。游戏内容需求良好的小人与箱子设计,可以给玩家带来更真实的感觉。小人需要前、后、左、右四张图片,移动中的箱子与终点上的箱子要所有区别,因此需要两不同的图片以示区别。键盘处理事件控制小人与箱子的移动,可通过键盘方向键(上、下、左、右键)对小人进行上、下、左、右的移动,并且能够推动箱子。显示需求当所有箱子都到达指定位置后即可过关,若进入死角则无法过关,需要进行悔步或重新开始的操作。可以由玩家喜欢选择关卡进行游戏。123软硬件需求硬件环境需求CPUPENTIUMIII600;内存3G;内存剩余资源500M;软件环境JDK15及其以上的版本。MYECLIPSE10。124接口控制使用键盘的接口控件操作,上下左右相关键位控制小人的移动。13方案论证学校开设的关于学习编程语言的课程有C语言、C语言、JAVA程序语言等,皆可用于编写推箱子小游戏的程序。131C语言的优点软件需求分析特别重要。在软件工程的历史中,很长时间里人们一直认为需求分析是整个软件工程中的一个简单步骤,但在过去十多年中越来越多的人认识到它是整个过程中最关键的一个过程。只有通过软件需求分析,才能把软件功能和性能的总体概念描述为具体的软件需求规格说明,从而奠定软件开发的基础。许多大型应用系统的失败,最后均归结到需求分析的失败要么获取需求的方法不当,使得需求分析不到位或不彻底,导致开发者反复多次地进行需求分析,致使设计、编码、测试无法顺利进行;要么客户配合不好,导致客户对需求不确认,或客户需求不断变化,同样致使设计、编码、测试无法顺利进行。C语言支持几乎所有的面对象程序设计特征。可以说,C语言集中体现了近20年来在程序设计和软件开发领域出现的新的思想和新技术,这主要包括(1)抽象数据类型。(2)封装和信息隐藏。(3)以继承和派生方式实现程序重用。(4)以运算符重载和虚函数来实现多态性。(5)以模版来实现类型的参数化。C是程序员和软件开发者在实践中创造的一般的高级程序设计语言是由计算机科学家在科研和教学环境中设计出来的,然而,C语言却是由从事实际系统开发的程序员在实践中创造。因此,C往往从编写实际程序的角度出发,为了程序员提供了各种各样、灵活、高效的语言特性。正是这些良好的特性使得C在很多领域,特备是大规模系统程序开发的开发方面,得到广泛应用。目前,许多成功的大型软件都是使用C编写的。C是C语言的超集所谓“C是C语言的超集”是指包含C中包含C语言的全部语法特征。因此,每一个用C语言编写的程序都是一个C程序。C程序的设计宗旨就是在不改变C语言语法规则的基础上扩充新的特性。实际上,能够很好地兼容C语言正是C取得成功的原因之一,这是因为(1)C继承了C语言简明、高效、灵活等众多优点。(2)以前使用C语言编写的大批软件可以不加任何修改,直接在C开发环境下维护。(3)C语言程序员只需要学习C扩充的新特性,就可以很快地使用C编写程序。由于具有以上特点,C已经开始取代C语言工作,被广泛地应用于各行领域的程序设计工作中。时间表明,对于中型和大型程序的开发工作,使用C的效果要比C言语好的多。C正在从软件的可靠性,可重用性,可扩充性,可维护性等方面体现出它的优越性。132JAVA语言的优点JAVA语言的流行除了因为它能够编制嵌入HTML文件中的APPLET外,还在于JAVA语言本身的面向对象、简单、平台无关性、安全性、多线程等特点。JAVA语言的结构与编写方式,与C语言类似,因此学习JAVA语言,不仅要了解JAVA语言独有的编程特点,同时还要有程序设计基础和面向对象的概念。JAVA语言的主要特点如下1简单、高效。JAVA语言与C类似,如果用户了解C和面向对象的概念,就可以很快编写出JAVA程序;此外,JAVA又不同于诸如C语言提供的各种各样的方法,它只提供了基本的方法,这样就减少了编程的复杂性,例如去掉了头文件、指针变量、结构、运算符重载、多重继承等复杂特性。JAVA语言虽然简单,却很高效,它可以用面向对象的方法来描述用户的每一个动作。2面向对象。JAVA语言是一种新的面向对象的程序设计语言,它除了几种基本的数据类型外,大都是类似C中的对象和方法,程序代码大多体现了类机制,以类的形式组织,由类来定义对象的各种行为。JAVA同样支持类继承,这样也减少了程序设计的复杂性。3平台无关性。JAVA语言经编译后生成与计算机硬件结构无关的字节代码(BYTECODE),这些字节代码被定义为不依赖任何硬件平台和操作系统。当JAVA程序在运行时,需要由一个解释程序对生成的字节代码解释执行。这体现了JAVA语言的与平台无关性,使得JAVA程序可以在任何平台上运行,如MSDOS,WINDOWS,UNIX等,因此具有很强的移植性。4交互式特性。JAVA是面向对象的网络编程语言,由于它支持TCPIP协议,使得用户可以通过浏览器访问到INTERNET上的各种动态对象。并且在网络上用户可以交互式地进行各种动作,而多线程技术的引入使得这种交互式操作更为容易。5多线程机制。JAVA语言支持多线程机制,多线程机制使得JAVA程序能够并行处理多项任务。JAVA程序可以设计成具有多个线程,例如让一个线程负责数据的检索、查寻,另一个线程与用户进行交互,这样,两个线程得以并行执行。多线程机制可以很容易地实现网络上的交互式操作。6动态的内存管理机制。JAVA语言采用了自动垃圾回收机制进行内存的管理。在C语言中,程序员在编写程序时要仔细地处理内存的使用,例如当某个内存快使用完毕时,要及时释放,以供其它程序使用,一旦内存管理不当,就有可能造成内存空间浪费或程序运行故障。在JAVA系统中包括了一个自动垃圾回收程序,它可以自动、安全地回收不再使用的内存块,这样,程序员在编程时就无需担心内存的管理问题,从而使JAVA程序的编写变得简单,同时也减少了内存管理方面出错的可能性。7安全性。在类似INTERNET的这种分布式网络环境中,安全性是个不容忽视的问题。JAVA语言在安全性方面引入了实时内存分配及布局来防止程序员直接修改物理内存布局;通过字节代码验证器对字节代码的检验,以防止网络病毒及其它非法代码侵入。此外,JAVA语言还采用了许多面向对象的异常处理机制,负责对一些异常事件进行处理,如内存空间不够,程序异常中止等的处理。以上介绍了JAVA语言的一些主要特点,除此之外它还具有动态性、类库丰富、高性能等特点,这些都使得JAVA语言在各个方面得以成熟和完善,成为大众日益青睐的程序设计语言之一。133C语言的优点C语言是一种计算机程序设计语言。它既具有高级语言的特点,又具有汇编语言的特点。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画。具体应用比如单片机以及嵌入式系统开发。在C的基础上,一九八三年又由贝尔实验室的BJARNESTROUSTRUP推出了C。C进一步扩充和完善了C语言,成为一种面向对象的程序设计语言。C目前流行的最新版本是BORLANDC,SYMANTECC和MICROSOFTVISUALC。C提出了一些更为深入的概念,它所支持的这些面向对象的概念容易将问题空间直接地映射到程序空间,为程序员提供了一种与传统结构程序设计不同的思维方式和编程方法。因而也增加了整个语言的复杂性,掌握起来有一定难度优点1简洁紧凑、灵活方便。C语言一共只有32个关键字,9种控制语句,程序书写形式自由,区分大小写。把高级语言的基本结构和语句与低级语言的实用性结合起来。C语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。2运算符丰富。C语言的运算符包含的范围很广泛,共有34种运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C语言的运算类型极其丰富,表达式类型多样化。灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。3数据类型丰富。C语言的数据类型有整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据结构的运算。并引入了指针概念,使程序效率更高。另外C语言具有强大的图形功能,支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。同时对于不同的编译器也有各种4C是结构式语言。结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。5语法限制不太严格,程序设计自由度大。虽然C语言也是强类型语言,但它的语法比较灵活,允许程序编写者有较大的自由度。允许直接访问物理地址,对硬件进行操作。由于C语言允许直接访问物理地址,可以直接对硬件进行操作,因此它既具有高级语言的功能,又具有低级语言的许多功能,能够像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元,可用来写系统软件。6生成目标代码质量高,程序执行效率高。一般只比汇编程序生成的目标代码效率低1020。7适用范围大,可移植性好。C语言有一个突出的优点就是适合于多种操作系统,如DOS、UNIX、WINDOWS98WINDOWSNT;也适用于多种机型。C语言具有强大的绘图能力,可移植性好,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画,它也是数值计算的高级语言。134方案选择面向对象是一种认识世界的方法,是一种程序设计方法。面向对象的观点认为,客观世界是由各种各样的实体,即对象组成的。每种对象都有自己的内部状态和运动规律,不同对象间的相互联系和相互作用就构成了各种不同的系统,并进而构成整个客观世界。按照这样的思想设计程序,就是面向对象的程序设计。面向对象的程序设计吸取了结构化程序设计的先进思想,并把它们同几个支持用户用新方法进行程序设计的有力概念结合在一起。所有面向对象的程序设计语言一般都包含三个概念封装、多态性和继承性。这种方法要求语言必须具备抽象、封装、继承和多态性这几个关键要素。面向对象的程序设计,是通过数据和代码建立分块的内存区域,以便提供对程序进行模块化的一种程序设计方法,这些模块可以被用作样板,在需要时再建立其副本。C语言和JAVA语言在面向对象这方面都比较强,C语言为了与C语言兼容,其是包含了些面向过程的成分;JAVA语言除了C语言中非面向过程的部分,其程序编写过程就是设计、实现类,定义其属性、行为的过程。还有JAVA语言特有的“沙箱”机制是其安全性的保障,同时它去除了C语言中易造成的错误指针,增加了自动内存管理等措施,保证了JAVA程序运行的可靠性。对于变量声明、参数传递、操作符、控制语句等方面,JAVA使用了与C、C相同的风格,使得熟悉C、C的程序员能很方便地进行编程。同时,JAVA为了实现其简单、强壮、安全等特性,也去掉了C和C中许多不合理的内容。JAVA语言和C语言、C语言的区别有1全局变量JAVA程序中,不能在所有类之外定义全局变量,只能通过在一个类中定义公用、静态的变量来实现一个全局变量。JAVA对全局变量进行了更好的封装。而在C语言和C语言中,依赖于不加封装的全局变量常常造成系统的崩溃。2不采用GOTO语句JAVA不支持C语言/C语言中的GOTO语句,而是通过例外处理语句TRY、CATCH、FINALLY等来代替,并处理遇到错误时跳转的情况,使程序更可读且更结构化。3指针JAVA不支持C语言/C语言中的指针,因为由指针所进行的内存地址操作常会造成不可预知的错误,同时通过指针对某个内存地址进行显式类型转换后,可以访问一个C中的私有成员,从而破坏安全性,造成系统的崩溃。JAVA对指针进行完全的控制,程序员不能直接进行任何指针操作,例如把整数转化为指针,或者通过指针释放某一内存地址等。因此,经过再三比较三种语言之后,采用了JAVA语言来编写推箱子小游戏的程序代码。各类语言使用热度如下图12所示图12编程语言使用热度排行2概要设计21游戏设计分析从面向对象的观念出发,本程序可分为以下几个对象1地图文件的引用。2小人与箱子的移动。3程序运算逻辑。4绘图。5显示平台。分析对象的技巧在于它的重复利用及维护效率。如果要把设计出来的程序在不同的显示平台上执行,就要作大幅度的更动甚至重写,这样就失去了面向对象属性,所以在本程序分析时将不变与易变的因素分别做成对象,如地图文件、小人与箱子的移动以及程序的运算逻辑就是不变的项目,而绘图及显示平台会因为环境而有所不同属于易变的项目。211地图文件的引用在设计游戏程序时,通常都是把游戏的画面布局数据存放在一个地图文件中。程序通过读取地图文件中的数据来获取画面的布局安排。地图文件是2020的变量数组文件,在地图不同的数字代表不同的意义。把这组数据保存到一个文件中,这个文件就是地图文件了。212程序运逻辑程序中逻辑运算包含小人与箱子的移动、键盘事件的响应、保存数据以实现悔步以及重新开始的操作等等。213绘图绘图主要是用于在小人与箱子的移动后,原位置由草地填补,以此来表示小人与箱子的移动以及其画面的连贯性。214显示平台“可移植性高”是JAVA的属性之一,JAVA的应用涉及许多领域,如手机、单机程序及浏览器等,不同的平台对于它的设定不尽相同,若将显示平台独立为一个类,将有助于主程序的完整性及移植程序的快速性。22注意事项小游戏在设计时要注意绘图部分的设计代码,还要注意通过输入流读取地图文件与图像文件部分的设计代码等等。23游戏流程图系统功能模块初始化模块绘图模块移动小人模块移动箱子模块功能控制模块图31系统功能模块本程序包括5个模块,分别是初始化模块、画图模块、移动箱子模块、移动小模块和功能控制模块,如图1所示。各个模块的功能描述如下(1)初始化模块。该模块包括屏幕初始化和游戏第一关的初始化。屏幕初始化用于输出欢迎信息和操(2)画图模块。该模块主要是被其它模块调用,用于画墙、在空地画箱子、在目的地画箱子、画小人和画目的地。(3)移动箱子模块。该模块用于移动箱子,包括目的地之间、空地之间和目的地与空地之间的箱子移动。(4)移动小人模块该模块用于控制小人移动,从而推动箱子到目的地。(5)功能控制模块。该模块是几个功能函数的集合,包括屏幕输出功能、指定位置状态判断功能和关卡重置功能。24函数模型1PUTOUTCHAR函数原型VOIDPUTOUTCHARINTY,INTX,CHARCH,CHARFC,CHARBCPUTOUTCHAR函数在屏幕上的指定位置输出指定的字符。其中,X、Y指明输出的位置,CH表示输出的字符,FC表示输出的字符颜色,BC表示背景色。2PRINTWALL函数原型VOIDPRINTWALLINTX,INTYPRINTWALL函数用于画墙壁,传入参数X、Y指明位置。该函数调用PUTOUTCHAR进行输出,以黑色为背景画绿色墙,用小方块表示墙(ASCII值为219)。3PRINTBOX函数原型VOIDPRINTBOXINTX,INTYPRINTBOX函数用于在非目的地画箱子,传入参数X、Y指明位置。该函数调用PUTOUTCHAR进行输出,以黑色为背景白色箱子,用ASCII值为10的字符表示箱子。4PRINTBOXDES函数原型VOIDPRINTBOXDESINTX,INTYPRINTBOXDES函数用于在目的地画箱子,传入参数X、Y指明位置。该函数调用PUTOUTCHAR进行输出,以黑色为背景画黄色箱子,仍用ASCII值为10的字符表示箱子。5PRINTDESTINATION函数原型VOIDPRINTDESTINATIONINTX,INTYPRINTDESTINATION函数用于画目的地,传入参数X、Y指明位置。该函数调用PUTOUTCHAR进行输出,以黑色为背景画黄色目的地,用心型表示(ASCII值为003)。6PRINTDESTINATION1函数原型VOIDPRINTDESTINATION1INTX,INTY,WINERWIN,WINERPWPRINTDESTINATION1函数与PRINTDESTINATION函数功能基本相同,都是画目的地函数,但是PRINTDESTINATION1增加了记录每一个目的地位置的功能。其中X、Y指明目的地的位置,每一关的所有目的地位置存放在结构体STRUCTWINER中,形成一条链表,WINER返回链表的头,PW则指向链表的尾部。7PRINTMAN函数原型VOIDPRINTMANINTX,INTYPRINTMAN函数用于画小人。X、Y指明画的位置。该函数通过软中断来实现,首先设置寄存器AX的高位和低位,设置高位0XA表示在光标位置显示字符;设置低位02ASCII值,表示输出的字符;然后设置寄存器CX为01,表示重复输出的次数,这里只输出一次;最后产生类型为0X10的中断,表示显示器输出。8INIT函数原型VOIDINITINIT函数用于初始化屏幕。该函数首先用两个FOR循环初始化屏幕2020范围内的状态,初始化为0,以后根据实际情况重新赋值;然后设置屏幕输出状态,设置寄存器AX的高位为0,低位为3,表示以8025的彩色方式显示;最后移动光标到指定的位置输出操作提示信息以及版权信息。9初始化游戏函数原型WINERINITSTEP1、WINERINITSTEP2、WINERINITSTEP3、WINERINITSTEP4这几个函数分别初始化游戏的第一关到第四关。这些函数的功能和实现步骤相似。首先根据需要在指定的位置画墙壁和画箱子,在这里可以设置游戏的难度,初始化的墙壁越复杂,箱子越多,则游戏就越难。游戏的第一关至第四关难度依次增加。然后分别调用PRINTDESTINATION1和PRINTMAN函数画目的地和小人。函数返回包含各个目的地位置的链表。10移动箱子函数原型VOIDMOVEBOXSPACETOSPACEINTX,INTY,CHARA、VOIDMOVEBOXDESTOSPACEINTX,INTY,CHARA、VOIDMOVEBOXSPACETODESINTX,INTY,CHARA、VOIDMOVEBOXDESTODESINTX,INTY,CHARA这几个函数实现的功能分别是人空地移动箱子到空地、从目的地移动箱子到空地、从空地移动箱子到目的地和中从目的地移动箱子到目的地。X、Y指明小人当前所处的位置,字符A表示移动的方向,有“U”、“D”、“L”和“R”4个值,分别表示向上、下、左、右移动。这几个函数的实现原理大致相似。对于前面两个函数,首先判断移动的方向,人小人所在的位置沿着移动的方向移动一步画小人,移动两步画箱子(调用PRINTBOX函数),并设置状态为“B”;对于后面两个参数,首先判断移动的方向,从小人所在的位置沿着移动方向移动一步画小人,移动两上在目的地画箱子(调用PRINTBOXDES函数),并设置状态为“I”,表明箱子在目的地上。11JUDGE函数原型INTJUDGEINTX,INTYJUDGE根据结构体STRUCTXY中存的值来判断该点的状态。12MOVE函数原型VOIDMOIDINTX,INTY,CHARAMOVE函数根据按下的键来处理小人的移动。小人移动的方向有上(“U”)、下(“D”)、左(“L”)、右“R”4个,4个方向的处理方式一样。首先判断移动的方向,然后根据小人的当前位置、下一步位置以及下下一步位置所在的状态进行处理。(1)若下一步所在位置的状态为墙壁(“W”),则直接退出,不作任何处理。(2)若下一步所在位置的状态为目的地(“I”)或者什么都没有(“0”),则若当前位置的状态为目的地,则在当前位置画目的地(调用PRINTDESTINATION函数)、在下一步位置画小人(调用PRINTMAN函数)。若当前位置的状态为非目的地,则输出空格清空当前位置的小人,并在下一步位置画小人(调用PRINTMAN函数)。(3)若下一步所在位置的状态为箱子(“B”),则如果下下一步位置的状态为“0”,则把箱子从空地移动到空地(调用MOVEBOXSPACETOSPACE函数),然后把光标移动到下一步位置(如果当前位置的状态为目的地,则应先画目的地(调用PRINTDESTINANION函数)。如果下下一步位置的状态为目的地,则把箱子从空地移动到目的地(调用MOVEBOXSPACETODES函数),然后把光标移动到下一步位置(如果当前位置的状态为目的地,则应先画目的地(调用PRINTDESTINATION函数)。其它情况则直接返回,不作任何处理。(4)若下一步所在位置的状态为箱子在目的地(“I”),则如果下下一步位置的状态为“0”,则把箱子从目的地移动到空地(调用MOVEBOXDESTOSPACE函数),然后把光标移动到下一步位置(如果当前位置的状态为目的地,则应先画目的地(调用PRINTDESTINATION函数)。如果下下一步位置的状态为目的地,则把箱子从目的地移动到目的地(调用MOVEBOXDESTODES函数),然后把光标移动到下一步位置(如果当前位置的状态为目的地,则应先画目的地(调用PRINTDESTINATION函数)。其它情况则直接返回,不作任何处理。13RESET函数原型VOIDRESETINTIRESET函数的功能是重置当前关。该函数首先判断当前关是第几关,然后调用INIT函数和初始化当前关的函数进行重置。14主函数主函数首先设置寄存器AX的高位和低位,显示器软中断,进行显示状态的设置,初始化屏幕,初始化第一关,并显示操作提示信息和版权信息。然后根据按下的键(BIOSKEY0函数返回按下的键值)进行处理,处理过程由MOVE函数进行(如果按下ESC键,则退出程序)。对于每一关,如果所有的表示目的地的状态都由“M”变成了“I”,则表示通过该关,可以进入下一关。3详细设计31游戏总体结构与代码推箱子的小游戏界面如图31所示图31小游戏界面(1)界面框架与按钮设计本游戏界面简单清晰,操作界面优美,有很强的带入性,游戏操作模块分为“悔一步”,“重来”,“上一关”,“下一关”,“第1关”,“最终关”,“选关”“音乐关”并且各个按钮的名称与相关功能为“悔一步”返回上一移动状态(可以连续返回多步);“重来”重新开始当前关;“上一关”返回到当前关的上一关;“下一关”跳转到当前关的下一关;“第1关”游戏系统默认开始关为第一关,此按钮让玩家可以方便从其它关卡直接跳转到第一关;“最终关”可以跳转到最后一关,即游戏系统默认的最后一个关。MAINFRAMESUPER“推箱子V20“SETSIZE720,720SETVISIBLETRUESETRESIZABLEFALSESETLOCATION300,20SETDEFAULTCLOSEOPERATIONJFRAMEEXIT_ON_CLOSECONTAINERCONTGETCONTENTPANECONTSETLAYOUTNULLCONTSETBACKGROUNDCOLORBLACKMENUCHOICENEWMENU“选项“CHOICEADDRENEWCHOICEADDLASTCHOICEADDNEXTCHOICEADDCHOOSECHOICEADDBACKCHOICEADDSEPARATORCHOICEADDEXITRENEWADDACTIONLISTENERTHISLASTADDACTIONLISTENERTHISNEXTADDACTIONLISTENERTHISCHOOSEADDACTIONLISTENERTHISEXITADDACTIONLISTENERTHISBACKADDACTIONLISTENERTHISMENUSETMUCNEWMENU“设置音乐“SETMUCADDNORSETMUCADDQINSETMUCADDPOSETMUCADDGUANGSETMUCADDEYENORADDACTIONLISTENERTHISQINADDACTIONLISTENERTHISPOADDACTIONLISTENERTHISGUANGADDACTIONLISTENERTHISEYEADDACTIONLISTENERTHISMENUHELPNEWMENU“帮助“HELPADDABOUTABOUTADDACTIONLISTENERTHISMENUBARBARNEWMENUBARBARADDCHOICEBARADDSETMUCBARADDHELPSETMENUBARBAR32选关模块“选关”选择想要挑战的关卡。当游戏玩家想要自主选择关卡时,可以随意输入想要跳入的关卡,节约了时间,玩家同过选择的关卡可以有效地挑战自我,连接上次的游戏进度。其中,这个部分的部分代码为VOIDTUIXIANGZIINTILEVELMAPNEWREADMAPILEVELMAPTMPNEWREADMAPIMAPLEVELMAPGETMAPMANXLEVELMAPGETMANXMANYLEVELMAPGETMANYMAPTMPLEVELMAPTMPGETMAPREPAINTINTMAXLEVELRETURNMAXPUBLICVOIDPAINTGRAPHICSGFORINTI0I20IFORINTJ0J20JGDRAWIMAGEMYIMAGEMAPJI,ILEN,JLEN,THISGSETCOLORNEWCOLOR0,0,0GSETFONTNEWFONT“楷体_2312“,FONTBOLD,30GDRAWSTRING“现在是第“,150,40GDRAWSTRINGSTRINGVALUEOFLEVEL,310,40GDRAWSTRING“关“,360,40推箱子选关模式如图32所示图32选关33地图的绘制形成地图以二维数组的形式进行存储,不同的数家代表了不同的含义。在本小游戏的地图文件中,09这十个数字的定义如下所示编号0代表未定义的区域;编号1代表障碍物(或者边界);编号2代表草地;编号3代表箱子(未到指定位置);编号4代表目的地;编号5代表小人向下移动方向;编号6代表小人向左移动方向;编号7代表小人向右移动方向;编号8代表小人向上移动方向;编号9代表到达指定位置时的箱子。例如下图33所示(左边是二维数组的地图文件,右边是相对应的小游戏界面)图33地图文件与相应界面推箱子小游戏的游戏性,其主要功能是给用户一个良好的游戏界面,游戏中包括50关的地图文件。地图文件是是先写好的,所有界面信息以数的形式存放在一个2020的二维数组当中并且把这些地图文件统一放在一个地图文件中,便于程序调用地图文件。然后,每一关就会按照这些数组数据重新绘制地图,从而达到小游戏的可用性及其相应的目的。推箱子地图文件如图34所示图34地图文件34小人与箱子移动的算法小人与箱子的移动中包括了正移动以及“悔一步”的负移动。正移动小人向上、下、左、右的移动是一个判断算法,其判断都是通过判断小人前面是否是草地或者是箱子亦或者是障碍物(或者边界)。如果是障碍物或者是边界,就不能够进行移动;如果是没有箱子或者是障碍物,就可以自由移动;又如果是有箱子,就要判断是否可以移动箱子,最后再讨论箱子被推过的位置,小人移动的位置,以及它们的原位置和被遮挡住的新位置的图形变化等等,需要运用算法使其重新绘制地图,填补空白。算法判断完毕后,传出数据并且将其记录在一个堆栈中,以备“悔一步”时使用。负移动通过记录在堆栈中的数据来判断,前一步小人的移动方向以及移动中使用过的算法,逆向将代码重新运行,同时绘制并刷新地图以达到前一步的状态。其中,这个部分的部分代码为VOIDMOVEUPIFMAPMANY1MANX2|MAPMANY1MANX4IFMAPTMPMANYMANX4|MAPTMPMANYMANX9MAPMANYMANX4ELSEMAPMANYMANX2MAPMANY1MANX8REPAINTMANYMYSTACKPUSH10ELSEIFMAPMANY1MANX3IFMAPMANY2MANX4IFMAPTMPMANYMANX4|MAPTMPMANYMANX9MAPMANYMANX4ELSEMAPMANYMANX2MAPMANY1MANX8MAPMANY2MANX9REPAINTMANYMYSTACKPUSH11ELSEIFMAPMANY2MANX2IFMAPTMPMANYMANX4|MAPTMPMANYMANX9MAPMANYMANX4ELSEMAPMANYMANX2MAPMANY1MANX8MAPMAN

温馨提示

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

评论

0/150

提交评论