基于android超级玛丽制作毕业论文.docx
《基于android超级玛丽制作毕业论文.docx》由会员分享,可在线阅读,更多相关《基于android超级玛丽制作毕业论文.docx(65页珍藏版)》请在冰豆网上搜索。
基于android超级玛丽制作毕业论文
毕业设计(论文)
题目:
基于安卓的超级马里奥制作
毕业设计(论文)原创性声明和使用授权说明
原创性声明
本人郑重承诺:
所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:
日 期:
指导教师签名:
日 期:
使用授权说明
本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:
按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:
日 期:
学位论文原创性声明
本人郑重声明:
所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律后果由本人承担。
作者签名:
日期:
年月日
学位论文版权使用授权书
本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权 大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
作者签名:
日期:
年月日
导师签名:
日期:
年月日
注意事项
1.设计(论文)的内容包括:
1)封面(按教务处制定的标准封面格式制作)
2)原创性声明
3)中文摘要(300字左右)、关键词
4)外文摘要、关键词
5)目次页(附件不统一编入)
6)论文主体部分:
引言(或绪论)、正文、结论
7)参考文献
8)致谢
9)附录(对论文支持必要时)
2.论文字数要求:
理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。
3.附件包括:
任务书、开题报告、外文译文、译文原文(复印件)。
4.文字、图表要求:
1)文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准请他人代写
2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准规范。
图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画
3)毕业论文须用A4单面打印,论文50页以上的双面打印
4)图表应绘制于无格子的页面上
5)软件工程类课题应有程序清单,并提供电子文档
5.装订顺序
1)设计(论文)
2)附件:
按照任务书、开题报告、外文译文、译文原文(复印件)次序装订
3)其它
摘要
超级马里奥是一款风靡全球的横版过关游戏。
游戏场景一般是设定在开阔空间或是狭窄的通道里,要求玩家通过方向键操作游戏主角马里奥沿途消灭或绕过怪物的同时尽可能多的攒取金币,并不断地完成各个关卡。
本文主要介绍了基于安卓操作系统的超级马里奥游戏的应用程序设计和实现。
首先简要介绍了安卓操作系统,然后介绍了开发环境,并详细描述了eclipse下开发环境的具体搭建步骤。
最后详细探讨了超级马里奥游戏的设计,最终实现了一个功能完备的Android超级马里奥游戏。
关键词:
智能手机安卓Java语言超级马里奥游戏
ABSTRACT
SuperMarioisapopularglobalhorizontalclearanceversionofthegame.Thegamesceneisgenerallysetintheopenspaceornarrowchannels,alongwiththearrowkeystoeliminategameplayerrequiresoperationoftheprotagonistofthegameMarioorbypassthemonsterasmuchaspossiblewhilesavedfromthegoldcoins,andcontinuetocompleteeachlevel.
ThispapermainlyintroducestheapplicationdesignandimplementationofAndroidoperatingsystembasedonsuperMariogame.BrieflyintroducestheAndroidoperatingsystem,andthenintroducesthedevelopmentenvironment,andadetaileddescriptionofthespecificstepstobuilddevelopmentenvironmentundereclipse.Finally,discussesthedesignofsuperMariogame,theultimaterealizationofafull-featuredAndroidsuperMariogame.
Keywords:
intelligentmobilephoneAndroidJavaSuperMariogame
目录
第1章绪论
1、android系统介绍
随着科技的发展,移动电话(MobilePhone)正朝着智能化的方向发展,逐步成为多种工具的功能载体,而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,在译成中文时因时代不同,华语圈地区不同而译作“马力欧”“玛丽”等情况也确有存在。
根据任天堂公布的官方中文译名和牛津词典,现在一般称为“马里奥”。
所以本文一般用游戏全名《超级马里奥兄弟》。
在E32013的任天堂直面会中,官方公开了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系统架构(来源于:
androidsdk)
可以很明显看出,Android系统架构由5部分组成,分别是:
LinuxKernel、AndroidRuntime、Libraries、ApplicationFramework、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,然后运行SDKManager,在SDKManager中下载好所需要的资源。
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地图块的数据
游戏地图有地图块组成,地图会随着马里奥向前走而往后推移,所以还要一个数据来表示地图推移速度。
主要数据定义如下:
Map[18][256]
地图块的坐标
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(alpha[index++]);
if(index>alpha.length-1)
{
index=0;
}
在进度条读完之后(即图片加载完之后)就要进入菜单界面,所以我们再在src文件夹添加一个muneview类,这个类就是用来实现菜单显示。
这个菜单拥有有一个滚动的背景,实现主要滚动背景的代码如下:
publicvoidDraw()
{
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<=-LoadActivity.ScreenWidth)
{
x2=LoadActivity.ScreenWidth;
}
switch(menuState)
{
caseUI:
//绘制UI
canvas.drawBitmap(LoadResource.ui.get
(1),
(LoadActivity.ScreenWidth-LoadResource.ui.get
(1).getWidth())/2,
LoadActivity.ScreenHeight/7-move[index++],
null);
canvas.drawBitmap(LoadResource.ui.get(0),
(LoadActivity.ScreenWidth-LoadResource.ui.get(0).getWidth())/2,
LoadActivity.ScreenHeight/2,
null);
if(index>move.length-1)
{
index=0;
}
break;
caseBUTTON:
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类,这个类就是用于实现马里奥的这些属性和控制方法,由于马里奥的控制是通过键盘控制,所以在这里添加按键时间,当检测到按钮按下是,马里奥坐标开始变化,如果按钮放开,马里奥则停止。
马里奥的碰撞检测具体主要代码如下:
publicvoidLogic(MarioViewmv)
{
onLand=false;
this.left=true;
this.right=true;
if(this.hp>0)
{
//背景的碰撞检测
for(inti=0;i{
Tilet=mv.getNowLevel().getB_tile().get(i);
if(t.x>this.x-this.image.getWidth()*2&&t.x{
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<=0)
{
this.ySpeed=0;
this.y=t.y-this.image.getHeight();
}
}
else
{
if(this.x+this.image.getWidth()/2>t.x)
{
mv.getNowLevel().isWin=true;
}
}
}
}
}
}
//前景的碰撞检测
for(inti=0;i{
Tilet=mv.getNowLevel().getQ_tile().get(i);
if(t.x>this.x-this.image.getWidth()*2&&t.x{
if(t.MoreRectangle_CollisionWithSprite(this,rect))
{
//是否处于障碍物上
if(this.x>t.x-16&&this.x{
this.y=t.y-this.image.getHeight();
this.onLand=true;
this.jumping="";
if(this.jumpTime<=0)
{
this.ySpeed=0;
}
}
//是否顶到障碍物
if(this.x>t.x-16&&this.xt.y)
{
this.jumpTime=0;
switch(t.