




已阅读5页,还剩48页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于JAVA的超级玛丽设计与实现摘要随着计算机技术及网络技术的不断发展,电子游戏越来越普及。经典游戏“超级玛丽”因其本身所具有的娱乐性与教育意义而被人们广泛接受,在广大的青少年玩家中享有极高的知名度。JAVA语言作为一种完全面向对象的程序设计语言,在游戏设计方面具有独特优势。JAVA语言由C语言发展而来,但比C语言简单。它具有简单、与平台无关、高效、安全、多线程等特点,在游戏设计开发方面得到广泛应用。本课题在大学生自主创业的大背景下,利用JAVA语言重新设计开发了“超级玛丽”游戏,基本实现了旧版游戏的所有功能。目前该版本游戏已经发布在学校的公共论坛上,已被许多同学下载并试玩,反响较好,但是仍暴露了一些问题,如人物形象设计过于单调等,这些问题的优化将会在下一个版本中得到实现。本文在对整个游戏的各种需求及可行性分析的基础上,详细论述了游戏的设计过程与实现方案。论文包括绪论、相关技术研究、可行性分析、系统设计与实现以及结论等部分内容。关键词JAVA;超级玛丽;CDESIGNANDIMPLEMENTATIONOFAJAVABASEDSUPERMARIOGAMEABSTRACTWITHTHEDEVELOPMENTOFCOMPUTERANDNETWORKTECHNOLOGY,VIDEOGAMESHAVEBECOMEMOREANDMOREPOPULARSUPERMARIOASACLASSICALGAME,WHICHENJOYSHIGHPOPULARITYINTHEMAJORITYOFJUVENILEGAMEPLAYERSWASWIDELYACCEPTEDDUETOITSENTERTAINMENTANDEDUCATIONALSIGNIFICANCEJAVALANGUAGEASAPROGRAMMINGLANGUAGETHATISCOMPLETELYOBJECTORIENTED,HASANUNIQUEADVANTAGEINGAMEDESIGNJAVALANGUAGEDEVELOPEDFROMCLANGUAGEISMUCHMORESIMPLETHANCLANGUAGEITSADVANTAGESSUCHASSIMPLICITY,PLATFORMINDEPENDENCE,EFFICIENCY,SECURITYANDMULTITHREADINGETC,HASBEENWIDELYUSEDINTHEASPECTSOFGAMEDESIGNTHISTOPICWHICHISINTHECONTEXTOFCOLLEGESTUDENTSENTREPRENEURSHIP,USEJAVALANGUAGETODESIGNANDDEVELOPTHE“SUPERMARIO“GAMEAGAINTHATBASICALLYACHIEVETHEFEATURESOFTHEOLDVERSIONOFTHEGAMETHECURRENTVERSIONOFTHEGAMEBEINGRELEASEDINTHESCHOOLPUBLICFORUMHAVEBEENDOWNLOADEDANDPLAYEDBYMANYSTUDENTSALTHOUGHTHEEVALUATIONOFTHEGAMEWASGOOD,THEREARESTILLSOMEPROBLEMS,SUCHASTHECHARACTERIMAGEISTOOMONOTONOUSOPTIMIZATIONOFALLTHESEPROBLEMSWILLBEIMPLEMENTEDINTHENEXTVERSIONBASEDONTHEDEMANDANDFEASIBILITYANALYSISOFTHEWHOLEGAME,THEGAMEDESIGNPROCESSANDIMPLEMENTATIONPLANWEREDISCUSSEDINDETAILTHETHESISINCLUDESINTRODUCTION,RELATEDTECHNOLOGYRESEARCH,FEASIBILITYANALYSIS,SYSTEMDESIGNANDIMPLEMENTATIONASWELLASTHECONCLUSIONPARTKEYWORDSJAVASUPERMARIOC目录摘要IABSTRACTII1绪论111课题研究背景112课题研究意义113课题研究内容22可行性分析321经济可行性分析322技术可行性分析323系统性能需求分析33相关技术研究531开发工具及环境5311JAVA语言5312ECLIPSE环境632面向对象程序设计633C/S结构与B/S结构64系统设计与实现741开发工作742游戏素材管理743游戏场景布置844游戏用例图845游戏状态图946游戏时序图947游戏类图10471游戏总体类图10472MARIO图类11473ENEMY类图13474OBSTRUCTION类图14475BACKGROUND类15476STATICVALUE类图16477MYFRAME类图1748游戏功能与代码实现18481游戏功能18482代码实现185游戏运行截图及程序说明25结论30参考文献31致谢32外文原文331绪论11课题研究背景超级玛丽全名为超级马里奥兄弟,是由任天堂公司出品的著名横版过关游戏。1981年,任天堂员工宫本茂设计的意大利水管工形象在游戏大金刚中初次亮相,随后在全世界广泛流行,之后陆续推出的数十款游戏累计总销量超过了一亿七千万份,超级玛丽成为了任天堂公司的招牌人物并为任天堂创造了高达70亿美圆的巨额商业利润。目前,超级玛丽形象已深入人心,其知名度与商业价值可与美国迪士尼的米老鼠相媲美,为全世界的青少年玩家们带来了无限的欢乐与梦想。自2010年5月国家教育部成功召开“全国推进高等学校创新创业教育和大学生自主创业工作”视频会议1,大学生自主创业得到广泛支持与推广,为响应国家政策,大学生应积极利用所学来自主创业,基于经典游戏“超极玛丽”本身具有的巨大影响力和商业价值,以自主创业,锻炼能力为目的,利用JAVA语言重新设计编写“超级玛丽”,并将游戏推广,在为广大青少年游戏爱好者带来欢乐的同时,减轻家庭的负担,实现自己的创业梦想。12课题研究意义随着电脑和手机的普及,超级玛丽游戏被世界广大的青少年游戏玩家所接受,游戏人物本身的教育作用,益智作用和商业价值得到推广。超级玛丽游戏人物的不畏艰险,百折不挠的奋斗精神不断鼓舞着每一代的游戏玩家,充分发挥了电子游戏积极有益的一面,从正面去引导儿童和青少年对人生的态度,同时,也逐渐改变家长对游戏的片面看法,为电子游戏的发展起到推动作用;据日本新闻网报道,德国马克斯普朗克进化人类研究所发布的一项研究报告称,超级玛丽游戏可以促使人类大脑的某些部位更为发达。这一研究成果可能对今后的阿尔兹海默氏症,脑部某些部位萎缩等精神症状的治疗有所帮助;马里奥的金字招牌帮助任天堂连续五年蝉联日本年末圣诞商战冠军的宝座,充分证明其具有的左右业界局势的市场号召力2,除了游戏本身具有很好的教育意义外,利用JAVA设计研发“超级玛丽”的过程也具有重大的意义。总的概括有如下三点(1)在个人知识拓展方面。通过参与本次课题的设计,进一步巩固所学的JAVA语言编程技术。通过软件的开发,我巩固了JAVA语言等相关专业知识,并且设计过程中查阅大量的资料,进一步丰富了自己的知识,拓展了自己的视野。通过软件的调试,初步掌握了部分调试的方法,并且调试能够按照软件工程的要求进行规范化测试。(2)在个人能力提升方面。实践出真知,针对自己以往学习往往只注重书本理论知识而忽视了动手实践的诟病,希望通过参与该课题,能够提高自己的程序设计水平、编程水平和动手调试水平,成功完成将个人知识升华为能力的过程。(3)在课题借鉴意义方面。利用JAVA语言重新设计编写经典游戏“超级玛丽”,可以研究与探讨游戏开发过程中主要技术问题,并且增加人们对JAVA技术在桌游戏开发方面的认识,同时也对其他经典游戏的重新编写设计具有重要的借鉴意义。13课题研究内容分析研究了JAVA语言的特点及其实用性,并对游戏编写进行了可行性分析,确定了其市场需求性,在此基础上,重新设计开发了超级玛丽游戏,阐述了游戏的总体设计、详细设计以及相关的关键技术,并对课题进行总结,得出相应结论和对今后的研究方向的展望。论文的结构如下第一章介绍本课题的研究背景、研究意义,以及本文主要内容和结构安排;第二章针对课题的实际情况,对设计开发过程中所用的相关技术做了大致的介绍;第三章在现有技术和条件的前提下,对课题开展的可行性分析并得出相关结论;第四章详细地分析了系统具体的实现过程,包括开发工作、游戏素材管理、游戏场景布置、游戏用例图、游戏状态图、游戏时序图以及游戏类图;第五章将新设计开发的JAVA版本超级玛丽运行测试,检查游戏设计是否完善,并在运行过程中截图做相应的程序说明;结论总结本文所做工作,并对后续的工作和研究方向做了展望。2可行性分析21经济可行性分析目前市场上基于JAVA的超级玛丽游戏相对较少,因此,相对市场竞争就相对小得多。设计开发整个游戏所需支出部分为寝室的电力消耗和设计人员的时间,完全可以承受。试营业单位可以优先选择学校的论坛或者公共主页对其进行宣传试用并可获得相应的修改意见,线上的宣传和后期的调整调整工作完全可以个人独立完成,极大地节约了经济费用。低成本、高效率、响应时间短将会成为本游戏立足于长期发展的支柱,很快会实现盈利的状态。此外,还可以借助其他的营销模式开展以此游戏为基础的一系列的营销活动,将其做大做好。综上所述,此次设计研发的JAVA超级玛丽具有市场前景好,成本低,收益快的优势,在经济上是可行的。22技术可行性分析重新设计的JAVA版本的超级玛丽可以完成基本的前进、后退、跳跃、顶金币、吃蘑菇并变大,发子弹打怪物等功能。所建议的系统是基于ANDROID手机系统的平台,结合JAVA技术而建立的信息搜索平台4。图形的处理更加逼真,马里奥主人公的形象有大的改观,游戏的关卡会更加复杂;掌上操作,随处都可以玩,有利于提高系统的效率;能实现数据交互,能够给广大游戏爱好者带来较多便利,打发无聊的时间。ECLIPSE作为JAVA程序的开发工具,是一个开源软件,插件比较多,大多数企业用它来做开发,是目前最流行的JAVA开发工具。它集成有比较多而且比较容易使用的类,在新建类的时候也方便继承其他类22。而且ECLIPSE具有极为高效的GUI、先进的代码编辑器等,其项目包括许多各种各样的子项目组,包括ECLIPSE插件、功能部件等。任何人都能够轻易的将自己的软件做成ECLIPSE的插件,而且这些插件只需简单的复制到ECLIPSE的插件文件夹下就可以被集成。主要采用SWING界面库,支持多种本机界面风格。另外很重要的一点是,ECLIPSE具有多种数据库支持23,24。23系统性能需求分析一个系统的好坏与它的性能直接相关,对一个系统进行性能需求分析是在系统设计中是必不可少的一个阶段。所谓系统性能需求分析就是对系统需求中的各项性能指标进行分析,分析每项性能指标是否达到系统的要求,以提供一个稳定的,可靠的实用系统。对于基于JAVA的超级玛丽游戏来说,需要对系统的以下性能进行分析(1)实用性系统操作要求简单,界面友好,用户不需要经过培训或者只需要经过简单的培训即可熟练地使用。(2)美观性系统的开始界面以及运行中的界面需要美观,避免人物及背景颜色和样式的设计过于单调而无法对游戏玩家产生足够的吸引力。此外游戏中人物变化时的过度效果要好,对比性要强。(3)故障率游戏运行时发生故障的频率要低,而且这些故障都必须能够及时进行修复,此外游戏进度的存储不可丢失,尽量避免因游戏故障率带来游戏玩家的差评。(4)可维护性系统能够定期地对数据进行备份,当发生故障时,可以从另外的服务器中将数据进行恢复。(5)可扩展性当系统需求发生改变时,如增加新的功能,在对系统功能模块扩展时,不会影响客户端的使用。(6)响应时间系统在加载和运行时需要及时地做出响应,不能延迟太久,较短的响应时间将对游戏的推广带来极大的效率,在等待的时候也需要有进度提示。3相关技术研究31开发工具及环境311JAVA语言JAVA是一种跨平台的程序设计语言,它属于面向对象型的,它由SUN公司于1995年推出3,4,5,6,7,被美国著名杂志评为1995年十大优秀科技产品,这是因为,传统的软件往往与具体的实现环境相关,一旦环境改变就需要对软件进行一番改动,而JAVA编写的软件能在执行码上兼容,这样,只要计算机提供了JAVA解释器,用JAVA编写的软件就能在其上运行。JAVA包括三个版本J2SE、J2ME和J2EE,分别面向普通用户,移动用户和企业用户。JAVA语言具有如下众多的优点简单性这是JAVA的显著特点。编程简单是每位应用开发者所希望的。JAVA很接近C,但它摒弃了C很多难用和几乎不用的功能。JAVA不支持运算符重载、多态继承及广泛自动强制等功能,而增加了内存空间自动收集即自动分配和释放内存空间功能。此外,JAVA很小,它的基本解释类支持部分只占40K字节,附加的基本标准库和线程也只需175K字节,所以应用软件可以在相当小的系统上独立工作8,9。分布性JAVA是专为网络设计的。为了支持INTERNET中的TCP/IP协议和FTP协议等,JAVA提供了附加的例程。JAVA应用程序能自由地打开和访问网络上的对象,就象这些对象在本地的文件系统中一样9,10。高安全性JAVA的安全机制分为好几层。JAVA编译器保证源代码不能违反安全性原则,JAVA字节代码在运行前要经过一个确认过程;加载器保证从网络或文件系统被加载的软件不违反名字空间和访问限制。HOTJAVA浏览器提供一种安全对话机制,可为JAVA应用程序的下载提供配置策略,如让用户声明一道防火墙,进行文件保护和网络安全检查等。通常用户从INTERNET上下载文件时,要冒感染病毒的风险。文件的源发站无法提供保护,因为病毒是被外人注入的,在编译好的代码中难以探测。JAVA的APPLET不会被写入用户的硬盘,也不会访问用户的文件或随意查看内存,它也不会加入到用户的C或C程序中,也不访问别的JAVAAPPLET,从而减少病毒感染的机会11。根据字节代码从网上何处来的信息,还可以判断它是来自防火墙内还是防火墙外。JAVA还具有公开密钥技术,所以它可用于银行或其它需要高安全性的地方9,12。解释性JAVA是一个解释性语言。连接过程非常简单,所以便于开发APPLET或者JAVA应用程序。多线程多线程程序设计比较复杂,线程间的同步需仔细考虑。由于JAVA有一套同步原语,它采用监视规则和指示灯规则,对多线程的设计者有很好的支持。由于JAVA应用可以是多线程的,故具有良好的交互性和实时性9。结构无关性JAVA字节代码是一种中间码,可以在任何机器上解释运行。目前,在个人计算机市场上,应用软件商要为不同的计算机开发同一软件的不同版本。而JAVA软件可运行于不同的平台,因此一个JAVA应用软件只要一个版本就可以了。所以JAVA应用软件具有很好的可移植性13,14。另外JAVA没有C那样的版本不匹配问题,如操作系统的版本升级了,应用软件也要更新。但它也有它的缺点,就是执行效率不如其他本地语言,如C/C等,但随着硬件的迅速发展,这些差别也变得越来越不明显了15,16,17。312ECLIPSE环境ECLIPSE是开发JAVA程序最为常用的开发环境,首先它也是跨平台,因为它本身就是使用JAVA语言开发的13。由于ECLIPSE支持许许多多的插件,因此它功能很强大,智能度很高,能对代码的错误及时准确判断并给予提示。虽然ECLIPSE是采用JAVA语言开发的,但它作为开发环境不仅限于JAVA,目前还能支持C/C等语言18。ECLIPSE是开源程序,除了ECLIPSE之外,还有它的商业版本MYECLIPSE,其主要用于企业软件的开发,如JAVAWEB的开发19。32面向对象程序设计面向对象程序设计(OBJECTORIENTEDPROGRAMMING,OPP)20是计算机编程的一种架构。面向对象程序设计基本原则是程序是由一个或多个对象组成的。面向对象程序设计实现了软件工程三个基本目标,即重用性、灵活性和可扩展性21。由于面向对象的架构近似于人类思想,因此面向对象程序设计是目前绝大多数应用程序所采用的编程思想,其中JAVA语言就是面向对象的程序设计语言。33C/S结构与B/S结构C/S(CLIENT/SEVER)结构即客户机/服务器结构。它是软件体系结构,通过它可以充分发挥客户端和服务器两端硬件环境的优势,以降低系统的开销。目前绝大多数应用软件都是采用C/S结构,如我们常用的QQ聊天工具,也是采用这种结构。客户机和服务器常常分别位于距离较远的两台计算机上,客户机程序的任务是将用户的请求提交给服务器程序,服务器程序通过处理客户机的请求并向客户机反馈请求的结果,客户机再把结果以特定的形式显示给用户16,17。B/S(BROWSER/SERVER)结构即浏览器/服务器结构。在基于B/S的远程监控系统中,最关键的就是生产设备、服务器、客户之间数据的交互,系统只传送与用户的要求有关的数据更新,传输延迟需要被控制在最多数秒钟之内。该系统结构适应了工业在网络化中的要求,正被广泛应用起来16。4系统设计与实现41开发工作JAVA版超级玛丽游戏的开发主要分为整理游戏图片素材以及游戏代码编写两部分(1)游戏图片素材整理包括对游戏中所有需要出现的游戏元素的对应图片进行整理,为了实现主要游戏功能,我们仅剪取有关超级玛丽奥,蘑菇怪和食人花等游戏怪物的动作图片,以及游戏场景中的各种砖块和水管的贴图,以及每一关卡的背景图片,将这些图片统一放到程序源文件夹下,并在程序中指明存放路径,方便程序在初始化和运行过程中随时载入和绘制这些图像,为玩家展现出超级玛丽的游戏界面。(2)游戏代码编写工作的主要任务是在建立对超级马里奥游戏的游戏流程的认识基础上,先实现有关游戏中各游戏要素对游戏事件的相应办法后,初步实现游戏数据模型已经对应的游戏数据处理模块、游戏资源加载方法等程序代码模块,最后整合到游戏主题框架中由负责展现游戏界面的控制类进行管理使这些模块协调运作。42游戏素材管理游戏素材管理的工作主要包括游戏界面和角色动画图像的管理。游戏中出现的所有图片文件将统一放入一个负责管理程序静态资源的类文件进行存储,以方便随时调用。在本游戏中,存放各种游戏图像的静态类是STATICVALUE,这个类中包含了许多BUFFEREDIMAGE类的图片对象,之所以选择用BUFFEREDIMAGE对象来保存图像是因为这个文件操作类对象支持对许多格式的图片的读取和存储,在读入外部图像资源时只用简单调用IMAGEIOREADNEWFILE“XXX”的方法就可以完成将图像进行序列化存入到BUFFEREDIMAGE对象中,并可以将该对象作为参数传入到程序执行时调用的其他方法中进行处理后绘制到游戏窗口的画布上。在STATICVALUE类中,我们选择用BUFFEREDIMAGE类型的LIST来保存有关MARIO,蘑菇怪和食人花等游戏角色和游戏物品的不同状态下的游戏贴图,当游戏运行过程游戏角色的状态发生变化时需要重新绘制时,可以通过获取角色所属的LIST对象中该角色的目标对象的BUFFEREDIMAGE实例中的信息,实现对游戏角色的及时重绘,保证了游戏的连贯性。这种做法类似其他游戏项目中对主要固定游戏元素进行保存和记录的配置文件CONFIG或者XML文件,即实现一个文件部署描述符的作用,因为往往游戏在开发过程中,有很多还未出现的游戏元素,往往游戏的开发者不能预知到这些情况。因此实现一个存放游戏元素的特征表来布置已知和将要添加的游戏元素的主要信息,这种文件部署描述符有标准的格式,在开发和部署环境中可供移植的,静态数据文件表除了为游戏开发和部署的协同提供一个标准的属性单外,也影响到游戏执行过程中有关游戏事务和状态的正确性原则。因此,一个好的游戏文件部署描述符型文件对游戏的设计是至关重要的。43游戏场景布置游戏的场景设置需要考虑到游戏中存在的各种游戏元素的起始位置的设定,也包含对各种游戏元素种类的筛选,要做到游戏的可玩性和公平性,需要考虑到游戏中导致游戏失败和胜利的比率,更要考虑是否存在某些设置不合理的游戏元素可能导致玩家在游戏过程中遇到各种可能出现的BUG,因此在确定好游戏人物在不同场景中触发各种和游戏角色和游戏物品的接触事件时的响应方法和状态变动结果之后,要对游戏场景进行合理的规划,本游戏中为了实现基本的游戏功能,对场景的设置尽量简单。因此仅加入砖块和问号砖等游戏道具,以及食人花和蘑菇怪等游戏人物。具体实现的代码在专门负责游戏背景内容的类BACKGROUND中进行添加,诸如游戏道具对象集合ALLOBSTRUCTIONLIST为例,先初始化该对象PRIVATELISTALLOBSTRUCTIONNEWARRAYLIST随后根据要添加的道具对象的种类,出现位置等信息,向该集合中加入道具元素THISALLOBSTRUCTIONADDNEWOBSTRUCTION120,360,4,THIS/在点(120,360)处加入问号砖石这样根据已向道具集合中加入的道具对象信息,在初始化游戏程序的时候新建BACKGROUND类对象实例,将BACKGROUND类对象中的ALLOBSTRUCTIONLIST中存放的对象信息对应的实际显示图片加载到程序显示界面上,完成游戏场景的绘制工作。44游戏用例图用例图作为UML建模图的最关键的一种图,其作用在于描述游戏的主要功能需求;其他所有的视图都是从用例视图派生而来,因此对于阐述游戏功能需求而言用例图的存在是不可替代的。该游戏的总体用例图如下图41所示顶层包游戏主角开始游戏游戏胜利游戏结束设置游戏背景设置游戏人物设置游戏元素图41游戏用例图该游戏的结构简单,通过点击空格键开始游戏,当完成游戏关于游戏胜利的判定条件(即通过所有障碍或者击败所有敌人),游戏胜利。如果当游戏主角的生命值为0并且还未达到游戏胜利条件,则游戏失败。玩家选择退出游戏或者重新开始游戏。45游戏状态图在游戏的运行过程中,为了捕获其在所经历的各种状态中的表现,需要使用状态图来对执行过程加以说明。状态图主要描述的是对象的状态及状态之间的转移,如要显示一个对象在其生命周期内的行为时,需要画出该对象经历的状态汇总图。要涉及到的UML元素主要有动作状态、活动状态、动作流以及对象流等,可以用来表示动作使用对象或者动作对对象的影响。该游戏的状态图如下图42所示游戏开始游戏继续翻越障碍翻越障碍游戏重置被杀掉陷阱杀死敌人杀死敌人被杀生命1掉陷阱生命1生命数0敌人数0|障碍数0游戏通关游戏结束掉陷阱被杀翻越障碍杀死敌人图42游戏状态图通过对游戏的状态图分析可以更加准确地捕捉到游戏运行过程中每个环节发生的动作,首先从游戏开始时,游戏人物或者翻越障碍或者杀死敌人,才能保证游戏继续,在之后的过程中,如果出现MARIO被敌人杀死或者自己掉入陷阱的情况时,游戏将进行重置,将当前的游戏布景还原到最近的一次存档。同时游戏继续,若当前场景中已经不存在没有跨越过的障碍物或者游戏敌人时,游戏判定玩家获胜,游戏通关。否则若MARIO的生命数到达0时,玩家已经失去继续游戏的机会,游戏判定玩家失败,游戏结束。上图中的每个发生的动作都有对应的后继状态,当满足监护条件时,程序的动作事件流指向最终的活动状态,即游戏通关或者游戏结束,并最终进入终止状态。46游戏时序图通过分析游戏的用例需求和经历状态之外,了解有关游戏的生命周期和消息顺序也是作为游戏开发的一项关键指标。而对游戏执行的时序分析则需要借助顺序图来作为辅助工具。顺序图是强调游戏中发生传递消息时间顺序的交互图。主要用于游戏用例的逻辑建模,描述游戏用例实现。顺序图将交互关系表示为一个二维图,由时间轴和写作中各独立对象组成。本游戏的时序图如下图43所示ENEMYMARIOOBSTRUCTIONBACKGROUNDGETALLENEMYGETALLENEMYSETALLOBSTRUCTIONSETALLOBSTRUCTIONALLOBSTRUCTIONGETREMOVEDENEMYGETREMOVEDENEMYGETREMOVEDOBSTRUCTIONGETREMOVEDOBSTRUCTIONDEADDEADSTARTMOVESTARTMOVESETTYPESETTYPEGETSORTGETSORTSETOVERSETOVERISOVER图43游戏时序图根据上图中关于MARIO,敌人ENEMY,游戏障碍OBSTRUCTION和游戏背景BACKGROUND四个独立对象的消息传递分析,可以大致得到如下的理解1)游戏开始后,BACKGROUND向ENEMY发出命令,允许ENEMY实例对象开始进行移动,同时ENEMY返回一个对象集合,将所有处于游戏场景中的ENEMY信息传递给BACKGROUND。2)当MARIO踩死后,将已被MARIO杀死的敌人加入清除敌人集合ALLREMOVEDENEMY中,并返回给BACKGROUND对象。3)在游戏开始环节中,将游戏中的所有游戏障碍物集合ALLOBSTRUCTION进行设置并初始化,并返回给BACKGROUND,当MARIO对游戏障碍物进行破坏或者翻越之后,障碍物的所属种类会发生改变,则将已发生改变的障碍物加入到清除障碍物的集合ALLREMOVEDOBSTRUCTION中,并返回给BACKGROUND对象。4)当MARIO被杀死时,通过调用SETOVER,告知BACKGROUND对象游戏状态ISOVER为TRUE,游戏终止。47游戏类图471游戏总体类图游戏的类和结构可以看做是游戏的主体构架,对游戏的类的结构和类和类之间的关系需要借助类图进行分析和研究。通过对类图和代码之间的映射关系,我们可以清楚地看到游戏组织结构上的层次关系,因此,将类之间的关系组织成类图,是我们下面要进行的具体工作。游戏的总体类图如下图44所示MARIOMARIOMARIOOBSTRUCTIONMARIOENEMYMARIOMYFRAMEMARIOSTATICVALUEMARIOBACKGROUNDRUNNABLEKEYLISTENER1111111顶层包BUFFEREDIMAGE111111图44游戏总体类图游戏中主要涉及的类有以上六个,MARIO类、ENEMY类、OBSTRUCTION类、BACKGROUND类、MYFRAME类和STATICVALUE类。其中MARIO类、ENEMY类、OBSTRUCTION类和MYFRAME类实现了RUNNABLE接口,并在类的内部复写RUN方法用于执行对应所需的线程方法。MYFRAME类同时实现了KEYLISTENER接口包含的有关按键事件监听的方法KEYPRESSD、KEYRELEASED和KEYTYPED,并继承于JFRAME类,负责绘制游戏界面。根据上图中所示,MARIO类和OBSTRUCTION类以及ENEMY类和STATICVALUE中都包含BUFFEREDIMAGE类型的对象或者集合对象,存在一对一或一对多关联关系,具体的有关情况将在后续的每个类的细节类图中得以说明。以上的类图仅展示游戏的总体类图,描述类与类之间的关系和总体结构。472MARIO图类MARIO类是有关游戏人物MARIO的有关信息和相关操作的类,其对应的属性和方法如下图45所示MARIOINXINT,INYINTDEADVOIDDOWNVOIDGETLIFEINTGETSCOREINTGETSHOWIMAGEBUFFEREDIMAGEGETXINTGETYINTISCLEARBOOLISDEADBOOLJUMPVOIDLEFTMOVEVOIDLEFTSTOPVOIDRIGHTMOVEVOIDRIGHTSTOPVOIDRUNVOIDSETBGINBGBACKGROUNDVOIDSETLIFEINLIFEINTVOIDSETSCOREINSCOREINTVOIDSETXINXINTVOIDSETYINYINTVOIDBGBACKGROUNDISCLEARBOOLISDEADBOOLLIFEINTMOVINGINTSCOREINTSHOWIMAGEBUFFEREDIMAGESTATUSSTRINGTTHREADUPTIMEINTXINTXMOVEINTYINTYMOVEINTMARIOMARIO图45游戏MARIO类图1MARIO类的主要属性如下BG当前游戏背景,BACKGROUND类型对象ISCLEAR判断MARIO当前是否通关ISDEAD判断MARIO是否死亡LIFEMARIO的生命值MOVINGMARIO的移动长度SCOREMARIO获得的得分SHOWIMAGEMARIO当前应该对应的显示图片STATUSMARIO当前对应的状态T类中启动的一个线程对象UPTIMEMARIO可以上升的次数XMARIO当前的横坐标XMOVEMARIO横向移动的长度YMARIO当前的纵坐标YMOVEMARIO纵向移动的长度2MARIO类的主要方法如下MARIOINTX,INTY构造方法,包含MARIO的初始坐标DEAD处理MARIO死亡后的数据更新操作DOWNMARIO下落时候状态管理方法GETLIFE获得MARIO当前生命GETSCORE获得MARIO得分情况GETSHOWIMAGE获得MARIO当前对应的显示图片GETX获得MARIO的横坐标GETY获得MARIO的纵坐标ISCLEAR当前关卡是否已经通过ISDEAD判断MARIO是否死亡JUMP负责MARIO跳跃的方法LEFTMOVE负责MARIO向左移动LEFTSTOP负责MARIO向左移动后停止RIGHTMOVE负责MARIO向右移动RIGHTSTOP负责MARIO向右移动后停止RUNRUNNABLE中的方法,线程执行主要方法SETBGBACKGROUND设置游戏背景SETLIFEINT设置MARIO生命数SETSCOREINT设置MARIO得分情况SETXINT设置MARIO所处横坐标SETYINT设置MARIO所处纵坐标473ENEMY类图ENEMY类主要负责管理游戏敌人角色有关信息和相关操作的类,其属性和方法如下图46所示GETXINTGETYINTGETSHOWIMAGEBUFFEREDIMAGERESETVOIDSTARTMOVEVOIDDEADVOIDSETBGBACKGROUNDENEMYINXINT,INYINT,INISLEFTBOOL,INTYPEINT,INBGBACKGROUNDENEMYINXINT,INYINT,INISUPBOOL,INTYPEINT,INBGBACKGROUND,INUPMAXINT,INDOWNMAXINTXINTYINTSTARTXINTSTARTYINTTYPEINTSHOWIMAGEBUFFEREDIMAGEISLEFTORUPBOOLUPMAXINTDOWNMAXINTTTHREADIMAGETYPEINTBGBACKGROUNDMARIOENEMY图46游戏ENEMY类图1ENEMY类的主要属性如下X敌人的横坐标Y敌人的纵坐标STARTX敌人的起始点的横坐标STARTY敌人的起始点的纵坐标TYPE敌人的种类(1是蘑菇怪或乌龟,2是食人花)SHOWIMAGE敌人的显示图像ISLEFTORUP敌人是否左移或者上移,蘑菇怪左移,食人花上移UPMAX食人花最大上升高度DOWNMAX食人花最大下降高度T类中的线程对象IMAGETYPE图像类型BG当前游戏背景2ENEMY类的主要方法如下ENEMYINT,INT,BOOLEAN,INT,BACKGROUND蘑菇怪敌人的构造方法ENEMYINT,INT,BOOLEAN,INT,INT,INT,BACKGROUND食人花敌人的构造方法DEAD敌人的死亡处理方法GETSHOWIMAGE显示当前敌人所属游戏图片GETTYPE获取当前敌人的种类GETX获取敌人的横坐标GETY获取敌人的纵坐标RESET重置函数RUN线程运行方法SETBGBACKGROUND设置游戏背景STARTMOVE敌人开始移动474OBSTRUCTION类图OBSTRUCTION类是主要负责管理游戏道具有关的信息和相关操作的类,其属性和方法如下图47所示OBSTRUCTIONINXINT,INYINT,INTYPEINT,INBGBACKGROUNDGETSHOWIMAGEBUFFEREDIMAGEGETTYPEINTGETXINTGETYINTRESETVOIDRUNVOIDSETIMAGEVOIDSETTYPEINTBGBACKGROUNDSHOWIMAGEBUFFEREDIMAGESTARTTYPEINTTTHREADTYPEINTXINTYINTMARIOOBSTRUCTION图47游戏OBSTRUCTION类图1OBSTRUCTION类主要属性如下BG当前游戏背景SHOWIMAGE所示图片STARTTYPE道具起始类型T线程对象TYPE道具类型X道具所处横坐标Y道具所处纵坐标2OBSTRUCTION类主要方法如下OBSTRUCTIONINT,INT,INT,BACKGROUND道具初始化方法GETSHOWIMAGE获取当前显示图片GETTYPE获取道具种类GETX获取道具横坐标GETY获取道具纵坐标RESET重置方法RUN线程执行方法SETIMAGE设置显示图片SETTYPEINT设置道具种类475BACKGROUND类BACKGROUND类主要负责管理游戏背景上的游戏元素,并为其他游戏实体类提供调用方法。其类图如下图48BACKGROUNDINSORTINT,INFLAGBOOLENEMYSTARTMOVEVOIDGETALLENEMYLISTGETALLOBSTRUCTIONLISTGETBGIMAGEBUFFEREDIMAGEGETREMOVEDENEMYLISTGETREMOVEDOBSTRUCTIONLISTGETSORTINTISDOWNBOOLISFLAGBOOLISOVERBOOLRESETVOIDSETALLOBSTRUCTIONINALLOBSTRUCTIONLISTVOIDSETDOWNINISDOWNBOOLVOIDSETOVERINISOVERBOOLVOIDBGIMAGEBUFFEREDIMAGESORTINTFLAGBOOLISOVERBOOLISDOWNBOOLALLENEMYLISTALLOBSTRUCTIONLISTREMOVEDENEMYLISTREMOVEDOBSTRUCTIONLISTMARIOBACKGROUND图48游戏BACKGROUND类图1BACKGROUND主要属性如下BGIMAGE游戏背景图片SORT游戏关卡FLAG是否展示ISOVER是否结束ISDOWN是否进入下一章节ALLENEMY用于保存所有敌人的集合ALLOBSTRUCTION用于保存所有道具的集合REMOVEENEMY用于保存所有已被消灭敌人的集合REMOVEOBSTRUCTION用于保存所用被破坏道具的集合2BACKGROUND主要方法如下BACKGROUNDINT,BOOLEAN场景构造方法ENEMYSTARTMOVE敌人开始移动方法GETALLENEMY获得场景内的敌人GETALLOBSTRUCTION获得场景内的所有道具GETBGIMAGE获得场景背景图片GETREMOVEDENEMY获得被消灭的敌人GETREMOVEDOBSTRUCTION获得被破坏的障碍物GETSORT获得当前游戏的章节ISDOWN是否开始下一章节ISFLAG是否进行展示ISOVER是否游戏结束RESET重置方法SETALLOBSTRUCTIONLIST设置游戏道具SETDOWNBOOLEAN设置游戏可否推进SETOVERBOOLEAN设置游戏是否结束476STATICVALUE类图STATICVALUE的作用是用来保存游戏中所有道具和人物的图片信息,其相关类图如下图49所示INITVOIDALLMARIOIMAGELISTSTARTIMAGEBUFFEREDIMAGEENDIMAGEBUFFEREDIMAGEBGIMAGEBUFFEREDIMAGEALLFLOWERIMAGELISTALLTRIANGLEIMAGELISTALLTURTLEIMAGELISTALLOBSTRUCTIONIMAGELISTMARIODEADIMAGEBUFFEREDIMAGEIMAGEPATHSTRINGMARIOSTATICVALUE图49游戏STATICVALUE类图1STATICVALUE的主要属性如下ALLMARIOIMAGE与MARIO所有有关的图片STARTIMAGE游戏开始图片ENDIMAGE游戏结束图片BGIMAGE游戏背景图片ALLTRIANGLEIMAGE蘑菇怪有关的图片ALLTURTLEIMAGE乌龟怪有关的图片ALLOBSTRUCTIONIMAGE游戏道具有关图片MARIODEADIMAGEMARIO死亡图片IMAGEPATH图片保存路径2STATICVALUE的主要方法如下INIT初始化方法,将上述STATICVALUE中的属性通过传入参数进行赋值,和图片真实路径对应起来。477MYFRAME类图MYFRAME类是继承于JAVASWING图形库中JFRAME框架的类,用于实现游戏界面的绘制,将和游戏显示有关的组件加入到框架中。与MYFRAME有关的类图如下图410所示MAININARGSSTRINGVOIDMYFRAMEKEYPRESSEDINEKEYEVENTVOIDKEYRELEASEDINEKEYEVENTVOIDKEYTYPEDINEKEYEVENTVOIDPAINTINGGRAPHICSVOIDRUNALLBGLISTISSTARTBOOLMARIOMARIONOWBGBUFFEREDIMAGETTHREADMARIOMYFRAME图410游戏MYFRAME类图1MYFRAME类的主要属性如下ALLBG所有背景图片ISSTART是否游戏开始MARIOMARIO类的实例对象NOWBG当前的背景图片T线程对象2MYFRAME类的主要方法MAIN主方法MYFRAME构造方法KEYPRESSED按键按下监听方法KEYRELEASED按键释放监听方法KEYTYPED按键连按监听方法PAINT屏幕重绘方法RUN线程运行方法48游戏功能与代码实现481游戏功能游戏的基本功能主要根据游戏的游戏要素分为以下几个主要问题1MARIO的移动和跳跃动作控制的实现2MARIO遇到障碍物时将导致障碍物状态的变化或者MARIO自身状态的变化3MARIO在执行跳跃动作的同时如果包含方向性,将对MARIO的运动方式造成改变因此,我们需要对这些问题进行深化,并加入一些设定来保证这些问题能被解决,基本覆盖各种判定条件。1当MARIO没有遇到障碍物或者敌人时,如果MARIO在一段平直路段上行走,应有一个表示状态的变量标识MARIO处于着陆状态,并同时基本状态为移动方向。2当MARIO在空中时(即已发生跳跃),如果同时有方向操作的输入,则应该的基本状态应该为跳跃方向。并应该有一个变量用于控制MARIO的上升高度或者上升力度,当这个变量达到一定阀值时,MARIO的坐标应相应发生降低,直到落到一个障碍物或者水平路段上后方可以重新跳跃,在降落过程中MARIO仍可以根据输入方向来调整位置和朝向。2)当MARIO碰到敌人时,如果是在非跳跃状态时,会被敌人杀死。如果在跳跃状态时,则敌人会被杀死。当MARIO遇到高直的障碍物时,应采用位置判断来决定MARIO是否可以继续移动,只有当离开障碍物所处的坐标及影响范围外,MARIO才可以继续移动。482代码实现本环节根据MARIO类中的部分代码,来展示对游戏进行中的一些关键环节的分析过程,通过代码说明主要的执行步骤。PUBLICVOIDLEFTMOVEXMOVE5IFTHISSTATUSINDEXOF“JUMPING“1THISSTATUS“LEFTJUMPING“ELSETHISSTATUS“LEFTMOVING“以上是MARIO的左移方法,如果当前MARIO处于跳跃状态,则将状态改为LEFTJUMPING,否则改为LEFTMOVING,同理可得对应的右移方法RIGHTMOVE。PUBLICVOIDLEFTSTOPXMOVE0IFTHISSTATUSINDEXOF“JUMPING“1THISSTATUS“LEFTJUMPING“ELSETHISSTATUS“LEFTSTANDING“以上是MARIO的左移停止方法,如果当前的MARIO处于跳跃状态,则将状态改为LEFTJUMPING,否则改为LEFTSTANDING,同理可得对应右移停止方法LEFTSTOP。PUBLICVOIDJUMPIFTHISSTATUSINDEXOF“JUMPING“1IFTHISSTATUSINDEXOF“LEFT“1THISSTATUS“LEFTJUMPING“ELSETHISSTATUS“RIGHTJUMPING“YMOVE5UPTIME38以上是跳跃方法,判断MARIO的状态是否包含有是JUMPING字段,并根据方向来确定是向左面跳还是向右面跳。并加上一个阀值UPTIME来限定MARIO的跳跃力度。PUBLICVOIDDOWNIFTHISSTATUSINDEXOF“LEFT“1THISSTATUS“LEFTJUMPING“ELSETHISSTATUS“RIGHTJUMPING“YMOVE5以上是降落方法,判断MARIO的跳跃状态和方向,并对MARIO所处高度进行降低处理对于复写RUNNABLE接口中RUN方法,不给出全部代码,仅对关键代码进行说明FORINTI0ITHISYOBSETIMAGEUPTIME0以上代码分析MARIO在移动过程中是否遇到了障碍物,如果干扰到其运行,则设置CANRIGHT和CANLEFT这些BOOL变量的值来说明MARIO是否还能向左走或者右走,并且仅当MARIO没有碰到食人花的时候,当MARIO通过当前的环节时,清除场景中的所有障碍物,并载入下个场景信息。FORINTI0ITHISXPRIVATEMARIOMARIONULLPRIVATEBACKGROUNDNOWBGNULLPRIVATETHREADTNEWTHREADTHISPRIVATEBOOLEANISSTARTFALSEPUBLICSTATICVOIDMAINSTRINGARGSNEWMYFRAMEPUBLICMYFRAMETHISSETTITLE“JAVA版超级玛丽“THISSETSIZE900,600INTWIDTHTOOLKITGETDEFAULTTOOLKITGETSCREENSIZEWIDTHINTHEIGHTTOOLKITGETDEFAULTTOOLKITGETSCREENSIZEHEIGHTTHISSETLOCATIONWIDTH900/2,HEIGHT600/2STATICVALUEINITTHISSETDEFAULTCLOSEOPERATIONJFRAMEEXIT_ON_CLOSETHISSETVISIBLETRUETHISSETRESIZABLEFALSEFORINTI1IITERENEMYTHISNOWBGGETALLENEMYITERAT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 梯形(教学设计)-2023-2024学年四年级下册数学西师大版
- 八年级历史下册 第二学习主题 社会主义道路的探索 第5课 艰苦创业的民族脊梁说课稿4 川教版
- 四年级信息技术下册 使用压缩软件 2说课稿 冀教版
- 2024-2025学年新教材高中生物 第五章 细胞的能量供应和利用 第2节 1 细胞的能量“货币”ATP(2)说课稿 新人教版必修1
- 湖南省桑植县贺龙中学高中音乐《第三单元 鼓舞弦动-丰富的民间器乐》第六节 鼓乐铿锵 教案
- 10《苏武传》教学设计 2024-2025学年统编版高中语文选择性必修中册
- 2025年初中生物学教师招聘考试模拟试卷及参考答案
- 2025年秋新人教版数学三年级上册全册同步教学设计
- 4.2.1元素周期律教学设计 2023-2024学年高一上学期化学人教版(2019)必修第一册
- 2025年中考化学试题分类汇编:坐标图像题(第2期)原卷版
- 电厂检修项目风险评估报告
- 妊娠期甲状腺疾病诊治
- 成品纸仓库管理制度
- 公司电动汽车安全管理制度
- 电工入场安全教育试卷(含答案)
- 纪念抗日战争胜利80周年
- 数字化牙科扫描技术-洞察及研究
- 2024年甘肃白银有色集团股份有限公司招聘真题
- JG/T 269-2010建筑红外热像检测要求
- CJ/T 225-2011埋地排水用钢带增强聚乙烯(PE)螺旋波纹管
- 医院晋升晋级管理制度
评论
0/150
提交评论