基于安卓的超级马里奥制作毕业论文.doc_第1页
基于安卓的超级马里奥制作毕业论文.doc_第2页
基于安卓的超级马里奥制作毕业论文.doc_第3页
基于安卓的超级马里奥制作毕业论文.doc_第4页
基于安卓的超级马里奥制作毕业论文.doc_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

基于安卓的超级马里奥制作毕业论文第1章 绪论1、android系统介绍随着科技的发展,移动电话(Mobile Phone)正朝着智能化的方向发展,逐步成为多种工具的功能载体,而Android就是这样一个智能手机的平台、一个多种工具的功能载体。1.1 通信工具移动电话的最基本功能为通信功能,因此使用运营商提供的通信网络进行语音通话也是Android平台的最基本功能。除了传统的语音通话功能外,Android平台还具有短消息功能,以及通常移动电话都具有的个人信息系统管理方面的功能(如电话本等)。1.2 网络工具随着数字业务使用的普遍化,移动电话通常被作为网络工具使用,即移动电话可以完成电脑的部分功能。而Android平台在网络方面的功能主要包括浏览器、IM(即时信息)、邮件等。1.3 媒体播放器随着多媒体技术的发展应用,在移动电话上进行音频和视频播放已经成为经常使用的功能。由此,Android平台具有支持更多的音频/视频格式,支持更高分辨率的视频,可更流畅地播放视频,以及支持网络流媒体等功能。1.4 媒体获取设备随着移动电话与媒体获取设备的集成日益增强,Android平台提供了照相机、录音机、摄像机等功能。1.5 多类型的连接设备Android平台提供了多种连接方式,如USB、GPS、红外、蓝牙、无线局域网等。1.6 具有友好和绚丽的用户界面Android平台具有友好的用户界面,使用户容易学习和操作;同时具有绚丽的用户界面,具有良好的视觉效果。1.7 可以个性化定制的平台Android平台针对于用户的个性化需求,提供了全面自定义手机的功能。除了上述介绍的Android平台的功能以外,其在技术上还具有以下几个方面的特性:全开放智能移动电话平台。支持多硬件平台。使用众多的标准化技术。核心技术完整、统一。完善的SDK和文档。完善的辅助开发工具。2、 超级马里奥游戏介绍2.1 超级马里奥的由来超级马里奥全名超级马里奥兄弟,是任天堂公司出品的著名横版过关游戏,最早在红白机上推出,有多款后续作品,迄今多个版本合共销量已突破5亿4000万套。其中的主角马里奥、路易基、碧奇公主、奇诺比奥等等已成为任天堂的招牌人物。主角马里奥日文原名,英文译作Mario,在译成中文时因时代不同,华语圈地区不同而译作“马力欧”“玛丽”等情况也确有存在。根据任天堂公布的官方中文译名和牛津词典,现在一般称为“马里奥”。所以本文一般用游戏全名超级马里奥兄弟。在E3 2013的任天堂直面会中,官方公开了3D马里奥新作超级马里奥3D世界。这款游戏于2013年11月21日发售,对应平台则为WiiU。2.2 超级玛丽玩法介绍超级马里奥是一个通过前后左右和两个功能键来控制一个小人(马里奥),使得马里奥通过一个个有怪物、陷阱的关卡的冒险类休闲游戏。3、 本文章节安排3.1 第一章在这一章中我对安卓系统做了一个简单的介绍,以及超级玛丽这个游戏的游戏背景和玩法的说明,以及后面章节内容的安排。3.2 第二章这章介绍了安卓系统架构做了一个介绍,并对android开发环境的搭建方法做了一个详细的说明。3.3 第三章第2章 Android系统架构以及开发环境1、 android平台架构1.1 架构图直观下面这张图展示了Android系统的主要组成部分:图1、 Android系统架构(来源于:android sdk)可以很明显看出,Android系统架构由5部 分组成,分别是:Linux Kernel、Android Runtime、Libraries、Application Framework、Applications。第二部分将详细介绍这5个部分。2、 开发环境的搭建2.1 所需资源Android开发环境的搭建需要JDK、eclipse、SDK。JDK是整个Java的核心,eclipse是开发工具,SDK是google提供的资源包。下图是所需要的资源:2.2 安装JDK双击jdk程序,按默认向导安装好jdk后,还要配置相应的环境变量,具体步骤如下:配置完毕后,通过cmd运行以下命令:java -version如果出现如下图的信息,则设置成功。2.3 安装eclipse我这下载的是免安装版的,直接将eclipse压缩包解压到安装地址就行,下图为eclipse运行后的效果图。2.4 安装SDK打开压缩包后直接双击安装程序,按向导默认安装SDK,然后运行SDK Manager,在SDK Manager中下载好所需要的资源。2.5 安装配置ADT 在线安装ADT速度比较慢,而且有可能安装不了,所以我先把ADT下载下来,然后离线安装。步骤如下图:然后一路按下一步,就可以安装成功了。接下来再配置ADT,选择 Window - Preferences ,在弹出面板中就会看到Android设置项,填上安装的SDK路径,如图:到这里,开发环境就搭建完毕了。第3章 游戏总体设计1、 数据结构的设计超级马里奥运行效果图如下:其中,一共包含四大类对象,分别是马里奥,地图块,食物和怪物,其中食物包括蘑菇和花两种,怪物包括三角怪,乌龟,食人花和背刺怪。在游戏运行过程中,这些对象的数据都是必须知道的关键数据,比如说地图块的位置,马里奥的位置、速度、方向等等,并根据这些数据的反馈来更新游戏状态。具体的数据结构设计如下:1.1 马里奥的数据马里奥数据相对复杂,除了位置信息之外,还有马里奥变化信息,速度信息,动作信息等。主要数据定义如下:startX,startY马里奥初始位置level马里奥等级信息,等级越高,马里奥身体越大xSpeed,ySpeed马里奥的移动速度lifevalue马里奥的生命值state马里奥的当前状态,有向前、向后、向左和向右四种状态jumping马里奥是否处于跳跃状态最后,本人将马里奥相关数据包装为完整类结构:Mario。1.2 地图块的数据游戏地图有地图块组成,地图会随着马里奥向前走而往后推移,所以还要一个数据来表示地图推移速度。主要数据定义如下:Map18256地图块的坐标xSpeed 地图块的平移速度1.3 食物的数据蘑菇出现后会跳跃,根据地图的移动方向来决定蘑菇的跳跃方向。count蘑菇的弹跳次数dir蘑菇运动方向move记录每次蘑菇跳起高度最后,本人将食物的相关数据包装为完整类结构:MushRoom。2、总体设计流程2.1 软件实现思路马里奥的移动是通过触控屏幕来控制,在代码中通过添加触摸事件来检测屏幕是否被触摸,然后相应的改变马里奥的坐标属性。怪物和金币的移动是规律性的,是不可控制的,所以怪物的坐标属性是根据时间的变化而变化。移动效果实现后,就需要检测马里奥是否碰撞到其他单位,这些单位包括障碍方块和怪物,如果碰到障碍方块则不能继续移动,如果碰到怪物,则马里奥的生命属性减少。检测碰撞的方法是判断马里奥与周围一定范围内的物体的坐标有没有重合,如果重合则为碰撞,没有重合则没有碰撞。这里只要检测马里奥周围一部分范围的单位,并不需要整个地图检测,这样可以提高程序流畅度。图三、 程序流程图3、 贪吃蛇游戏的主要功能模块设计与实现基于Android的超级马里奥主要包括游戏实体模块、游戏控制模块和一些补充的模块3.1 游戏实体模块游戏实体显示先通过对图片等一些资源加载,然后显示出来来实现菜单和地图等实体的显示。首先我们将需要用到的资源图片粘贴到android项目的assets文件夹中,loadactivity.java用于来加载这些资源,在loadingactivity的onCreate方法中,先设置为全屏状态,因为我们需要用一个进度条来显示图片加载的进度,所以,在这里还要启动一个线程来加载图片。LoadResource.java里面是用来加载图片资源的方法,Loadactivity类就是通过继承loadResource类来实现加载资源功能,加载图片的主要代码如下:canvas.drawColor(Color.BLACK);/绘制红色进度条canvas.drawBitmap(red, x, y, null);/绘制黄色进度条canvas.save();canvas.clipRect(x, y, x + LoadResource.temp * width, y + yellow.getHeight();canvas.drawBitmap(yellow, x, y, null);canvas.restore();paint.setColor(Color.YELLOW);/渐变效果paint.setAlpha(alphaindex+);if(index alpha.length - 1) index = 0;在进度条读完之后(即图片加载完之后)就要进入菜单界面,所以我们再在src文件夹添加一个muneview类,这个类就是用来实现菜单显示。这个菜单拥有有一个滚动的背景,实现主要滚动背景的代码如下:public void Draw()this.canvas = sh.lockCanvas();if(canvas != null)paint.setColor(Color.YELLOW);/绘制背景canvas.drawBitmap(LoadResource.map.get(0), x1-=2, 0, null);canvas.drawBitmap(LoadResource.map.get(0), x2-=2 ,0, null);if(x1 = -LoadActivity.ScreenWidth)x1 = LoadActivity.ScreenWidth;if(x2 move.length - 1)index = 0;break;case BUTTON:this.StartGame.Draw(canvas, paint);this.Options.Draw(canvas, paint);this.Score.Draw(canvas, paint);this.Exit.Draw(canvas, paint);break;this.sh.unlockCanvasAndPost(canvas);在背景图片完成之后,我们再添加三个按钮,分别是开始游戏,设置,退出,然后设置三个按钮的属性,然后再在Drow方法里显示出来。还要给按钮添加触发事件监听器。3.2 游戏控制模块的实现游戏主要需要完成运动物体的运动控制以及运动物体的碰撞检测:3.2.1 马里奥控制实现地图制作完后,就开始制作主角马里奥,马里奥拥有生命,当前状态(向左或向右),等级(吃蘑菇后等级提高)等属性。新建一个mario类,这个类就是用于实现马里奥的这些属性和控制方法,由于马里奥的控制是通过键盘控制,所以在这里添加按键时间,当检测到按钮按下是,马里奥坐标开始变化,如果按钮放开,马里奥则停止。马里奥的碰撞检测具体主要代码如下:public void Logic(MarioView mv)onLand = false;this.left = true;this.right = true;if(this.hp 0)/背景的碰撞检测for(int i=0; i this.x - this.image.getWidth()*2 & t.x this.x + this.image.getWidth()*2)if(t.getType() = 133 | t.getType() = 134 | t.getType() = 135 | t.getType() = 77 | t.getType() = 93)if(t.MoreRectangle_CollisionWithSprite(this, t.getType() = 77 | t.getType() = 93 ? rect : rect2)if(t.getType() = 133 | t.getType() = 134 | t.getType() = 135 )this.onLand = true;this.jumping = ;if(this.jumpTime t.x)mv.getNowLevel().isWin = true;/前景的碰撞检测for(int i=0; i this.x - this.image.getWidth()*2 & t.x t.x - 16 & this.x t.x + 16 & this.y + this.rect.top t.y) this.y = t.y - this.image.getHeight();this.onLand = true;this.jumping = ;if(this.jumpTime t.x - 16 & this.x t.y) this.jumpTime = 0;switch(t.getType()case 21:if(t.value 0)if(this.level = 1)Level.food.add(new MushRoom(t.x,t.y,LoadResource.food.get(0),t);elseLevel.food.add(new Flower(t.x,t.y,LoadResource.food.get(1),t);t.value -;t.setJumpTime(1);MarioView.PlayMusic(15);break;case 37:if(t.value 0)mv.getNowLevel().getCoin().add(new Coin(t.x,t.y,LoadResource.coin.get(0),1);t.value -;t.setJumpTime(1);MarioView.PlayMusic(3);score+=10;coin_value+;break;MarioView.PlayMusic(7);/判断是否可以继续向右走if(this.y t.y - this.image.getHeight() & this.x t.y - this.image.getHeight() & this.x t.x )this.left = false;/判断跳跃还是下降if(this.jumpTime 0)this.jumping = 跳;this.y-= ySpeed;if(this.ySpeed 0) this.ySpeed-;jumpTime -;else if(!onLand & jumpTime = 0)this.y+=ySpeed;if(this.ySpeed LoadActivity.ScreenHeight) this.Dead2(mv);3.2.2 地图移动控制模块的实现马里奥制作好之后,当他运动到地图中心是,我们要使地图会往后滚屏,不然的话马里奥会运动到地图边缘无法继续前进。然后新建一个map类,这个类是实现地图的背景图片,与地图块构成的地图不同,它只是一张跟随地图移动是图片,没有实际碰撞体积等实际效果,每一个关卡地图背景也不同,主要代码如下:public class Map extends Sprite/x轴移动速度private int xSpeed;public Map(float x, float y, Bitmap image)super(x, y, image);public void Move(int dir)if(dir = 1)xSpeed = 4;else xSpeed = -4;this.x+=xSpeed;public void Back()this.x = 0;3.2.3 马里奥与地图块碰撞检测碰撞检测的原理是:马里奥是一个正方形图片,地图块也是有方形图片组成,每个方形图片由16个像素点组成,所以在地图上就占16个坐标,当马里奥的坐标与地图块的坐标有相同的时,则马里奥与地图块相碰撞,马里奥则停止运动。具体实现代码在之前的马里奥控制实现模块中。3.2.4 蘑菇和花运动控制的实现蘑菇是能够移动的单位,它是按照一定移动规律来移动的,当马里奥与蘑菇碰撞之后马里奥生命值会增加并且变大,所以制作蘑菇先要设置蘑菇的属性,然后给他设置移动方法,最后再检测与马里奥是否碰撞;花是不能移动的单位,当马里奥与花碰撞之后,马里奥能够释放子弹,花的制作方法与蘑菇类似,只不过不用设置花的移动方法。碰撞检测的实现和马里奥与地图块的碰撞检测类似。新建一个mushroom类来实现蘑菇,新建一个flower类来实现花。蘑菇移动实现方法如下:public void Move()if(count 16)this.y-=2;count+=2;this.x = t.x;elseif(count18) count+;/左走if(dir = 1)this.x-=2;/右走else this.x+=2;蘑菇的碰撞检测代码如下:public void Logic(MarioView mv)if(this.count 18) return;this.onLand = false;/背景碰撞检测for(int i=0; i this.x - this.image.getWidth()*2 & t.x t.x - 16 & this.x t.x + 16 & this.y t.y) this.y = t.y - this.image.getHeight(); this.onLand = true; this.index = 0;/前景碰撞检测for(int i=0; i this.x - this.image.getWidth()*2 & t.x t.x - 16 & this.x t.x + 16 & this.y t.y - this.image.getHeight() & this.x t.y - this.image.getHeight() & this.x t.x ) this.dir = 2;/下降if(!onLand)this.y+=this.moveindex;if(index =360)this.degrees=0;public void Jump()/跳跃方法if(this.state.indexOf(跳)=-1 & onLand)this.jumpTime=5;this.ySpeed=5;this.state=跳;public void Move()/左右移动方法this.x+=this.xSpeed;/判断是否越屏if(this.x + this.image.getWidth() LoadActivity.ScreenWidth | this.y LoadActivity.ScreenHeight)this.hp = 0;/上下移动方法public void UpDownMove()if(this.jumpTime0)this.y-=ySpeed;if(ySpeed0)ySpeed-;this.state=跳;this.jumpTime-;else if(this.jumpTime=0 & !onLand)this.y+=ySpeed;if(ySpeed 0)this.deadTime -;if(this.deadTime = 0)this.hp = 0;try Thread.sleep(25); catch (InterruptedException e) e.printStackTrace();背刺怪:public void Back()this.x = startX;this.y = startY;this.index = 3;this.xSpeed = 2;this.changeTime = 4;this.dir = 2;this.hp = 1;this.hit_bullet_or_tortois_dir = 0;this.hitbullet_or_tortoise = false;this.udindex = 0;乌龟:public void CollisionWithEnemy(MarioView mv) for(int i=0; i this.updownmove.length - 1)count = 0;3.2.7 怪物的碰撞检测怪物的碰撞包括马里奥与怪物的碰撞、怪物与子弹的碰撞、龟壳与怪物的碰撞。马里奥与怪物的碰撞和马里奥与地图块的碰撞类似,不过碰撞之后情况分为几种,当从上往下碰撞三角和乌龟时,怪物死亡,其他情况都是马里奥生命属性值减少。怪物与子弹的碰撞以及龟壳与怪物的碰撞和马里奥与地图块的碰撞类似,当怪物与子弹的碰撞有、龟壳与怪物碰撞,都是怪物死亡。具体实现的主要代码在之前的马里奥的实现模块中。第4章 完成效果图1、完成效果图效果图一 菜单界面效果图二 游戏界面效果图三 结束界面效果图四 发射子弹效果图五 蘑菇总结在本次课题中,主要完成了以下几个方面的事:1、 对Android开发平台的Eclipse的搭建;2、 对游戏程序的设计,包括界面设计,流程设计和功能模块设计等;3、 在开发平台上编码实现游戏;4、 调试程序和完善程序功能。本次课题,使我对Android和Android应用程序开发有了粗略的了解:1、要利用PC开发Android应用程序时需要搭建开发环境Eclipse。此外,还需要安装java、Android SDK,并且还要安装ADT并设置在线更新,然后根据需要创建AVD(模拟器)。 2、利用Eclipse开发Android应用程序时,所创建的工程通常包括这几个部分:src目录,源码存放的地方;gen目录,这个文件夹存放资源的ID;Android4.2:创建工程时,选择平台的版本;assets目录:存放应用程序资源的目录,和res目录作用相同;bin目录:暂时没用;res目录:作用同assets;AndroidManifest.xml:清单文件;还有proguard.cfg和perties。3、此课题的关键部分在于游戏数据的设计,数据的意义和数据的使用应当要简明和方便,且易于控制,数据设计巧妙,程序能够很容易的实现功能,否则,不仅工作量大,程序效率也不高。虽然马里奥只是一款很久以前的小游戏,然而我在做的过程中却充满坎坷,从开发环境的搭建到程序的调试过程中,问题连连,比如JDK版本问题,或者创建AVD失败,又或者R文件的读取错误。在不断地解决问题中,自己对Android和Android应用程序的理解也不断加深。本次课题切实提供了一此很好的实践机会,通过本次实践,不仅使我对开发当前主流智能手机操作系统应用程序有了一定了解,而且也使我编程能力有了进一步提高。但是,作为一款常见的小游戏,我不仅见过,还玩过各种版本的马里奥游戏,在那些版本的游戏中,不仅界面美观,而且趣味性和功能性也很强,这使我自己意识到自己的这点程度还不够,在一款常见的小游戏上尚不能完美实现,可见跟别的开发者差距很大,因此,我还需努力提高自己的能力。参考文献1 李刚. 疯狂JAVA讲义 M.北京:电子工业出版社,2009.2 郭宏志.Android应用开发详解M.北京:电子工业出版社,2010.3 李刚. 疯狂ANDORID讲义 M.北京:电子工业出版社,2009.4 Ed Burnette. Hello,Android:introducing Googles Mobile Development PlatformM.北京:人民邮电出版社,2009.5 姚尚朗. Android开发入门与实战M.北京:人民邮电出版社,2009.6 Scott Oaks,Henry Wong. Java Threads,Third EditionM.南京:东南大学出版社,2006.7 Thomas Petchel.Java2 Game ProgrammingM.北京:清华大学出版社,2005.8 E2EColud工作室.深入浅出Google Android.北京:人民邮电出版社,2009.9 余志龙.Google Android SDK开发范例大全M.北京:人民邮电出版社,2010.10 Rick Rogers,John Lombardo.Android Application DevelopmentM.北京:人民邮电出版社,2010.11 莫尼逊.J2ME手机游戏编程入门M.北京:人民邮电出版社,2005.致谢光阴似箭,一转眼便度过了大学的四个年头,在这四个年头里,有着莫多的任何事给了我感触,伴我一路成长。首先,在此论文撰写过程中,要特别感谢我的导师杨勃老师,谢谢他在这几个月中为我所做的一切,他不求回报,无私奉献的精神很让我感动,再次向他表示由衷的感谢。其次,我要感谢所有教授过我课程的老师们,不积硅步,无以至千里,正因为你们,我才能在以后的路上行走的更远。 最后,我要感谢我的父母、亲友、同学们,是你们伴我一路走来,与我度过了一段段精彩的人生。没有他们辛勤的付出也就没有我的今天,在这一刻,将最崇高的敬意献给你们!附录:超级马里奥游戏中前面没有写到的主要的类的代码: LoadActivitypublic class LoadActivity extends GameActivity implements RunnableOverrideprotected void onCreate(Bundle savedInstanceState) new Thread(this).start();/设置全屏this.SetScreenToFull();/取得屏幕大小this.GetScreenSize();super.onCreate(savedInstanceState);super.setContentView(new LoadView(this);Overridepublic void run() /加载图片LoadResource.LoadImage(this);LoadResource.LoadMusic(this);Intent i = new Intent(this,MenuActivity.class);this.startActivity(i);this.finish(); LoadResourcepublic class LoadResource /mario图片集合public

温馨提示

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

评论

0/150

提交评论