基于安卓的超级马里奥制作毕业设计论文.docx
《基于安卓的超级马里奥制作毕业设计论文.docx》由会员分享,可在线阅读,更多相关《基于安卓的超级马里奥制作毕业设计论文.docx(55页珍藏版)》请在冰豆网上搜索。
![基于安卓的超级马里奥制作毕业设计论文.docx](https://file1.bdocx.com/fileroot1/2022-12/12/0aadf835-a08d-4e08-b8e0-658db916662b/0aadf835-a08d-4e08-b8e0-658db916662b1.gif)
基于安卓的超级马里奥制作毕业设计论文
学号:
14112200674
毕业设计(论文)
题目:
基于安卓的超级马里奥制作
作者届别
院别信息与通信工程学院专业电子信息工程
指导教师职称
完成时间
摘要
超级马里奥是一款风靡全球的横版过关游戏。
游戏场景一般是设定在开阔空间或是狭窄的通道里,要求玩家通过方向键操作游戏主角马里奥沿途消灭或绕过怪物的同时尽可能多的攒取金币,并不断地完成各个关卡。
本文主要介绍了基于安卓操作系统的超级马里奥游戏的应用程序设计和实现。
首先简要介绍了安卓操作系统,然后介绍了开发环境,并详细描述了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.getType())
{
case21:
if(t.value>0)
{
if(this.level==1)
{
Level.food.add(newMushRoom(t.x,t.y,LoadResource.food.get(0),t));
}
else
{
Level.food.add(newFlower(t.x,t.y,LoadResource.food.get
(1),t));
}
t.value--;
t.setJumpTime
(1);
MarioView.PlayMusic(15);
}
break;
case37:
if(t.value>0)
{
mv.getNowLevel().getCoin().add(newCoin(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{
this.right=false;
}
//判断是否可以继续向左走
elseif(this.y>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.ySpee