毕业论文基于android超级玛丽

 时间:2020-09-19  贡献者:322fk.com

导读:(完整版)基于android超级玛丽制作毕业论文,学号:14112200674毕业设计(论文)题目: 基于安卓的超级马里奥制作作 院者 别届别 业 电子信息工程信息与通信工程学院 专职 称指导教师 完成时间副教授摘要超级马里奥是一款风靡全

(完整版)基于android超级玛丽制作毕业论文
(完整版)基于android超级玛丽制作毕业论文

学号:14112200674毕业设计(论文)题目: 基于安卓的超级马里奥制作作 院者 别届别 业 电子信息工程信息与通信工程学院 专职 称指导教师 完成时间副教授

摘要超级马里奥是一款风靡全球的横版过关游戏。

游戏场景一般是设定在开阔空 间或是狭窄的通道里, 要求玩家通过方向键操作游戏主角马里奥沿途消灭或绕过 怪物的同时尽可能多的攒取金币,并不断地完成各个关卡。

本文主要介绍了基于安卓操作系统的超级马里奥游戏的应用程序设计和实 现。

首先简要介绍了安卓操作系统,然后介绍了开发环境 , 并详细描述了 eclipse 下开发环境的具体搭建步骤。

最后详细探讨了超级马里奥游戏的设计, 最终实现了一个功能完备的 Android 超级马里奥游戏。

关键词:智能手机 安卓 Java 语言 超级马里奥游戏1

ABSTRACTSuper Mario is a popular global horizontal clearance version of the game. The game scene is generally set in the open space or narrow channels, along with the arrow keys to eliminate game player requires operation of the protagonist of the game Mario or bypass the monster as much as possible while saved from the gold coins, and continue to complete each level. This paper mainly introduces the application design and implementation of Android operating system based on super Mario game. Briefly introduces the Android operating system, and then introduces the development environment, and a detailed description of the specific steps to build development environment under eclipse. Finally, discusses the design of super Mario game, the ultimate realization of a full-featured Android super Mario game. Keywords: intelligent mobile phone Android Java Super Mario game2

目录3

第一章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 和文档。

完善的辅助开发工具。

4

2、 超级马里奥游戏介绍2.1 超级马里奥的由来 《超级马里奥》全名《超级马里奥兄弟》,是任天堂公司出品的著名横版过 关游戏,最早在红白机上推出,有多款后续作品,迄今多个版本合共销量已突破 5 亿 4000 万套。

其中的主角马里奥、路易基、碧奇公主、奇诺比奥等等已成为 任天堂的招牌人物。

主角马里奥日文原名マリオ,英文译作 Mario,在译成中文 时因时代不同,华语圈地区不同而译作“马力欧”“玛丽”等情况也确有存在。

根据任天堂公布的官方中文译名和牛津词典,现在一般称为“马里奥”。

所以本 文一般用游戏全名《超级马里奥兄弟》。

在 E3 2013 的任天堂直面会中,官方公开了 3D 马里奥新作《超级马里奥 3D 世界》。

这款游戏于 2013 年 11 月 21 日发售,对应平台则为 WiiU。

2.2 超级玛丽玩法介绍 超级马里奥是一个通过前后左右和两个功能键来控制一个小人(马里奥), 使得马里奥通过一个个有怪物、陷阱的关卡的冒险类休闲游戏。

3、 本文章节安排3.1 第一章 在这一章中我对安卓系统做了一个简单的介绍, 以及超级玛丽这个游戏的游戏背景和玩 法的说明,以及后面章节内容的安排。

3.2 第二章 这章介绍了安卓系统架构做了一个介绍, 并对 android 开发环境的搭建方法做了一个详 细的说明。

3.3 第三章5

6

第二章 Android 系统架构以及开发环境1、 android 平台架构1.1 架构图直观 下面这张图展示了 Android 系统的主要组成部分:图 1、 Android 系统架构(来源于:android sdk) 可以很明显看出,Android 系统架构由 5 部 分组成,分别是:Linux Kernel、 Android Runtime、Libraries、Application Framework、Applications。

第二 部分将详细介绍这 5 个部分。

2、开发环境的搭建7

2.1所需资源Android 开发环境的搭建需要 JDK、eclipse、SDK。

JDK 是整个 Java 的核心, eclipse 是开发工具,SDK 是 google 提供的资源包。

下图是所需要的资源:2.2 安装 JDK 双击 jdk 程序,按默认向导安装好 jdk 后,还要配置相应的环境变量,具体 步骤如下:配置完毕后,通过 cmd 运行以下命令:java -version 如果出现如下图的信息, 则设置成功。

8

2.3安装 eclipse我这下载的是免安装版的,直接将 eclipse 压缩包解压到安装地址就行,下图为 eclipse 运行 后的效果图。

9

2.4 安装 SDK打开压缩包后直接双击安装程序,按向导默认安装 SDK,然后运行 SDK Manager,在 SDKManager 中下载好所需要的资源。

2.5 安装配置 ADT在线安装 ADT 速度比较慢,而且有可能安装不了,所以我先把 ADT 下载下来,然后离线 安装。

步骤如下图:10

选择 Window -> Preferences ,在弹出面板中就会看到 Android 设置项,填上安装的 SDK 路径, 如图:然后一路按下一步,就可以安装成功了。

接下来再配置 ADT ,11

到这里,开发环境就搭建完毕了。

12

第三章 游戏总体设计1、 数据结构的设计超级马里奥运行效果图如下:其中,一共包含四大类对象,分别是马里奥,地图块,食物和怪物,其中食 物包括蘑菇和花两种,怪物包括三角怪,乌龟,食人花和背刺怪。

在游戏运行过 程中,这些对象的数据都是必须知道的关键数据,比如说地图块的位置,马里奥 的位置、速度、方向等等,并根据这些数据的反馈来更新游戏状态。

具体的数据 结构设计如下: 1.1 马里奥的数据 马里奥数据相对复杂, 除了位置信息之外, 还有马里奥变化信息, 速度信息, 动作信息等。

主要数据定义如下: startX,startY 马里奥初始位置 level 马里奥等级信息,等级越高,马里奥身体越大 xSpeed,ySpeed 马里奥的移动速度 lifevalue 马里奥的生命值 state 马里奥的当前状态,有向前、向后、向左和向右四种状态 jumping 马里奥是否处于跳跃状态 最后,本人将马里奥相关数据包装为完整类结构:Mario。

1.2 地图块的数据 游戏地图有地图块组成,地图会随着马里奥向前走而往后推移,所以还要一 个数据来表示地图推移速度。

主要数据定义如下: Map[18][256] xSpeed 地图块的坐标 地图块的平移速度13

1.3 食物的数据 蘑菇出现后会跳跃,根据地图的移动方向来决定蘑菇的跳跃方向。

count dir move[] 蘑菇的弹跳次数 蘑菇运动方向 记录每次蘑菇跳起高度 最后,本人将食物的相关数据包装为完整类结构:MushRoom。

2、总体设计流程2.1 软件实现思路 马里奥的移动是通过触控屏幕来控制,在代码中通过添加触摸事件来检测屏 幕是否被触摸, 然后相应的改变马里奥的坐标属性。

怪物和金币的移动是规律性 的,是不可控制的,所以怪物的坐标属性是根据时间的变化而变化。

移动效果实现后,就需要检测马里奥是否碰撞到其他单位,这些单位包括障 碍方块和怪物,如果碰到障碍方块则不能继续移动,如果碰到怪物,则马里奥的 生命属性减少。

检测碰撞的方法是判断马里奥与周围一定范围内的物体的坐标有 没有重合,如果重合则为碰撞,没有重合则没有碰撞。

这里只要检测马里奥周围 一部分范围的单位,并不需要整个地图检测,这样可以提高程序流畅度。

图三、 程序流程图14

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 类, 这个类就是用来实现菜单显示。

这个菜单拥有 有一个滚动的背景,实现主要滚动背景的代码如下: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);15

if(x1 <= -LoadActivity.ScreenWidth) { x1 = LoadActivity.ScreenWidth; } if(x2 <= -LoadActivity.ScreenWidth) { x2 = LoadActivity.ScreenWidth; } switch(menuState) { case UI: //绘制 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; 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); } }16

在背景图片完成之后,我们再添加三个按钮,分别是开始游戏,设置,退出, 然后设置三个按钮的属性,然后再在 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 = "";17

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(int i=0; i this.x - this.image.getWidth()*2 && t.x < this.x + this.image.getWidth()*2) { if(t.MoreRectangle_CollisionWithSprite( this, rect)) { //是否处于障碍物上 if(this.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 <= 0) { this.ySpeed = 0; } } //是否顶到障碍物 if(this.x > t.x - 16 && this.x < t.x + 16 && this.y + (this.image.getHeight() - this.rect.top) > t.y)18

{ 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)); } else { Level.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); } //判断是否可以继续向右走19

if(this.y > t.y - this.image.getHeight() && this.x < t.x ) { this.right = false; } //判断是否可以继续向左走 else if(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.ySpeed--; jumpTime --; } else if(!onLand && jumpTime <= 0) { this.y+=ySpeed; if(this.ySpeed < 11) this.ySpeed++; this.jumping = "跳"; } if(this.y > LoadActivity.ScreenHeight) } } this.Dead2(mv);3.2.2 地图移动控制模块的实现 马里奥制作好之后,当他运动到地图中心是,我们要使地图会往后滚屏,不 然的话马里奥会运动到地图边缘无法继续前进。

然后新建一个 map 类,这个类是实现地图的背景图片,与地图块构成的地图 不同,它只是一张跟随地图移动是图片,没有实际碰撞体积等实际效果,每一个 关卡地图背景也不同,主要代码如下:public class Map extends Sprite {20

//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 蘑菇和花运动控制的实现 蘑菇是能够移动的单位,它是按照一定移动规律来移动的,当马里奥与蘑菇 碰撞之后马里奥生命值会增加并且变大,所以制作蘑菇先要设置蘑菇的属性,然 后给他设置移动方法,最后再检测与马里奥是否碰撞;花是不能移动的单位,当 马里奥与花碰撞之后,马里奥能够释放子弹,花的制作方法与蘑菇类似,只不过 不用设置花的移动方法。

碰撞检测的实现和马里奥与地图块的碰撞检测类似。

21

新建一个 mushroom 类来实现蘑菇,新建一个 flower 类来实现花。

蘑菇移动 实现方法如下:public void Move() { if(count < 16) { this.y-=2; count+=2; this.x = t.x; } else { if(count<18) 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 < this.x + this.image.getWidth()*2) { if(t.getType() == 133 || t.getType() == 134 || t.getType() == 135) { if(this.Rectangle_CollisionWithSprite(t))22

{ //是否处于障碍物上 if(this.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 this.image.getWidth()*2 ) { if(this.Rectangle_CollisionWithSprite(t)) { //是否处于障碍物上 if(this.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; } //右边是否碰到障碍物了 if(this.y > t.y - this.image.getHeight() && this.x < t.x ) { this.dir = 1; } //左边是否碰到障碍物了 else if(this.y > t.y - this.image.getHeight() && this.x > t.x ) { this.dir = 2; }23&& t.x < this.x +

} } } //下降 if(!onLand) { this.y+=this.move[index]; if(index < move.length -1) index++; } }花的实现方法与蘑菇类似,就不在这写出代码了。

3.2.5 马里奥的进化与发射子弹的实现 马里奥与蘑菇碰撞以后会变大,马里奥类有个代表马里奥当前状态的变量 level 用于记录马里奥是否变大,该值默认为 0,当碰撞蘑菇以后,该值变 1,马 里奥的图片切换成大图片, 并且马里奥能跳的更高。

马里奥变大以后再吃了花的 花,马里奥就可以释放子弹,level 值变成 2。

具体实现代码:public void ChangeRectSize() { if(this.level == 1) { if(this.state.indexOf("蹲")!= -1) { this.rect.left = 0 ; this.rect.top = 17; this.rect.right = 16; this.rect.bottom = 31; } else { this.rect.left = 0 ; this.rect.top = 11; this.rect.right = 16; this.rect.bottom = 31; } } else if(this.level == 2 || this.level == 3) { if(this.state.indexOf("蹲")!= -1) { this.rect.left = 0 ;24

this.rect.top = 16; this.rect.right = 16; this.rect.bottom = 31; } else { this.rect.left = 0 ; this.rect.top = 3; this.rect.right = 16; this.rect.bottom = 31; } }新建一个 bullet 类, 这个类就是用来实现马里奥吃了花之后发射子弹的效果, 这个类包含子弹的速度、出境状态、旋转角度等属性,还包括子弹的运动方法, 子弹的碰撞检测和前面的蘑菇碰撞检测类似, 这里就只写出子弹的移动控制具体 代码:public void DegreesPlus()//角度增加 { this.degrees+=60; if(this.degrees>=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() < 0 || this.x > LoadActivity.ScreenWidth || this.y > LoadActivity.ScreenHeight) {25

this.hp = 0; } }//上下移动方法 public void UpDownMove() { if(this.jumpTime>0) { this.y-=ySpeed; if(ySpeed>0)ySpeed--; this.state="跳"; this.jumpTime--; } else if(this.jumpTime<=0 && !onLand) { this.y+=ySpeed; if(ySpeed<5) ySpeed++; this.state="跳"; } }3.2.6 金币和敌人的实现 游戏里的金币分为两种,一种是需要马里奥碰撞特定的地图块才会出现的, 这种金币出现之后不需要马里奥再去碰撞它就可以直接加分, 另一种类似与地图 块一样显示在地图上的,马里奥碰撞以后就会消失,并加分。

第一种的实现比较 简单, 只需在马里奥与地图块碰撞的方法中加入加分的代码即可,第二种与花的 实现方法类似,只不过碰撞到花是改变马里奥的 level 属性值,碰撞到金币则是 改变游戏分数值。

游戏里的敌人一共有四种,分别是三角,背刺怪,乌龟和食人花。

背刺怪和 食人花只有通过子弹可以消灭, 马里奥本身不管从哪个角度碰撞,都会减少马里 奥本身的生命属性值, 三角和乌龟都可以通过除了子弹意外的马里奥本省从上往 下的碰撞将其消灭, 不过乌龟被消灭后会生成一个左右活动的龟壳,马里奥与之 碰撞会减少生命属性值, 其他怪物碰到龟壳也会减少生命属性值。

龟壳可以通过 从上往下碰撞和子弹消灭。

这四种怪物分别通过 triangle 类、thron 类、tortoise 类和 piranha 类来实现。

碰撞检测方法和马里奥的碰撞检测类似,但是每种怪物的移动方法有不同,这里 写出它们的移动控制的具体实现代码:26

1 三角怪: ○public void run() { while(this.deadTime > 0) { this.deadTime --; if(this.deadTime <= 0) { this.hp = 0; } try { Thread.sleep(25); } catch (InterruptedException e) { e.printStackTrace(); } } }2 背刺怪: ○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; }3 乌龟: ○public void CollisionWithEnemy(MarioView mv) { for(int i=0; i

if(this.name.equals("食人花")) continue; if(this != e) { if(this.Rectangle_CollisionWithSprite(e)) { if(e.hit_bullet_or_tortois_dir == 0) { mv.getMario().score+=10; if(this.dir == 2) { e.hit_bullet_or_tortois_dir = 2; } else { e.hit_bullet_or_tortois_dir = 1; } e.hitbullet_or_tortoise = true; MarioView.PlayMusic(2); } } } }4 食人花: ○public void Move() { this.y+=this.updownmove[count]; count++; if(count > this.updownmove.length - 1) { count = 0; } }3.2.7 怪物的碰撞检测 怪物的碰撞包括马里奥与怪物的碰撞、怪物与子弹的碰撞、龟壳与怪物的碰 撞。

马里奥与怪物的碰撞和马里奥与地图块的碰撞类似,不过碰撞之后情况分为 几种,当从上往下碰撞三角和乌龟时,怪物死亡,其他情况都是马里奥生命属性 值减少。

28

怪物与子弹的碰撞以及龟壳与怪物的碰撞和马里奥与地图块的碰撞类似,当 怪物与子弹的碰撞有、龟壳与怪物碰撞,都是怪物死亡。

具体实现的主要代码在之前的马里奥的实现模块中。

第四章 完成效果图1、完成效果图效果图一 菜单界面29

效果图二 游戏界面效果图三 结束界面效果图四 发射子弹30

效果图五 蘑菇31

总结在本次课题中,主要完成了以下几个方面的事: 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 和 project.properties。

3、此课题的关键部分在于游戏数据的设计,数据的意义和数据的使用应当 要简明和方便, 且易于控制, 数据设计巧妙, 程序能够很容易的实现功能, 否则, 不仅工作量大,程序效率也不高。

虽然马里奥只是一款很久以前的小游戏,然而我在做的过程中却充满坎坷, 从开发环境的搭建到程序的调试过程中,问题连连,比如 JDK 版本问题,或者创 建 AVD 失败,又或者 R 文件的读取错误……。

在不断地解决问题中,自己对 Android 和 Android 应用程序的理解也不断加深。

本次课题切实提供了一此很好 的实践机会, 通过本次实践, 不仅使我对开发当前主流智能手机操作系统应用程 序有了一定了解,而且也使我编程能力有了进一步提高。

但是,作为一款常见的 小游戏,我不仅见过,还玩过各种版本的马里奥游戏,在那些版本的游戏中,不 仅界面美观, 而且趣味性和功能性也很强,这使我自己意识到自己的这点程度还 不够,在一款常见的小游戏上尚不能完美实现,可见跟别的开发者差距很大,因 此,我还需努力提高自己的能力。

32

33

参考文献[1] 李刚. 疯狂 JAVA 讲义 [M].北京:电子工业出版社,2009. [2] 郭宏志.Android 应用开发详解[M].北京:电子工业出版社,2010. [3] 李刚. 疯狂 ANDORID 讲义 [M].北京:电子工业出版社,2009. [4] Ed Burnette. Hello,Android:introducing Google’s Mobile Development Platform[M].北京:人民邮电出版社,2009. [5] 姚尚朗. Android 开发入门与实战[M].北京:人民邮电出版社,2009. [6] Scott Oaks,Henry Wong. Java Threads,Third Edition[M].南京:东南大 学出版社,2006. [7] Thomas Petchel.Java2 Game Programming[M].北京:清华大学出版社,2005. [8] E2EColud 工作室.深入浅出 Google Android.北京:人民邮电出版社,2009. [9] 余志龙 .Google Android SDK 开发范例大全 [M].北京:人民邮电出版社, 2010. [10] Rick Rogers,John Lombardo.Android Application Development[M].北京: 人民邮电出版社,2010. [11] 莫尼逊.J2ME 手机游戏编程入门[M].北京:人民邮电出版社,2005.34

致谢光阴似箭,一转眼便度过了大学的四个年头,在这四个年头里,有着莫多的 任何事给了我感触,伴我一路成长。

首先,在此论文撰写过程中,要特别感谢我的导师杨勃老师,谢谢他在这几 个月中为我所做的一切,他不求回报,无私奉献的精神很让我感动,再次向他表 示由衷的感谢。

其次,我要感谢所有教授过我课程的老师们,不积硅步,无以至千里,正因 为你们,我才能在以后的路上行走的更远。

最后,我要感谢我的父母、亲友、同学们,是你们伴我一路走来,与我度过 了一段段精彩的人生。

没有他们辛勤的付出也就没有我的今天,在这一刻,将最 崇高的敬意献给你们!35

 
 

微信扫一扫 送福利