基于Java的超级玛丽游戏的设计与实现论文

上传人:1777****777 文档编号:39613205 上传时间:2021-11-11 格式:DOC 页数:61 大小:4.55MB
收藏 版权申诉 举报 下载
基于Java的超级玛丽游戏的设计与实现论文_第1页
第1页 / 共61页
基于Java的超级玛丽游戏的设计与实现论文_第2页
第2页 / 共61页
基于Java的超级玛丽游戏的设计与实现论文_第3页
第3页 / 共61页
资源描述:

《基于Java的超级玛丽游戏的设计与实现论文》由会员分享,可在线阅读,更多相关《基于Java的超级玛丽游戏的设计与实现论文(61页珍藏版)》请在装配图网上搜索。

1、码农毕业设计下载网: 分类号_ 密级_ UDC _ 学号_ _毕业设计(论文)论文题目基于Java的超级玛丽游戏的设计与实现thesis Topic学生姓名学 号所 在 院 系专 业 班 级导师姓名职称完成日期年 月 日码农毕业设计下载网: 编号: _ 毕业设计(论文)答辩许可证软件工程学院 软件工程 系 专业 学生 所编写的毕业设计(论文) 页,字数 ,符合毕业设计(论文)大纲的要求。经审查:该生已学完教学计划规定的全部课程,成绩合格,毕业设计电子文档最后一稿已交,准予参加毕业设计(论文)答辩。相 关 材 料材 料 名 称数量毕业设计(论文)1册毕业论文缩写1册答辩汇报稿1份毕业设计(论文)

2、电子版(最后一稿磁盘文件)1套指 导 教 师: (签名)院长(系主任): (签名) 年 月 日太原理工大学毕业设计(论文)任务书毕业设计(论文)题目:基于Java的超级玛丽游戏的设计与实现毕业设计(论文)要求及原始数据(资料): 1.综述计算机发展的现状与趋势以及解决复杂问题的便捷; 2.深入了解图形化界面的设计方式与实现方法;3.熟练掌握图形化界面的实现,训练编写代码的能力;4.设计并实现超级玛丽游戏中图形按钮的功能以及人物的动作控制;5.深入分析和运用java编程中的编写语言和代码的调试实现;6.训练检索文献资料和利用文献资料的能力;7.训练撰写技术文档与学位论文的能力。毕业设计(论文)主

3、要内容:1综述计算机图形化界面在生活中的应用; 2了解图形化界面和GUI相关技术;3熟悉java的开发环境; 4设计并实现超级玛丽游戏中按钮和流程的功能;5. 深入了解项目设计中的关键技术与编写语言JAVA的设计流程;6熟练掌握底层代码的编写和GUI组件的使用;7设计与实现针对游戏运行所需程序。学生应交出的设计文件(论文):1内容完整、层次清晰、叙述流畅、排版规范的毕业设计论文;2包括毕业设计论文、源程序等内容在内的毕业设计电子文档及其它相关材主要参考文献(资料): 1 刘欣怡,周跃东等,软件工程,清华大学出版社 2007 2 朱少明,软件测试方法与技术,清华大学出版社 3 张海藩编

4、著,软件工程导论,北京,清华大学出版社,2003 第4版4 相洁,软件开发环境与工具,电子工业出版社5 赵卓君著,JAVA程序设计高级教程,清华大学出版社,北京交通大学出版社6 许晓宁著,Java技术实用教程,东南大学出版社 2005 7 丁振凡,Java语言实用教程(第2版),清华大学出版社 2008.1 8 Bruce Tate,Bitter Java,Manning Publications 2002 9 Joshua Bloch,Effective Java Programming Language Guide, Addison-Wesley Professional 05

5、June, 2001 10 Bruce Eckel,Thinking in Java(4th Edition),Prentice Hall PTR 2007专业班级学生要求设计(论文)工作起止日期2015年3月23日2015年7月3日指导教师签字日期2015年3月23日教研室主任审查签字日期系主任批准签字日期基于java的超级玛丽游戏的设计与实现摘要近年来,Java作为一种新的编程语言,以其简单性、可移植性和平台无关性等优点,得到了广泛地应用。J2SE称为Java标准版或Java标准平台。J2SE提供了标准的SDK开发平台。利用该平台可以开发J

6、ava桌面应用程序和低端的服务器应用程序,也可以开发Java Applet程序。“超级玛丽”游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。本游戏中通过总结和分析JAVA游戏的开发流程和代码功能的设计,采用面向对象的设计模式,对游戏中的所有物体赋予对象的概念和属性。开发了一款超级玛丽游戏,该游戏主要分为窗体类、场景类、马里奥类、敌人类、障碍物类等几个类。在主程序运行的线程中,用户控制的超级玛丽随方向键的操作而移动,并且可以实现马里奥游戏中的一些基本功能,例如踩死敌人或者顶掉砖块。本游戏采用双缓存技术,解决了游戏过程中的闪屏问题。通过本游戏的开发,达到学习Java技术和熟悉软件

7、开发流程的目的。本文在介绍Java相关技术和国内外发展现状的基础上,对“超级玛丽”游戏的整个生命周期的各个开发阶段进行了详细地介绍。为了保证程序代码的正确性和功能实现的可靠性,本文还介绍了游戏软件的程序调试过程和功能测试结果。    【关键字】:面向对象;Java;碰撞检测;超级玛丽Design and implementation of java-based Super Mario gameAbstractIn recent years, Java as a new programming language, with its simplicity,

8、portability and platform independence, etc., have been widely used. J2SE called Java Standard Edition or Java standard platforms. J2SE SDK provides a standard development platform. You can use the platform to develop Java desktop applications and low-end server applications, you can develop Java App

9、let program."Super Mario" game is a classic game, because it is simple, entertaining and popular. The game features through the development process and code design summary and analysis of JAVA games, using object-oriented design patterns, all objects of the game gives the concept of object

10、s and attributes. Developed a Super Mario game, the game is divided into several classes form class, class scene, Mario class, class enemies, obstacles and so on. In the main thread running, user-controlled Super Mario with the arrow keys to move the operation, and can achieve Mario game some basic

11、functions, such as stepping on the enemy or top off the bricks. The game uses dual caching technology to solve the game during the splash screen problem. Through the development of this game, to learn Java technology and familiar with software development process purposes.This paper describes the st

12、ate of the art related to the development of Java and abroad on the basis of the various development stages of "Super Mario" game for the entire life cycle of a detailed introduction. In order to ensure the correctness of the program code and functions to achieve reliability, this article

13、describes the game software debugging process and functional test results. Key words:  Object-Oriented,java,Collision Detection, Mario目 录1、绪论111.1背景以及现状111.2 Java语言的特点 121.3  系统运行环境及开发软件: 121.4   可行性的分析 131.4.1 技术可行性131.4.2  

14、经济可行性 131.4.3  操作可行性 142、 需求分析142.1 用户需求分析142.2功能需求分析152.3界面设计需求分析153、 系统概要设计163.1系统模块设计163.1.1窗体类163.1.2初始化类173.1.3背景类183.1.4马里奥类183.1.5障碍物类193.1.6敌人类193.2系统流程设计204、 系统详细设计214.1 设计目标214.2 系统模块设计224.2.1窗体类224.2.2初始化类264.2.3背景类284.2.4马里奥类314.2.5障碍物类374.2.6敌人类395、系统的实现425.1游戏开发所需要的

15、图片425.1.1马里奥的所有图片425.1.2游戏中障碍物的图片435.1.3游戏中怪物的图片445.1.4游戏中的背景图片445.1.5游戏开始时的图片455.2游戏设计的界面455.2.1 游戏逻辑展示455.2.1 游戏逻辑展示466、系统测试486.1 测试的意义486.2 测试过程496.3 测试结果497、总结与展望507.1  总结 507.2  设计中的不足之处 517.3  展望 51致 谢52外文原文53外文翻译571、绪论1.1背景以及现状随着计算机日益普及,计算机已然成

16、为人们日常生活的一部分的今天,计算机游戏也越来越成为人们生活中不可或缺的元素。游戏可以简单地理解为调节人们生活节奏和缓解人们生活压力的一种手段。现在理解的游戏基本意义都是娱乐性质较浓,要有特定的行为模式,遵循一定规则以达到游戏者目的的行动。游戏的最初目的就是让游戏者(玩家)在游戏中得到放松。游戏一直存在于人类活动中,如今定义的游戏从早期的猜谜游戏,发展到如今的单机RPG游戏,网络游戏等,已经升华为更高级别意义上的娱乐活动,对人们的感官刺激也越发强烈,得到的乐趣也更多。Java并不是以游戏编程为目的而被开发的,事实上,游戏编程可能是Java创造者心中的最后一个目标。在过去,妨碍Java发展的是它

17、的运行环境;浏览器和Java类库一起从本质上决定了Java应该用来写哪种类型的应用程序,而高速的游戏和图象则不在其中。这给Java带来了不好的影响,因为人们注意的不是语言,而是它的运行环境。现在,浏览器已经不能控制一切了,Java作为游戏编程语言的另一个机会到来了。Java在过去有一点超前于它的时代,当时市场的动力落后于Java,但是现在Java可以而且已经取得成功。 1.2 Java语言的特点 1. 平台无关性 Java引进虚拟机原理,并运行于虚拟机,实现不同平台之间的Java接口。使用Java编写的程序能在世界范围内共享。Java的数据类型

18、与机器无关。2. 安全性 Java的编程类似C+,但舍弃了C+的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针入侵系统。它提供了安全管理器,防止程序的非法访问。 3. 面向对象 Java吸收了C+面向对象的概念,将数据封装于类中,实现了程序的简洁性和便于维护性,使程序代码可以只需一次编译就可反复利用。 4. 分布式 Java建立在TCP/IP网络平台上,提供了用HTTP和FTP协议传送和接收信息的库函数,使用其相关技术可以十分方便的构建分布式应用系统。 5. 

19、;健壮性 Java致力与检查程序在编译和运行时的错误,并自动回收内存,减少了内存出错的可能性。Java取消了C语言的结构、指针、#define语句、多重继承、goto语句、操作符、重载等不易被掌握的特性,提供垃圾收集器自动回收不用的内存空间。1.3  系统运行环境及开发软件: 开发环境:Windows 7; (2)开发工具:eclipse;  (3)编程语言:Java语言;1.4   可行性的分析 可行性研究的目的,就是用最小的代价在尽可能短的时间内确定问题是否能够解决。要达

20、到这个目的,必须分析几种主要的可能解法的利弊,从而判断原定的系统规模和目标是否现实,系统完成后所能带来的效益是否大到值得投资开发这个系统的程度。因此,可行性研究实质上是要进行一次大大压缩简化了的系统分析和设计的过程,也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。1.4.1 技术可行性本游戏是在Windows 7环境下开发的,一般的机器配置就可以了,对机器本身没有太高的要求,一般当前学校或个人电脑完全可满足要求,环境只需装上jdk 1.4或以上版本就行了,Java是现在全球最时髦的开发工具之一,它拥有一套庞大且完善的类库,内置了其他语言需要靠库甚至是操作系统才能

21、支持的功能,拥有一个虚拟机。NeatBeans IDE 5.5是SUN公司开发的Java可视化集成开发工具,是目前最优秀的Java集成开发工具之一。 1.4.2  经济可行性 由于本系统使用到的工具一般机器都具备,使用环境也很简单,开发成本低,本课题研究的内容是涉及网络的游戏对战。当今形式下网络游戏俨然已经成为年轻人最时兴的消费方式之一,JAVA一直以来由于其可以“跨平台”以及“一次编译,到处运行”等特点,许多人直接它为网络编程语言,且由于JAVA游戏一般来说简单有趣,并且对用户硬件要求极小,所以JAVA游戏通常对85%的计算机用户都

22、有吸引力。且政府态度和政策都是一种信号,表明2005年对本土网络游戏的扶持力度将加大;国内游戏厂商将可获得发展的核心技术平台;政策有利于保护中国游戏软件的自主知识产权;这为网络游戏发展创造了良好的政策环境。 1.4.3  操作可行性 由于在整个系统的开发过程中从操作简便、界面美观、灵活实用的用户要求为出发点,界面设计时充分考虑玩家的感受,界面比较直观,交互性很好,所以操作起来简单明了。 2、 需求分析所谓系统分析,就是指在整个系统开发工程中,解决“做什么”的问题,把要解决哪些问题,满足用户哪些具体的信息需求调查分析清楚,从逻辑上或是说从信息处理

23、的功能需求上提出系统的方案,即逻辑模型,为下一阶段进行物理方案设计,解决怎么办提供依据。2.1 用户需求分析超级玛丽这款游戏是很多人童年经典的回忆,是一种简单的大众的游戏,自从计算机实现以来,深受广大电脑玩家的喜爱。并且随着社会的快速发展,人们的生活节奏越来越快,人们对于童年的美好已经不愿意仅仅停留在回忆阶段。所以利用java语言开发一款超级玛丽游戏正是人们迫切需要的。2.2功能需求分析本系统主要是完成超级玛丽游戏的基本操作。本系统需要满足以下几点要求:(1) 在开始界面按空格键进入游戏。 (2) 利用方向键来控制马里奥的运动。 (3) 碰撞检测: A.马里奥在运动的过程中如果碰到障碍物则停止

24、运动,在移动到悬崖上方是会掉下去,并失去一条生命。 B.对于有些敌人,如果马里奥跳到敌人头顶上,则敌人消失,否则马里奥失去一条生命。(4) 马里奥顶到金币会增加分数,当马里奥失去3条生命时游戏结束。2.3界面设计需求分析1) 选取和谐Q版的图片,使画面色彩和谐自然。2) 固定游戏界面大小与初始显示位置。 3) 游戏采用900*600像素显示,对于马里奥和障碍物选用60*60像素的正 方图片,对于较大的障碍物分割成多个60*60的小正方形。3、 系统概要设计3.1系统模块设计首先在对于系统的需求进行了分析,因为设计者的最初是要做一款游戏,所以窗体类必不可少。接下来继续分析,游戏中还需要

25、背景类、障碍物类、敌人类、马里奥类这及格类。其次为了游戏的流畅以及游戏中图片调用的方便,专门为此再设计一个初始化类。3.1.1窗体类该类主要用于存放游戏的场景以及其他各类,并且实现KeyListener接口,用于从键盘的按键中读取信息。该类中的一些属性主要包括了用于存放所有场景的list集合 allBG,马里奥类 mario,当前的场景 nowBG以及其他一些游戏中需要的标记等。而且在该类中,运用双缓存的技术使得游戏的流畅度更高,解决了游戏中出现的闪屏问题。Myframe- allBG:List- mario:Mario- nowBG:BackGround.+ main():void+ pai

26、nt():void+ keyPressed():void+ kerReleased():void.3.1.2初始化类用于存放游戏所需要的所有静态文件,在游戏开始的时候将所有文件导入,提高游戏的运行速度。并且在该类中将所有需要用到的图片进行分类,分为障碍物类,马里奥类,敌人类以及背景图片。当游戏运行时可以直接调用这些集合中的图片进行遍历,在调用的时候更加方便,而且可以使马里奥或者敌人在移动的时候产生动态效果。StaticValue+ allMarioImage:List+ startImage:BufferedImage.+ init():void.3.1.3背景类该类表示马里奥及障碍物和敌人所

27、处的场景,并且将障碍物和敌人绘制到场景中。在该类中包括用于存放敌人和障碍物的list集合,以及当敌人或者障碍物被消灭后用于存放已经消失的敌人和障碍物的集合,这样做是为了在马里奥死亡时重置场景所用的。其次在该类中还使用了控制敌人移动的方法,是为了在程序之初控制敌人静止,然后在玩家点击空格以后在使得敌人开始移动。BackGround- bgImage:BufferedImage- isOver:boolean- isDown:boolean- allEnemy:List- removeEnemy:List.+ enemyStartMove():void+ reset():void.3.1.4马里奥

28、类用来控制马里奥的行动,并且在该类中加入碰撞检测,判断马里奥是否与障碍物或者敌人发生碰撞。该类中的属性主要定义了马里奥所在的场景,马里奥的移动和跳跃的速度,以及马里奥在移动过程中需要显示的图片。另外该类中还定义了玩家的生命值和所获得的分数。并且在run()方法中还定义了当马里奥到达最后一关的旗子时,玩家将失去对马里奥的控制,剩下的由程序控制走到城堡,完整全部游戏。Mario- x:int- y:int- xmove:int- ymove;int- life:int- isDead:boolean.+ leftMove():void+ leftStop():void+ jump():void+

29、down():void+ dead():void.3.1.5障碍物类绘制场景中所需要的障碍物,例如地面、砖块、水管等等。该类中的属性包括了障碍物的坐标,障碍物所需要显示的图片等。并且在该类中也定义了障碍物类的重置方法,当马里奥死亡时,场景类会调用该方法。Obstruction- x:int- y:int- type:int- starttype:int- showImage:BufferedImage.+ reset():void+ setImage():void.3.1.6敌人类该类中主要设置了两种敌人,一种是蘑菇怪,可以被马里奥踩死,另一种是食人花,不能被踩死。该类中的属性包括了敌人的坐标

30、,敌人的初始坐标,需要显示的图片,以及敌人的移动方向和移动范围等。敌人的初始坐标主要是为了当敌人执行重置方法后将敌人的位置还原。Enemy- x:int- y:int- startx:int- starty:int- showImage:BufferedImage- upMax:int- downMax:int.+ reset():void+ dead():void.按空格键 开始3.2系统流程设计 使用方向键控制马里奥移动判断与场景中物体的碰撞敌人障碍物是否丢失生命是否为砖块否是是否阻止移动,砖块消失阻止移动消灭敌人,继续游戏是否已丢失三条生命是否游戏重置,并且失去一条生命 游戏继续并且继续

31、游戏直至通关游戏结束4、 系统详细设计4.1 设计目标本软件是针对超级玛丽小游戏的JAVA程序,进入游戏后首先按空格键开始,利用方向键来控制的马里奥的移动,同时检测马里奥与场景中的障碍物和敌人的碰撞,并判断马里奥的可移动性和马里奥的生命值。当马里奥通过最后一个场景后游戏结束。4.2 系统模块设计本系统共包括6各类:4.2.1窗体类 该类主要用于存放游戏的场景以及其他各类,并且实现KeyListener接口,用于从键盘的按键中读取信息。该类中的一些属性主要包括了用于存放所有场景的list集合 allBG,马里奥类 mario,当前的场景 nowBG以及其他一些游戏中需要的标记等。而且在该类中,运

32、用双缓存的技术使得游戏的流畅度更高,解决了游戏中出现的闪屏问题。 将该类的名字定义为MyFrame,并且要在该类中实现KeyListener接口和Runnable接口。然后首先要在该类中定义一个List集合,集合的泛型为背景类BackGround,集合的名字定义为allBG,用于存放所有的背景。接着定义一个Mario类属性,名字为mario,这个就是游戏运行时候的所需要的mario。接下来还要在类中定义一个BackGround属性,nowBG,默认值应当为空,会在构造方法中赋予该属性初值,这个属性主要是用来存放当前游戏运行时马里奥所处的游戏场景。另外该类中还应该有一个Thread类属性t,这个

33、属性主要是为了在游戏运行的时候控制游戏的线程。然后就可以在类中定义main()方法,将该类实现就可以了。值得一提的是该类的构造方法相对来说是比较复杂的。 在该类的构造方法中,应当首先绘制窗体类的标题,以及窗体类的大小,并且要对窗体类在初始化的时候的位置,也就是在屏幕中显示的位置,最好是显示的时候居中,这样的话在游戏运行时会比较美观一些。其次还要对窗体的一个是否可拉升属性进行一下设置,这个设置的主要目的是因为游戏的界面都是开发者经过深思熟虑考虑出来的比较美观的界面,玩家随意改变游戏的窗口大小可能会对游戏的体验造成影响,所以在这里应该设置游戏的窗体默认不可以被拉伸。public MyFrame()

34、this.setTitle("玛丽奥");this.setSize(900, 600); /这里是为了获得电脑屏幕的整体大小,以便于下面确定窗体的位置int width = Toolkit.getDefaultToolkit().getScreenSize().width;int height = Toolkit.getDefaultToolkit().getScreenSize().height;this.setLocation(width-900)/2, (height-600)/2); /设置窗体默认不可以被拉伸this.setResizable(false);/初始

35、化图片StaticValue.init(); 当这些都设置好以后,接下来就应当在构造方法中绘制了,当然最先应当将游戏的场景绘制到窗体类中,然后在窗体类中还应当绘制马里奥类,这是游戏中必不可少的。当然在绘制场景类的时候因为不知一个场景,所以可以使用循环,将所有的场景全部绘制。然后在将所需要的所有监视设置好以后就可以开启该类的线程了。/使用循环创建全部场景for(int i=1;i<=7;i+)this.allBG.add(new BackGround(i, i=7?true:false);/将第一个场景设置为当前场景this.nowBG = this.allBG.get(0);/初始化玛丽

36、奥this.mario = new Mario(0, 480);/将玛丽奥放入场景中this.mario.setBg(nowBG);this.repaint();this.addKeyListener(this);this.t = new Thread(this);t.start(); /使窗口在关闭的时候,程序也同时停止。this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true); 在这些最基本的东西设置完以后,还需要一个方法来解决游戏中经常会出现的闪屏问题。这个方法就是双缓存方法,现在类中定义一个Buf

37、feredImage的图片,然后从该图片中获取到图片的Graphics g2,然后利用画笔g2将所要绘制的东西绘制到这个空的图片中,然后在利用窗体类中的paint方法中的画笔g将这个已经绘制好的图片绘制到窗体类中,这样利用空白图片作为程序运行中的中转,就可以很好的解决游戏运行过程中出现的闪屏问题。public void paint(Graphics g) /先定义一个图片,然后利用双缓存解决闪屏问题BufferedImage image = new BufferedImage(900, 600, BufferedImage.TYPE_3BYTE_BGR);Graphics g2 = image

38、.getGraphics(); /利用上面图片中得到的画笔g2,将所需绘制到图片中if(this.isStart)/绘制背景g2.drawImage(this.nowBG.getBgImage(), 0, 0, this);/绘制生命g2.drawString("生命: "+this.mario.getLife(), 800, 50);/绘制怪物敌人Iterator<Enemy> iterEnemy = this.nowBG.getAllEnemy().iterator();while(iterEnemy.hasNext()Enemy e = iterEnemy

39、.next();g2.drawImage(e.getShowImage(), e.getX(), e.getY(), this);/把缓存图片绘制进去g.drawImage(image, 0, 0, this); 当然游戏的宗旨是让玩家和电脑之间的互动,那么就又涉及到一个问题,就是玩家对游戏中的马里奥的控制。我们前面已经说过了该类中必须要实现KeyListener接口,这个接口的作用就是使该类中实现一些方法,以便于达到玩家在游戏进行时可以对游戏中的马里奥进行控制。我们这里拟定对于马里奥的控制可以使用我们常见的四个方向键,即我们说的上下左右。并且通过控制台打印,可以知道上对应的是38,右对应的是

40、39,左对应的是37。并且游戏的设定是开始后游戏不会直接运行,而是要使用空格键以后游戏才会真正开始,所以还要加入当按空格键的时候游戏正式开始,空格键对应的是32。public void keyPressed(KeyEvent e) if(this.isStart)/玛丽奥的移动控制if(e.getKeyCode()=39)this.mario.rightMove();if(e.getKeyCode()=37)this.mario.leftMove();/跳跃控制if(e.getKeyCode()=38)this.mario.jump();else if(e.getKeyCode()=32)th

41、is.isStart = true; 对于按键,那么相对应的就是当抬起建的时候。因为你向右移动的时候,如果这时候突然停止,那么很可能马里奥会保持一个运动的状态停下来,那么就必须在玛丽奥停止的时候给他一个指令,让他的移动图片变为静止。相对于运动的时候是类似的,这里不做累述。public void keyReleased(KeyEvent e) if(this.isStart)/控制玛丽奥的停止if(e.getKeyCode()=39)this.mario.rightStop();if(e.getKeyCode()=37)this.mario.leftStop(); 当这一切都做好以后,那么最后就

42、应该在类中重写一下run方法了,在这个方法中应当提一下游戏的通关和死亡后的状态。即游戏通关,或者马里奥死亡时应当弹出一个窗口,说明游戏通关或者马里奥死亡,并且点击了这个窗口以后,游戏应当结束,而且整个游戏也应当关闭。if(this.mario.isDead()JOptionPane.showMessageDialog(this, "游戏结束");System.exit(0);if(this.mario.isClear()JOptionPane.showMessageDialog(this, "恭喜游戏通关!");System.exit(0);4.2.2初

43、始化类用于存放游戏所需要的所有静态文件,在游戏开始的时候将所有文件导入,提高游戏的运行速度。并且在该类中将所有需要用到的图片进行分类,分为障碍物类,马里奥类,敌人类以及背景图片。当游戏运行时可以直接调用这些集合中的图片进行遍历,在调用的时候更加方便,而且可以使马里奥或者敌人在移动的时候产生动态效果。首先在类中应当定义一个静态的List,泛型为BufferedImage,属性名字为allMarioImage,这个属性的作用在于存放所有的马里奥图片,里面包括了马里奥的移动图片,站立图片以及马里奥跳跃的图片。这样在程序运行的时候就可以从该类中的这个属性里面将所需要的马里奥图片直接调用出来,并且还可以

44、在马里奥移动时不断遍历里面的图片,这样就可以使马里奥产生移动的动态效果。接下来要在该类中定义开始图片,结束图片以及背景图片,默认的初始值都为null。注意这些所有的属性都是静态的,包括下面要提到的所有的属性,这样做的目的是为了在程序运行时先加载这些图片。然后应当定义存放食人花的List集合allFlowerImage,这个集合将食人花的不同形态,张嘴、闭嘴图片存放进去,这样在运行的时候进行遍历就可以打到动态效果。同理存放蘑菇怪的集合allTrangleImage,以及存放所有障碍物的集合allObstructionImage。public class StaticValue public st

45、atic List<BufferedImage> allMarioImage = new ArrayList<BufferedImage>();public static BufferedImage startImage = null;public static BufferedImage endImage = null;public static BufferedImage bgImage = null;public static List<BufferedImage> allFlowerImage = new ArrayList<BufferedI

46、mage>();public static List<BufferedImage> allTriangleImage = new ArrayList<BufferedImage>();public static List<BufferedImage> allObstructionImage = new ArrayList<BufferedImage>();定义完这些属性之后,剩下的就是初始化了,在该类中定义一个init()方法,这个方法在执行的时候会将所需的所有图片放入到之前定义好的各个集合中。因为图片存放的路径都是一样的,所以为了减少代码

47、量会定义一个公共路径ImagePath。然后就可以利用循环,将存放的图片全部导入进去。 /介绍代码量,定义公共路径public static String ImagePath = System.getProperty("user.dir")+"/bin/"/定义方法init(),将图片初始化public static void init()/利用循环将玛丽奥图片初始化for(int i=1;i<=10;i+)try allMarioImage.add(ImageIO.read(new File(ImagePath+i+".png"

48、;); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();/导入背景图片try startImage = ImageIO.read(new File(ImagePath+"start.jpg");bgImage = ImageIO.read(new File(ImagePath+"firststage.jpg");endImage = ImageIO.read(new File(ImagePath+"firststageend.jpg"

49、); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();/导入玛丽奥死亡图片try mariDeadImage = ImageIO.read(new File(ImagePath+"over.png"); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();4.2.3背景类 该类表示马里奥及障碍物和敌人所处的场景,并且将障碍物和敌人绘制到场景中。在该类中包括用于存放敌人和障碍物的

50、list集合,以及当敌人或者障碍物被消灭后用于存放已经消失的敌人和障碍物的集合,这样做是为了在马里奥死亡时重置场景所用的。其次在该类中还使用了控制敌人移动的方法,是为了在程序之初控制敌人静止,然后在玩家点击空格以后在使得敌人开始移动。并且在第六个关卡处设置了一个隐形通关要点,只有当马里奥顶到这个隐形砖块时才会出现,马里奥就可以借助这个砖块通过关卡。 首先背景类中肯定要有一个标记来表示现在是第几个场景,因为不同的背景中所绘制的场景,障碍物等也不同,所以该类中要有一个int类型的场景顺序sort。并且在游戏的设定中,如果玩家玩到最有一关的时候马里奥会失去玩家的控制,自己走向城堡。那么这里就要这几一

51、个标记,是否为最后的场景,类型为boolean类型。如果马里奥失去所有生命值,或者游戏通关的话,那么游戏就会结束,这里还应当加一个boolean的标记isOver判断游戏是否结束。public class BackGround /当前场景图片private BufferedImage bgImage = null;/场景顺序private int sort;/是否为最后的场景private boolean flag;/游戏结束标记private boolean isOver = false; 在最后一个关卡中,马里奥到达旗杆的位置后就会失去控制,同时旗子将会开始下降,只有等旗子下降完毕后,马里

52、奥才能开始移动,所以这里还要定义一个旗子是否下降完毕的boolean类型的属性isDown,用于判断马里奥什么时候移动。/定义降旗结束private boolean isDown = false; 当马里奥失去生命的时候,但是并没有失去所有的生命,那么这个时候应当重置这个场景,将所有消灭掉的障碍物和敌人全部还原。因此除了在该类中除了要定义存放敌人和障碍物的List集合以外,还应当有存放被消灭的敌人或者障碍物的List,当敌人或者障碍物被消灭的时候先放入到这个List中,这样在充值的时候就可以直接将这个集合中的数据在还原到原先的集合里面。/用集合保存敌人private List<Enemy

53、> allEnemy = new ArrayList<Enemy>();/用集合保存障碍物private List<Obstruction> allObstruction = new ArrayList<Obstruction>();/被消灭的敌人private List<Enemy> removeEnemy = new ArrayList<Enemy>();/被消灭的障碍物private List<Obstruction> removeObstruction = new ArrayList<Obstructi

54、on>(); 在游戏的设定中,应当是游戏开始的时候,所有的敌人其实是静止的,而且玩家也不能控制马里奥,必须要等到玩家按空格键开始以后游戏才会进行,那么这里就应当在定义一个方法,即当玩家空格键的时候会调用这个方法,同时游戏中的敌人开始移动,游戏正式开始。这个方法也就是相当于控制敌人开始移动的方法,所以命名为enemyStartMove()方法。/敌人开始移动public void enemyStartMove() /遍历当前场景中的敌人,使之开始移动for(int i=0;i<this.allEnemy.size();i+)this.allEnemy.get(i).startMove

55、(); 接下来就应当定义背景类的构造方法了,通过获取场景的顺序,即场景的sort,来判断是哪一个场景,同时将场景绘制好。/构造方法public BackGround(int sort,boolean flag)/第一个场景if(sort=1)for(int i=0;i<15;i+)this.allObstruction.add(new Obstruction(i*60, 540, 9,this);/绘制砖块和问号this.allObstruction.add(new Obstruction(120, 360, 4,this);this.allObstruction.add(new Obs

56、truction(300, 360, 0,this);. 前面提到,如果马里奥死亡,但是却没有失去所有的生命值,那么游戏应当重置,当前场景中的所有敌人和障碍物,也包括马里奥都应当回到初始位置。为了达到这个效果,那么我们的场景类中就必须要定义一个reset()方法,来调用障碍物和场景还有马里奥的各自的重置方法,来使当前的场景还原。并且在这之前我们还要将消灭掉的敌人和障碍物从消灭掉的存放的List中提出来,放回到原来的List中。然后遍历障碍物和敌人的List,使用循环调用他们的重置方法。/重置方法,重置障碍物和敌人public void reset()/将移除的障碍物和敌人还原this.allE

57、nemy.addAll(this.removeEnemy);this.allObstruction.addAll(this.removeObstruction);/调用障碍物和敌人的重置方法for(int i=0;i<this.allEnemy.size();i+)this.allEnemy.get(i).reset();for(int i=0;i<this.allObstruction.size();i+)this.allObstruction.get(i).reset();4.2.4马里奥类用来控制马里奥的行动,并且在该类中加入碰撞检测,判断马里奥是否与障碍物或者敌人发生碰撞。

58、该类中的属性主要定义了马里奥所在的场景,马里奥的移动和跳跃的速度,以及马里奥在移动过程中需要显示的图片。另外该类中还定义了玩家的生命值和所获得的分数。并且在run()方法中还定义了当马里奥到达最后一关的旗子时,玩家将失去对马里奥的控制,剩下的由程序控制走到城堡,完整全部游戏。在游戏中,玛丽奥要在玩家的控制下完成移动、跳跃等动作,那么这些动作首先肯定要涉及到坐标,那么我们在该类中首先要定义两个属性,这两个属性即为马里奥的坐标x和y。并且该类还要实现Runnable接口,在run()方法中写马里奥的移动规则。public class Mario implements Runnable/坐标priv

59、ate int x;private int y;/定义玛丽奥所在场景private BackGround bg;/加入线程private Thread t = null; 为了玩家在游戏过程中的良好体验,那么对于马里奥的移动速度和跳跃速度就必须要定义好。所以该类里面还应当定义马里奥的移动速度和跳跃速度,其本质就是马里奥在移动过程中坐标加减的值。当然初始值为零,必须等到马里奥构造的时候,再将这些属性赋予相对应的值。在本类中还要定义游戏的分数以及马里奥的生命数,这些都是必不可少的。/移动速度private int xmove = 0;/跳跃速度private int ymove = 0;/状态private String status;/显示图片private BufferedImage showImage;/生命和分数private int score;private int life; 在马里奥这个类中,还要定义马里奥的移动和跳跃方法,以便玩家在按下方向键后调用这些方法,来达到控制马里奥的移动。下面是马里奥向左移动的方法,其他方法同理。public void leftMove()/移动速度xmove = -5;/改变状态/如果当前

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!