ImageVerifierCode 换一换
格式:DOC , 页数:44 ,大小:2.38MB ,
资源ID:4892438      下载积分:12 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/4892438.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(超级玛丽小游戏设计.doc)为本站上传会员【天****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

超级玛丽小游戏设计.doc

1、 河北农业大学 本科毕业论文(设计) 题 目: 超级玛丽小游戏设计 摘要 《超级玛丽》全名《超级马里奥兄弟》,是任天堂公司出品的著名横版过关游戏,最早在红白机上推出,有多款后续作品,迄今多个版本合共销量已突破4000万套。其中的主角马里奥、路易、桃子公主、蘑菇王子等等已成为任天堂的招牌人物。该课题主要是模仿经典的《超级玛丽》完成相应的游戏功能。本游戏以java为主要技术核心,通过各种核心类实现了游戏中的主要人物和角色,并通过各类函数实现了地图的绘制、碰撞检测、键控、滚屏等核心功能,并对游戏进行了一系列优化,例如产生新对象,收集垃圾,对时间、空间

2、的权衡,实现了电脑版的超级玛丽。 关键字: 超级玛丽;Java;碰撞检测;滚屏 Abstract "Super Marie" full name "super Mario Bros." version of the cross, is a famous Nintendo Co produced the pass of the game, the first introduced in red and white machine, there are a variety

3、of subsequent works, so multiple versions of total sales have exceeded 40000000 sets. One of the main characters Mario, Louis, Princess Peach, mushroom Prince has become Nintendo sign characters. The main issue is to imitate the classic "super Marie" to complete the corresponding game function. This

4、 game is the main core technology in Java, through a variety of core class implements the main characters and the characters in the game, and implements map rendering, collision detection, key control, scrolling and other core functions through various kinds of function, and the Games were a series

5、of optimization, such as creating a new object, garbage collection, to balance time, space, achieve 1 computer version of super Marie. Key words: Super Marie ,Java, Collision detection ,Roller screen 目录 1. 绪论 1 1.1 java介绍 1 1.2 超级玛丽游戏的历史 1 2. 基本概要 2 2.1 游戏应用环境的

6、构建 2 2.1.1游戏需要的硬件环境 2 2.1.2游戏需要的软件环境 2 2.2 操作 2 2.3 游戏界面 2 3. 系统分析 4 3.1 本程序需要解决的主要技术问题 4 3.2 游戏的总体构架 4 3.3 程序的类结构以及流程图 5 3.3.1 类结构 5 3.3.2 流程图 6 4. 详细设计及实现 7 4.1 地图的实现 7 4.1.1地图的结构 7 4.1.2约定规则 7 4.1.3地图的产生 8 4.2 滚屏的实现 9 4.2.1原理 9 4.2.2地图内部对象的移动 9 4.2.3小结 9 4.3 地图切换的实现 9 4.4 碰撞检

7、测 10 4.4.1原理 10 4.4.2碰撞检测在游戏中的应用 10 4.5 玛丽以及键控处理的实现 10 4.5.1 Mario类的实现 11 4.5.2键控处理 12 4.6 砖头的实现 12 4.6.1分类 12 4.6.2结构 13 4.7 敌人的实现 13 4.7.1分类 13 4.7.2结构 14 4.8 重力模拟 15 5. 游戏的优化及注意点 16 5.1 游戏中屏幕绘制技术的优化 16 5.2 游戏中新对象的产生和垃圾收集 16 5.3 游戏对系统资源占用的优化 17 6. 总结 18 参考文献 20 致谢 21 附录 22 1

8、 绪论 1.1 java介绍 Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE, JavaME, JavaSE)的总称。Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 Sun 公司对 Java 编程语言

9、的解释是:Java 编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。 Java 平台是基于 Java 语言的平台。这样的平台非常流行。因此微软公司推出了与之竞争的.NET平台以及模仿Java的C#语言。 Java是功能完善的通用程序设计语言,可以用来开发可靠的、要求严格的应用程序。 1.2 超级玛丽游戏的历史 1985年9月,让全球无数玩家深深着迷,同时也开启了电玩业界崭新时代的动作游戏《超级玛丽兄弟( Super Mario Bros.)》在日本当红的电视游乐器“Family Computer(FC,俗称红白机)”上 闪耀登场,至

10、今已25 个年头。 马里奥的出道可以追溯到1981年的街机游戏《大金刚》,那时还没有马里奥这个名字,只是单纯地将他设定为一个意大利人角色。当时对马里奥有 “Mr.电子游戏”、“跳跃人”等非正式的称呼。关于正式命名还有一段典故。当游戏《大金刚》被拿到美国任天堂分部的时候,公司员工发现在有一个在仓库中工作的工人Mario,相貌和动作酷似游戏中的“跳跃人”,于是“马里奥”也就成了这个明星角色的正式名字。1953年有一部法国电影《恐怖的报酬》,主人公名叫马里奥,搭档名叫路易基。 帽子加背带工作服、大鼻子和胡子等特征,离英雄的形象相差甚远。再加上少许肥胖的身材,稍不留神可能就会把我们的英雄马里奥当成

11、在便利店打工的中年大叔。但是形象上所带来的个性和亲切感,却在玩家的心中根深蒂固。马里奥的诞生之父宫本茂的设计理念就是“像记号一般让人一目了然的外貌,容易表现动作的配色”。当时限于硬件的机能,无法表现精密的画面。为了清楚表现人物的动作,就把马里奥的服装设计成了背带工作服,这样可以很好地表现出手臂的动作。关于脸部的设计,当时的考虑是,就算设计得很仔细,在电视上也无法表现出来。有特点、容易辨认,才是设计的重点。所以就有了大鼻子、留胡子、戴帽子的设计。 2. 基本概要 2.1 游戏应用环境的构建 2.1.1游戏需要的硬件环境 普通PC CPU :1GHz及以上 内存 : 256MB及以上

12、 分辨率 :推荐1024*768像素 2.1.2游戏需要的软件环境 操作系统 :Windows xp/7 开发环境 :eclipse 开发工具包 :JDK 2.2 操作 本游戏为全键盘操作。进入主界面后,按P键可以选择关卡,Enter键进入游戏。A键和D键分别控制玛丽左右移动。J键为加速键。K键控制玛丽跳跃。 2.3 游戏界面 进入游戏后,按P键选择关卡,按Enter键开始游戏。游戏开始界面如图(图2-1)所示: 图2-1 开始界面 游戏进行中的画面如图(图2-2、图2-3)所示: 图(2-2)为游戏刚开始的画面:

13、 图2-2 游戏画面-1 图(2-3)为第二关刚开始的画面: 图2-3 游戏画面-2 3. 系统分析 3.1 本程序需要解决的主要技术问题 1.如何实现地图:如何实现地图的绘制,如何实现滚屏(即当玛丽移动时,地图同时向后移动)。 2.地图上建筑物的实现。 3.碰撞检测。 4.玛丽的实现与控制。 3.2 游戏的总体构架 根据以上分析,我们把整个游戏分为四个模块: 1.地图模块:主要为一个Map类,此类包含了地图

14、的所有信息,包括地图背景,建筑物,敌人等。建筑物分为两类:一类是不能产生变化的普通建筑物,另一类是可以被玛丽顶的砖头,可以产生金币、蘑菇或花朵的砖头。 2.玛丽与主线程模块:Mario为主角玛丽的类,在此类中定义了玛丽的各种属性和动作,并加入了键盘控制。Check类为游戏主线程类,一些主要的功能,包括玛丽动作的实现,与建筑物和敌人的碰撞检测等都在此类中实现。 3.绘制模块:MyJPanel类。游戏中的所有事物,包括主人公玛丽,建筑物,敌人等等,都通过调用其本身的draw()方法在此类中画出。 4.垃圾回收模块:Rubbish类。此类为一个线程类,游戏启动时随主线程Check的启动而启动,

15、实时检测游戏中产生的垃圾并回收,减少对系统资源的占用,优化游戏的运行。 系统结构图如下图(图3-1)所示: 超级玛丽 地图模块 玛丽与主线程模块 绘制模块 垃圾回收模块 图3-1 系统结构 3.3 程序的类结构以及流程图 3.3.1 类结构 图3-2 类结构 如上图(图3-2)所示,本游戏的主要类结构为: ⑴ Mario类。本类为主角玛丽的实现类,玛丽的动作与控制,以及绘制等方法都在本类中定义。 ⑵ Check类。本类

16、为主要线程类,玛丽的动作,与建筑物、砖头以及敌人的碰撞检测,发子弹,地图的滚屏等等都在本线程类中实现。 ⑶ Map类。本类为地图类。地图上所有的对象,包括建筑物,砖头,敌人等都为此类的属性。 ⑷ Creature类。本类为所有敌人,蘑菇,花朵和金币的父类,本类为线程类,在其具体的子类中定义了相应动作。 ⑸ Brick类。本类为所有砖头类的父类,为线程类。在其具体的子类中定义了相应的动作。 ⑹ CrashCheck类。本类定义了碰撞检测的方法。 ⑺ MyJPanel类。游戏中所有的对象都在此类中绘制。 ⑻ Music类。本类为游戏的背景音乐类。 ⑼ Rubbish类。本类为垃圾检测

17、和回收类。 文件夹结构为: ⑴ audio文件夹。本文件夹存储游戏的所有声音文件。 ⑵ image文件夹。本文件夹存储游戏的所有图片文件。 ⑶ maps文件夹。本文件夹包含游戏的地图文件。 3.3.2 流程图 游戏流程图如下图(图3-3)所示: 开始 选择关卡 默认 加载地图 进入游戏 通关 否 是 游戏结束 图3-3 流程图 4. 详细设计及实现 4.1 地图的实现 地图的实现是本游戏的一个主要难点。设计思路为把地图信息记录在一个文本文件map.

18、txt中,当游戏启动时,由一个专门类CreateMap的静态方法loadMap()来实现加载地图功能。这样做的好处是,当改变文本文件的内容时,就可以改变地图布局,从而可以很方便地设计地图。 4.1.1地图的结构 地图信息在一个Map类中保存,此类的主要结构为: 1.属性 ⑴ 数组tile。此数组用来保存普通建筑物对象。 ⑵ 集合brickList。此集合用来保存可以被顶,可以顶出蘑菇和花朵和金币的砖头或问号对象。 ⑶ 集合creatureList。此集合用来保存敌人,蘑菇,花朵和金币对象。 ⑷ 对象background。此对象为地图的背景对象。 2.方法 ⑴ moveLeft

19、)。此方法的功能是将地图向左移动,滚屏时使用。 ⑵ draw()。此方法为地图的绘制方法,包含地图中所有对象(背景,建筑物,砖头,敌人)的绘制方法。因此只需要在MyJPanel类的paint()方法中调用此方法,便可将地图上的所有对象画出。 4.1.2约定规则 图4-1 地图文件 地图文件如上图(图4-1)所示。约定的对应规则为: ⑴ 大写字母A~I 分别对应相应的普通建筑物。 ⑵ 大写字母J~L分别对应相应的砖头。其中字母J对应可以顶碎的砖头(当为小玛丽时砖头仅上下移动一下,为大玛丽时可以顶碎),字母K对应可以顶出

20、蘑菇或花朵的砖头(当为小玛丽时顶出可以变大的蘑菇,当为大玛丽时则顶出可以发子弹的花朵)。字母L对应可以顶出多个金币的砖头(固定为8个金币)。 ⑶ 大写字母R和S分别对应可以顶出蘑菇或花朵的砖头(当为小玛丽时顶出可以变大的蘑菇,当为大玛丽时则顶出可以发子弹的花朵)和可以顶出一个金币的砖头。 ⑷ 大写字母O对应金币。 ⑸ 大写字母Z对应地图的出口。即到达此处地图结束,进入下一关地图。 ⑹ 数字代表敌人。数字1代表毛毛虫,2代表乌龟。 ⑺ 地图左上角符号#后边的三个字符,分别表示:第一个表示地图的背景类型,第二个表示玛丽在此地图的初始位置,第三个数字表示此地图结束后下一个衔接的地图编号。

21、 按上述地图文件产生的对应的游戏画面如图(图4-2)所示: 图4-2 对应的游戏地图画面 4.1.3地图的产生 产生地图时,调用CreateMap类中的静态方法loadMap(),调用时将要加载的地图文件以参数的形式传入。此方法的工作流程为: ⑴ 产生一个Map对象map。 ⑵ 读取地图文件,依据上述对应规则,在相应位置产生相对应的对象(位置通过对象本身的坐标属性x和y体现)。并将产生的对象加入地图相应属性:建筑物对象加入数组map.tile,砖头对象加入集合map.brickList,敌人,蘑菇,花朵和金币对象加入集合

22、map.creatureList。 ⑶ 返回 map对象。 map对象即为产生的地图类。在MyJPanel中调用map.draw(),即可将地图画出。 4.2 滚屏的实现 4.2.1原理 在主人公玛丽向右移动,并到达一定位置时,让其横坐标不再变化,同时调用map.moveLeft()方法,使地图向左移动,实现滚屏效果。由于玛丽的移动速度不是固定的,因此在map.moveLeft()方法中也不能使用固定数值。将玛丽的移动速度保存在玛丽的一个整型数值属性speed中,并通过一个中间数值将其传入到map.moveLeft()方法中,使玛丽的移动速度和地图的移动速度始终同步。 4.2.2地

23、图内部对象的移动 地图的移动体现在地图属性map.X的数值变化上,刚开始,map.X为零,表明在地图的最开始。随着玛丽向右移动,地图向左移动,map.X的值逐渐变小。 在地图内部的所有固定对象(即相对于地图位置不变的对象),都有X,Y和想x,y这两对坐标属性,其中X,Y表示此对象相对于地图的位置,这一对数值在对象生成那一刻起就不会再变化。x,y表示此对象的实际位置,即在屏幕上画出时的坐标。在画出此对象前,先执行代码:this.x=this.X+map.X;即可保证随着地图的移动,此对象相对于地图的位置不变。 在地图内部的所有非固定对象(即相对于地图的位置会发生变化的对象,例如敌人对象会自

24、己移动),除了具有X,Y、x,y这两对坐标属性外,还具有另外一对属性xm,ym。其中前两对属性的意义与固定对象中的意义相同,而后者xm,ym这一对代表对象自身移动产生的位移。在画出此对象前,执行代码:this.x=this.X+map.X+this.xm;即可保证随着地图的移动,此对象跟着移动,并且由于自身的移动,其相对于地图的位置也会变化。 4.2.3小结 综上,当玛丽移动时地图向左移动,地图内部对象通过计算产生新的坐标,跟着地图一起移动,实现了地图的滚屏。 4.3 地图切换的实现 当进入下一关或者玛丽进入可以换场景的水管时,需要切换到相应的地图。 1. 进入下一关时。这种情况比较

25、简单。在每一关的map地图类里用一个字符串属性nextMap记录下一关的地图文件的路径,当满足某种条件需要进入下一关时,调用CreateMap类里构造地图的方法loadMap(),把nextMap里的路径内容当做参数传入,构造出下一关的地图,并替换当前地图即可。 2. 进入换场景水管时。这种情况稍微复杂一些,因为还要从水管出来,所以必须要先将当前地图map对象保存在一个Map类型的数组mapRecord中,然后再根据水管中记录的地图信息构建地图场景,然后替换当前地图。当从水管中出来时,将mapRecord中保存的地图对象替换掉当前地图对象即可。 4.4 碰撞检测 4.4.1原理 碰撞检

26、测为本游戏的基础。玛丽,敌人等对象在建筑物上移动而不下落,遇到障碍物时不能继续移动或向相反方向移动,以及子弹和敌人的碰撞都需要用到碰撞检测。 碰撞检测的方法为CrashCheck类中的一系列静态方法,共有四类: ⑴ upCheck(a,b)检测b对象是否在a对象的上方,如果是,返回true;否返回false; ⑵ downCheck(a,b)检测b对象是否在a对象的下方,如果是,返回true;否返回false; ⑶ leftCheck(a,b)检测b对象是否在a对象的左方,如果是,返回true;否返回false; ⑷ rightCheck(a,b)检测b对象是否在a对象的右方,如果是

27、返回true;否返回false; 根据检测对象的不同又具体分为不同的方法,但同一类的方法(即检测同一方向的方法)是同名的,即运用了方法的重载。例如要检测b对象是够在a对象的上方,不管a,b是哪一种类的对象,都可以运用静态方法CrashCheck. upCheck(a,b)来检测,大大地简化了碰撞检测方法的调用。 4.4.2碰撞检测在游戏中的应用 碰撞检测在游戏中的应用分为以下几种情况: ⑴ 玛丽与建筑物的碰撞检测:当玛丽下方有建筑物时,纵向速度v置零。当玛丽左右方向碰到建筑物时,令其横向位置变为紧贴建筑物,避免其进入建筑物。当玛丽跳跃头顶到建筑物时,令玛丽的纵向速度v置零,让其自由下

28、落。如果被顶的建筑物时线程砖头,则启动砖头线程,并执行相应的动作。 ⑵ 玛丽与敌人的碰撞检测:当玛丽跳跃踩到敌人时,令玛丽向上弹起。并让敌人执行相应动作。当玛丽在左右或上方碰到敌人时,令玛丽变小或死亡。 ⑶ 子弹与建筑物的碰撞检测:当子弹下方有建筑物时,令子弹以一固定的速度向上弹起。当子弹在左右方向碰到建筑物时,结束子弹线程,并将其标识为垃圾对象。 ⑷ 子弹与敌人的碰撞检测:当子弹无论在哪个方向碰到敌人时,结束子弹线程,并标识为垃圾对象,结束敌人线程,并标识为垃圾对象,敌人死亡。 ⑸敌人与建筑物的碰撞检测:当敌人下方有建筑物时,纵向速度v置零。当敌人左右方向碰到建筑物时,改变其移动方向

29、 4.5 玛丽以及键控处理的实现 玛丽为本游戏的主人公,我们可以通过键盘控制玛丽的行走,加速,跳跃和攻击等行为,来通过关卡。 4.5.1 Mario类的实现 主人公mario对象为Mario类的一个对象。此类的主要结构为: 1.属性 ⑴ 布尔值属性alive。此属性代表玛丽的死活,当alive为false时玛丽死掉,游戏结束。 ⑵ 整型属性blood。此属性代表玛丽的状态。blood等于1时为小玛丽(初始状态),等于2时为大玛丽(吃蘑菇后达到),等于3时可以发子弹(吃花朵后达到)。 ⑶ 布尔值属性speedUp。speedUp为true时玛丽为加速状态,为false时玛丽为普

30、通状态 ⑷ 整型属性speed。代表玛丽的移动速度。 ⑸ 布尔值属性fireOn。fireOn为true时代表玛丽为发子弹的状态。 2.方法 ⑴ moveLeft()。此方法可以实现玛丽向左移动。 ⑵ moveRight()。此方法可以实现玛丽向右移动。 ⑶ moveUp()。此方法可以实现玛丽的跳跃。 ⑷ draw()。此方法将玛丽画出来。通过多个图片快速切换来实现玛丽运动的效果。 玛丽的形象如图(图4-3,图4-4)所示: 图4-3 小玛丽 图4-4 大玛丽 4.5.2键控处理 通过让Mario

31、类继承KeyListener接口,并在KeyListener接口的默认方法中添加代码来实现键盘对玛丽行为的控制。 ⑴ 当按下A键时调用mario.moveLeft()方法,玛丽向左移动。 ⑵ 按下D键时,调用mario.moveRight()方法,玛丽向右移动。 ⑶ 按下J键时,speedUp置true,玛丽处于加速状态。 ⑷ 按下K键时,调用mario.moveUp()方法,玛丽跳跃。 玛丽跳跃的画面如图(图4-5)所示: 图4-5 玛丽跳跃画面 4.6 砖头的实现 4.6.1分类 砖头共分为5类: ⑴ 普通

32、砖头。即能被顶碎的砖头(如果是小玛丽顶,则上下移动一下,如果是大玛丽,则被顶碎)。 ⑵ 能够顶出蘑菇或花朵的砖头(如果是小玛丽顶,则会出现能够变大的蘑菇,如果是大玛丽顶,则会出现花朵)。 ⑶ 能够顶出金币的砖头(固定为8个金币)。 ⑷ 能够顶出蘑菇或花朵的问号(如果是小玛丽顶,则会出现能够变大的蘑菇,如果是大玛丽顶,则会出现花朵)。 ⑸ 能够顶出金币的问号(能顶出一个)。 4.6.2结构 这五个砖头类都为线程类,它们继承同一个父类Brick。它们的主要结构为: 1.属性 ⑴ 整型变量X,Y。这一对变量代表此对象相对于地图的位置坐标(对象产生后不会再变化)。 ⑵ 整型变量x,y

33、这一对变量代表此对象的实际位置坐标(即画出时的坐标)。 ⑶ 字符型变量type。此变量代表砖头的种类。 ⑷ 布尔型变量start。此变量表示线程是否启动。 ⑸ 布尔型变量alive。此变量表示线程是否还存活。 2.方法 ⑴ draw()。此方法将对象画出。 ⑵ run()。为线程方法。此方法定义了不同类型砖头在被玛丽顶后的不同行为。 游戏启动时,在地图相应的位置产生对应的砖头,并将其加入map.brickList,但此时并不启动砖头线程,而是当被玛丽顶后相应的砖头线程才会启动,这样大大节省了系统资源,避免了浪费。 4.7 敌人的实现 4.7.1分类 敌人共分为2类: ⑴

34、 毛毛虫。只能左右爬动,遇到障碍物或其它敌人后改变方向。当脚下没有建筑物时,受到重力作用下落。被玛丽踩到或被子弹打到时死亡。从其他地方碰到玛丽后,玛丽变小或死亡。毛毛虫如图(图4-6)所示: 图4-6 毛毛虫 毛毛虫死亡如图(图4-7)所示: 图4-7 毛毛虫死亡 ⑵ 乌龟。只能左右爬动,遇到障碍物或其它敌人后改变方向。当脚下没有建筑物时,受到重力作用下落。不能被玛丽踩死,只能被子弹打死。从其他地方碰到玛丽后,玛丽变小或死亡。乌龟如图(图4-8)所示: 图4-8 乌龟

35、 乌龟死亡如图(图4-9)所示: 图4-9 乌龟死亡 4.7.2结构 这两个敌人类都为线程类,继承同一个父类Creature。它们的主要结构为: 1.属性 ⑴ 整型变量X,Y。这一对变量代表此对象相对于地图的位置坐标(对象产生后不会再变化)。 ⑵ 整型变量x,y。这一对变量代表此对象的实际位置坐标(即画出时的坐标)。 ⑶ 整型变量xm,ym。这一对变量代表对象本身移动产生的位移。 ⑷ 字符型变量type。此变量代表敌人的种类。 ⑸ 布尔型变量start。此变量代表线程是否启动。 ⑹ 布尔型变量alive。此变量

36、代表对象是否存活。 2.方法 ⑴ draw()。此方法将对象画出。 ⑵ moveLeft()。此方法可以让对象向左移动。 ⑶ moveRight()。此方法可以让对象向右移动。 ⑷ run()。为线程方法。此方法定义了不同类型敌人的不同行为。 游戏启动时,在地图相应的位置产生对应的敌人,并将其加入map.enemyList,但此时敌人线程并不启动,而是当其实际位置移动到窗口附近时才会启动。这样大大节省了系统资源,避免了浪费。 4.8 重力模拟 为了让游戏更加逼真,我们对游戏中的每个自由对象(玛丽、敌人以及子弹)施加重力,让其模拟现实中的物体,在其下方没有物体支撑时,作自由落体运

37、动。 具体实现方法: 在每个生物线程里,加入如下重力实现代码。 this.y+=v; v+=G; 其中v代表对象的纵向速度,正值为朝下,负值为朝上。初始值为零。G为一个整型常量,代表重力加速度,值恒为1。 线程运行过程中,先检测对象下方有无建筑物支撑,如果有,则v置零,如果没有,则运行上述重力实现代码。重复上述过程,令其模拟物体受到重力作用。 5. 游戏的优化及注意点 5.1 游戏中屏幕绘制技术的优化 在屏幕绘制模块中,包括两个部分:玛丽的绘制与地图的绘制。它们的绘制方法是在MyJPanel类中的paint()方法中调用绘制方法mari

38、o.draw()和map.draw()。 在其具体的实现方法中,玛丽的情况很简单,只需要在mario类中添加多个玛丽动作的分解图片属性,然后在其draw()方法中按一定规律交替画出这些图片即可实现玛丽的绘制与运动。地图的绘制就较为复杂,因为在其draw()方法中,包含了多个不同类型对象的绘制方法,包括背景,建筑物,砖头,敌人等等。在这些对象的绘制过程中,必须要注意其绘制的先后顺序,例如背景必须最先绘制,否则就会盖住其它内容。然后再是建筑物,砖头,敌人等。 在滚屏的实现一章中,我们提到过在地图绘制前,要对其内部的所有对象进行坐标计算,即对所有对象执行代码:this.x=this.X+map.

39、X或this.x=this.X+map.X+this.xm,然后再执行绘制代码。 现在有两个方案: ⑴ 对地图内的某个对象,先执行坐标计算代码,然后执行绘制代码,然后再计算和绘制下一个对象。 ⑵ 先对地图内所有对象执行坐标计算代码,然后再对所有对象执行绘制代码。 经过分析可知,第一种方案中每个对象绘制之间的时差较大(中间隔了坐标计算代码),因此在地图滚屏时可能会造成建筑物变形的现象(接口处错开)。而第二种方案,每个对象的绘制是接连进行的,中间没有太多时差,所以大大减少第一种方案中造成的建筑物变形现象。经过实验,确实如此。因此采用第二种方案。 5.2 游戏中新对象的产生和垃圾收集 1

40、新对象的产生 在本游戏中,对象的产生大部分是在游戏刚启动时,比如,建筑物、砖头、敌人等等。有一小部分是在游戏中产生的,如玛丽发出的子弹,蘑菇,花朵和顶出的金币等。 2.垃圾收集 在游戏运行过程中,要实时进行垃圾收集,否则占用系统资源过多,会造成游戏卡顿,运行不畅。 收集垃圾前,要先鉴定一个对象是否为垃圾对象,将垃圾对象进行标识。具体为: ⑴ 子弹对象的鉴定:当子弹移出屏幕之外,或者打中敌人,或者碰到建筑物后,标识为垃圾对象。 ⑵ 砖头对象的鉴定:当砖头被顶碎后标识为垃圾对象。 ⑶ 敌人对象的鉴定:当敌人被杀死或掉到窗口下方后标识为垃圾对象。 ⑷ 其他对象的鉴定:当蘑菇,花朵,

41、金币对象被玛丽吃掉后,标识为垃圾对象。 本游戏中用一个独立的线程Rubbish来时刻检测和收集垃圾对象,此线程随游戏主线程的启动而启动,将标识为垃圾的对象线程停止,然后移出数组或集合,保证程序的流畅运行,减少对系统资源的占用。 5.3 游戏对系统资源占用的优化 1.线程的优化 游戏启动时,加载地图上所有对象,但是并不启动所有线程。各类线程的启动时间为: ⑴ 砖头线程。砖头线程只有在被玛丽顶到时才会启动。 ⑵ 敌人线程。只有当敌人的实际坐标位置快要进入窗口时,才会启动线程。 2.绘制的优化 在对地图内所有对象绘制之前,先对对象的坐标进行检测,只有当对象处在窗口之内时才会执行绘制代

42、码。 通过以上优化,减少了不必要的线程和绘制,大大节省了系统资源,提高了游戏运行效率。 6. 总结 做事要积极主动,态度决定一切,不得不说,同样的事,同一水平线,不同人做的时候,态度和积极性就决定着一切,所以一个人只要工作态度好,我相信这个人的工作绝对不会差。 就为解决一个问题,我们可能连续十几甚至几十小时的坐在计算机前不停的工作。一个问题解决了,可能又有其它的问题出现。而你要是不能坚持下来,可能从前的一切努力都流失了。轻易言败的人请不要做程序员,你不可能成功。执着是最可贵的。 整个程序设计的

43、过程就是一个研究学习,应用,再研究学习,再应用的过程。一名优秀的程序员决不会认为自己足够好了,不需要再提高了。自满自足的人不会是好程序员,会很快落后以致落伍。所以越是优秀的程序员越是感觉自己懂得少,不会在人前故意卖弄,这并不是故作谦虚,而是实实在在的感受,亲自体会才能明白。 虚心请教不懂就要问,如果是单纯技术上的问题,如果可以百度到的,我认为就可以自己消化掉!问的问题一定要先百度,然后带着自己的想法,去问一些有经验的人,收获会更大! 浮华的程序员会不懂装懂,不停的强调语言的优劣,平台的好坏。追求所谓最新最时尚的技术,停留在表面问题上。 优秀的程序员是充满激情和活力的程序员。求知欲和创造欲

44、是原动力。有求知欲你才能不停的学习,有创造欲你才能不停的超越自己。 很多程序员都是在失败的时候强调客观因素,而优秀的程序员的程序员都是先反省自己。要明白自己缺陷,再努力去学习。没有人事事都做的成功,也没有人生来就什么会做。所以失败了,多想想自身的原因,这样你才会不停的进步,而不是留在原地抱怨。 要想飞的更高,我需要一双有力的翅膀,一双有力的翅膀,是飞行的最基本的支撑和前提。 那什么是程序开发的最基本的支撑呢,个人感觉是构建一个完整的关于开发的知识体系和程序员应该具备的最基本能力。 对技术迷茫过?动摇过?很正常,每个人都有过这样的困惑,审慎的对待自己的性格、能力,并作出合理的选择是我们这

45、代人需要面对的问题之一,我们没有可以参考的目标(对于软件行业而言,在国内从无到有也才那么10几年时间,自然没有什么参考对象),也不像我们的父辈一样无法选择,展现在我们面前的是一条更加宽广的路,也是一条充满了荆棘的路,所以,选择也就更加的重要了。 我越来越意识到写程序不是仅仅把程序写出来,而是要让你写的程序可读,可维护,并且高效。优化正确的程序要比改正已优化(但是有错)的程序要容易。 此次的毕业实习为我深入社会,体验生活提供了难得的机会,让我在实际的社会活动中感受生活。了解社会中生存所应具备的各种能力在工作中严格要求自己,虚心向他人请教,学到更多的知识,掌握一些基本的会计技能,为以后的工作和

46、生活积累更多的知识和宝贵经验。 通过本次毕业设计,让我们掌握如何制作一个游戏软件,以及制作游戏软件的整个流程,制作游戏软件的步骤,让学生熟悉项目开发的完整过程,为即将到来的就业工作打下基础。另外也通过本次设计将三年来所学的专业知识和其他方面的知识融入到实际应用中,在实际运用中学习和掌握Java程序开发的全过程,进一步熟悉掌握Java程序设计语言的基础内容、基本技能和方法,同时培养学生进行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。

47、 参考文献 [1] 图书作者: [美]David Wallace Croft 著 彭晖 译 图书名称:Java游戏高级编程——游戏开发经典丛书 出版社: 清华大学出版社 出版时间: 2005-8第1版 [2] 图书作者:(美)韦尔斯 等著,陈宗斌 等译 图书名称:JAVA ME 游戏编程(第2版) 图书出版社:机械工业出版社 [3] 图书作者:荣钦科技 编著 图书名称:《JAVA2游戏程序设计》 出版时间:2003.06出版 [4] 图书作者:David Brackeen编著 邱仲潘 翻译 图书名

48、称:《JAVA游戏编程》 出版时间: 2004.06出版 [5] 图书作者:Bruce Eckel著 陈昊鹏 译. 图书名称:Java编程思想. [M] 图书出版社:北京:机械工业出版社 出版时间: 第4版.2007年 [6] 图书作者:王克宏主编 图书名称:《JAVA技术及其应用(第二版)》 出版社:高等教育出版社 致谢 首先,衷心地感谢高媛教师。我很想自己做一个游戏,于是在论文题目制定时,我毫不犹豫地选择了这个题目,感谢老师能给我这样一个实现自己的机会,感谢

49、老师在这段时间对我无私的指导和帮助。 最后,感谢大学四年间热情帮助过我的每一位老师和同学。感谢亲爱的农大对我的栽培。 附录 超级玛丽游戏源代码: 1. Mario类: package com.day01; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.awt.event.KeyEvent; import java.a

50、wt.event.KeyListener; import java.awt.image.ImageObserver; import java.util.LinkedList; import java.util.List; import javax.swing.ImageIcon; public class Mario implements KeyListener, ImageObserver{ public int x; public int y; public int width=34; public int height=50; public Imag

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服