本科毕业设计基于android平台的游戏设计太空保卫战.docx
《本科毕业设计基于android平台的游戏设计太空保卫战.docx》由会员分享,可在线阅读,更多相关《本科毕业设计基于android平台的游戏设计太空保卫战.docx(30页珍藏版)》请在冰豆网上搜索。
本科毕业设计基于android平台的游戏设计太空保卫战
石家庄科技信息职业学院
毕业论文
题目:
基于Android平台的游戏设计——太空保卫战
学号:
090124016
姓名:
宋少伟
专业班级:
游戏开发
指导教师:
刘永伟
完成日期:
2011年12月16日
太空保卫战
摘要:
Android是Google公司为首的OHA研发的一个开源智能手机平台。
随着互联网和物联网的广泛应用,得到了学术界和产业界的支持,越来越多的创意应用到Android应用程序中,席卷了整个手机产业。
近来随着手机的快速发展,各种各样的手机游戏层出不穷,使得我们能有更多的娱乐项目,而射击类游戏是节奏比较快,要求玩家通过快速的反应与游戏进行交互,从而考验玩家的灵敏度以及放松玩家大脑,是玩家身心休闲娱乐
太空保卫战便是运行在Android上的一种滚屏动作类游戏,其中融入了很多动作类游戏特有的技术,且画面流畅、声音震撼。
关键词:
Android应用程序J2MEPlane类EnemyPlane类Bullet类
Tooemptyanddefendwar
Abstract:
AndroidisGooglecompanyheadedbyOHAresearchanddevelopmentofanopensourceplatformofintelligentmobilephone.WiththeadventoftheInternetandnetworkingapplications,obtainedtheacademicandindustrysupport,moreandmorecreativeapplicationtotheAndroidapplication,sweptthewholeofmobilephoneindustry.
Recentlywiththerapiddevelopmentofmobilephone,allkindsofmobilephonegameemergeinanendlessstream,sothatwecanhavemoreentertainmentprojects,whileshootinggameisrelativelyfastpace,forgameplayerthroughrapidresponseandgamestointeract,soastotestthesensitivityofgameplayerandrelaxedgameplayerbrain,mentalandphysicalrecreationisgameplayer
SpacewarisrunintheAndroidonascrollingactiongames,whichincorporatesmanyactiongamesuniquetechnology,andsmoothpicture,soundrock.
Keywords:
AndroidapplicationJ2MEclassPlaneclassEnemyPlaneclassBullet
目录
一、引言……………………………………………………………3
(一)课题背景……………………………………………………3
(二)本课题研究的意义…………………………………………3
(三)本课题的研究方法………………………………………3
二、课题相关基础…………………………………………………4
(一)游戏情节…………………………………………………4
(二)功能介绍……………………………………………………4
(三)目标平台……………………………………………………7
三、设计方案………………………………………………………8
(一)游戏的架构jagou___________________________________________________________________________________________________________________________…………………………………………………8
(二)游戏的框架简介图…………………………………………9
(三)游戏界面基本框架及介绍…………………………………10
(四)游戏总流程图………………………………………………11si_____________________________________________________________________________________________________________________________
(五)游戏实体相关类的实现……………………………………11
1、飞机Plane类的实现…………………………………………11.
2、敌机EnemyPlane类的实现……………………………………19
3、子弹Bullet类的实现…………………………………………24
四i2棋盘和棋子________________________________________________________________________________________________________________________、结论……………………………………………………………27
参考文献……………………………………………………………28
正文
一、引言
(一)课题背景
Android是Google公司为首的OHA研发的一个开源智能手机平台。
随着互联网和物联网的广泛应用,得到了学术界和产业界的支持,越来越多的创意应用到Android应用程序中,席卷了整个手机产业。
随着Android游戏的普及,Android应用的需求势必会越来越大。
并且Android相对于其他的手机操作系统具有开放、平等、无界限、方便以及硬件丰富性等的特性。
这将是一个潜力巨大的市场会吸引无数软件开发商和开发者投身其中。
太空保卫战便是运行在Android上的一种滚屏动作类游戏,其中融入了很多动作类游戏特有的技术,且画面流畅、声音震撼。
(二)本课题研究的意义
近来随着手机的快速发展,各种各样的手机游戏层出不穷,使得我们能有更多的娱乐项目,而射击类游戏是节奏比较快,要求玩家通过快速的反应与游戏进行交互,从而考验玩家的灵敏度以及放松玩家大脑,是玩家身心休闲娱乐。
当今市面上流行的手机游戏类型繁多,不同类型的游戏自然有其独特的设计方式以及独到的吸引玩家的地方,射击类游戏(ShootingGame)是一种比较古老的游戏类型手机游戏中的射击游戏也很流行,目前市面上的射击类游戏最多的是飞行射击游戏。
太空保卫战就是属于飞行射击类游戏,是滚屏动作类游戏的一种。
而滚屏动作类游戏是最传统的游戏类型之一,早期动作游戏的画面一般比较简单,没有复杂的游戏特效,主要是通过熟练操作技巧来进行游戏,一般是为了通关。
而现在的动作类游戏则融入了很多新的元素,很多经典的关卡以及很多画面的特效,使其逐渐成为所有游戏类型里面款式最多,发展最快的一种。
(三)本课题的研究方法
相对于其他相同类型的游戏进行,提取其精华技术,并且融入较多新的元素。
运用平台Android2.1、Eclipse开发软件,使用Java进行语言开发,并且采用2D的呈现技术,是玩家玩得更加刺激震撼。
并且游戏的添加上成绩排行功能,并将玩家的最好成绩保存下来,会大大提高游戏的可玩性。
二、课题相关基础
(一)游戏情节:
本游戏是一款滚屏动作游戏,没有过多的情景设计。
所以主要的工作是主战飞机生命的设计(血值或生命值)、道具的设计(换枪的道具及补血的道具)、关卡的设计等。
此游戏还融入了很多动作类游戏特有的技术,使得画面流畅、声音震撼。
游戏操作简单,易于上手,且火爆的游戏场面,快速、激烈、紧张的游戏节奏会使玩家产生浓厚兴趣。
(二)功能介绍
太空保卫战游戏主要包含欢迎界面、帮助界面以及游戏界面。
下面对该游戏的部分界面及运行效果进行简单的介绍:
1、运行该游戏,通过Ctrl+F12组合键将模拟器调成横屏,进入加载界面。
图1游戏的加载界面
2、之后将进入欢迎动画界面。
图2游戏的欢迎动画1
图3游戏的欢迎动画2
图3游戏的欢迎界面3
3、欢迎动画播放完毕将进入选择界面,菜单界面包括“开始游戏”、“帮助”、“关闭声音”及“退出”按钮。
图4选择界面
4、单击“帮助”按钮将进入“帮助”界面。
图5帮助界面
5、单击’开始游戏“按钮将进入游戏界面,在游戏界面中,玩家可通过上下左右键控制飞机移动,然后A键发射子弹打击敌人。
图6游戏界面
8、如果玩家飞机坚持足够的时间没有爆炸的话,将看到关底。
7、当顺利过关时,会出现恭喜过关界面;当游戏失败时,则会出现失败界面。
图7游戏失败界面
(三)目标平台:
目标平台为Android2.1。
开发语言:
Java
开发软件:
Eclipse
三、设计方案
(一)游戏的架构
该项目中的类分成了4部分进行介绍
1共有类
Activitv的实现类PlaneActivity:
该类是通过扩展基类Activity实现的,是整个游戏程序的入口。
键盘监听线程KeyThread:
该类为手机键盘的监听线程,没隔一段时间读取一次键盘的状态值,并根据当前键盘状态做出相应的操作。
常量类ConstantUtil:
将游戏中用到的所有常量全部封装到该类中,便于管理与维护。
2辅助界面相关类
欢迎界面WelcomeView:
该类为游戏欢迎界面的实现类,主要负责欢迎界面的绘制工作。
欢迎界面的动画实现类WelcomeViewThread:
该类是为WelcomeView服务的线程类,主要负责欢迎界面中动画的生成。
帮助界面HelpView:
该类非常简单,主要负责绘制帮助界面的相关图片。
加载界面ProcessView:
为了使游戏更加人性化,给玩家更好的体验,在长时间加载某些资源时,需要给出加载界面以提示玩家后台加载进度。
胜利界面WinView:
该类为玩家顺利谷关后的恭喜过关界面。
失败界面FailView:
该类为主战飞机死亡后显示的失败界面,在该界面中玩家可以选着重新游戏或退住游戏。
3游戏界面相关类
游戏主界面类GameView:
该类为游戏菜单界面的实现类,负责界面绘制工作。
背景滚动线程类GameViewBackGroundThread:
该类主要负责背景滚动、敌机以及各种道具的出现。
地图信息类Maps:
该类包含着地图的相关信息,例如敌机所有的移动路线、各个关卡中补血道具、换枪道具等。
物体移动线程类MoveThread:
该线程负责除了我方主站飞机外所有可移动物的移动
4情景相关类
主战飞机Plane:
该类为主战飞机的封装类,可有玩家控制其芳香以及移动状态。
敌机EnenyPlane:
该类为敌机的封装类。
子弹类Bullet:
子弹的封装类,游戏中所有的子弹都为该类的对象。
爆炸效果类Explode:
该类为爆炸效果的渲染类,负责在指定位置绘制爆炸效果。
爆炸换帧线程ExplodeThread:
该类是为爆炸效果服务的。
当爆炸存在时,定时为每个爆炸效果换帧。
补血道具类life:
该类是补血道具类,当主战飞机与该类的对象碰撞时,会为主站飞机增加一格血。
换枪道具类ChangeBullet:
该类为换枪道具类,当主战飞机与该类的对象碰撞时,会增加主战飞机所携带武器。
(二)游戏的框架简介图
图1太空保卫战游戏类框架图
1、启动游戏,在PlaneActivity中会先进入家在界面ProcessView,然后后台加载欢迎界面WelcomeView,当加载完成后将屏幕切换到欢迎界面,并启动WelcomeViewThread线程生成欢迎界面的动画效果。
2、当欢迎动画播放完毕后屏幕会停留在选择状态等待玩家操作。
3、当玩家点击“帮助”按钮时,将初始化帮助界面HelpView并将其显示出来。
4、当玩家单击“开始游戏”按钮时,屏幕将显示加载界面。
后台将初始化游戏界面GameView,在地图信息类Maps中初始化此关卡中所有敌机、变枪的道具、补血的道具等。
5、初始化游戏界面的同时启动GameViewBackGroundThread线程,以滚动游戏界面的背景图片。
6、当玩家发射炮弹或敌机发射炮弹时会创建炮弹类Bullet的对象,并将其添加到已知的容器中。
7、当游戏过程中如果需要显示爆炸效果,会创建爆炸效果类Explode以及ExplodeThread类来渲染爆炸效果。
8、游戏中所有类中使用的常量全部封装到常量类ConstantUtil类中。
(三)游戏界面基本框架及介绍
图2游戏界面基本框架
1、GameView在初始化时会从Maps读取当前关卡的地图信息,包括敌机、补血道具、换枪道具等。
2、在界面初始化的同时,还需要启动MoveThread线程、GameViewBackGroundThread线程、KeyThread线程及ExplodeThread线程。
3、GameView会在适当的时候从Plane类读取主战飞机的信息进行绘制。
4、当主战飞机发射子弹时,会创建Buller对象并添加到指定容器中,此时MoveThread同样需要定时改变子弹对象的位置。
5、在以上过程中,全部需要PlaneActivity的管理与ConstantUtil的参与。
(四)游戏总流程图
(五)游戏实体相关类的实现
1、飞机Plane类的实现,其代码如下:
packagewyf.ytl;
importandroid.graphics.Bitmap;
importandroid.graphics.BitmapFactory;
importandroid.graphics.Canvas;
importandroid.graphics.Paint;
importandroid.os.Message;
publicclassPlane{
privateintx;//飞机的坐标
privateinty;
intlife;//生命
privateintdir;//飞机的方向,0静止,1上,2右上,3右,4右下,5下,6左下,7左,8左上
privateinttype;//飞机的类型
Bitmapbitmap1;//当前向下飞机的图片
Bitmapbitmap2;//当前向上飞机的图片
Bitmapbitmap3;//当前飞机的图片
GameViewgameView;//GameView的引用
privateintspan=10;//飞机走一步的像素
intbulletType=1;
publicPlane(intx,inty,inttype,intdir,intlife,GameViewgameView){
this.gameView=gameView;
this.x=x;
this.y=y;
this.type=type;
this.dir=dir;
this.life=life;
initBitmap();
}
publicvoidinitBitmap(){
if(type==1){//当类型为1时
bitmap1=BitmapFactory.decodeResource(gameView.getResources(),R.drawable.plane1);
bitmap2=BitmapFactory.decodeResource(gameView.getResources(),R.drawable.plane2);
bitmap3=BitmapFactory.decodeResource(gameView.getResources(),R.drawable.plane3);
}
}
publicvoiddraw(Canvascanvas){
if(dir==ConstantUtil.DIR_UP){//向上
canvas.drawBitmap(bitmap2,x,y,newPaint());
}
elseif(dir==ConstantUtil.DIR_DOWN){//向下
canvas.drawBitmap(bitmap1,x,y,newPaint());
}
else{//其他情况使用的图片
canvas.drawBitmap(bitmap3,x,y,newPaint());
}
}
publicvoidfire(){//打子弹的方法
if(bulletType==1){
Bulletb=newBullet(this.x+75,this.y+8,1,ConstantUtil.DIR_RIGHT,gameView);
gameView.goodBollets.add(b);
}
elseif(bulletType==2){
Bulletb=newBullet(this.x+75,this.y+4,3,ConstantUtil.DIR_RIGHT,gameView);
gameView.goodBollets.add(b);
}
else{
Bulletb=newBullet(this.x+75,this.y+4,3,ConstantUtil.DIR_RIGHT,gameView);
gameView.goodBollets.add(b);
Bulletb2=newBullet(this.x+55,this.y-4,4,ConstantUtil.DIR_RIGHT_UP,gameView);
gameView.goodBollets.add(b2);
Bulletb3=newBullet(this.x+55,this.y+12,5,ConstantUtil.DIR_RIGHT_DOWN,gameView);
gameView.goodBollets.add(b3);
}
if(gameView.activity.isSound){
gameView.playSound(1,0);//播放音乐
}
}
publicbooleancontain(Bulletb){
if(isContain(b.x,b.y,b.bitmap.getWidth(),b.bitmap.getHeight())){//检测成功
this.life--;//自己的生命减1
if(this.life<0){//当生命小于0时
gameView.status=2;
if(gameView.mMediaPlayer.isPlaying()){
gameView.mMediaPlayer.stop();
}
if(gameView.activity.isSound){
gameView.playSound(3,0);
}
Messagemsg1=gameView.activity.myHandler.obtainMessage
(1);
gameView.activity.myHandler.sendMessage(msg1);//向主activity发送Handler消息
}
returntrue;
}
returnfalse;
}
publicbooleancontain(ChangeBulletcb){
if(isContain(cb.x,cb.y,cb.bitmap.getWidth(),cb.bitmap.getHeight())){//检测成功
this.bulletType+=1;
returntrue;
}
returnfalse;
}
publicbooleancontain(EnemyPlaneep){
if(isContain(ep.x,ep.y,ep.bitmap.getWidth(),ep.bitmap.getHeight())){//检测成功
this.life--;//自己的生命减1
if(this.life<0){//当生命小于0时
gameView.status=2;
if(gameView.mMediaPlayer.isPlaying()){
gameView.mMediaPlayer.stop();
}
if(gameView.activity.isSound){
gameView.playSound(3,0);
}
gameView.activity.myHandler.sendEmptyMessage
(1);//向主activity发送Handler消息
}
returntrue;
}
returnfalse;
}
publicbooleancontain(Lifel){//检测玩家飞机是否撞血块
if(isContain(l.x,l.y,l.bitmap.getWidth(),l.bitmap.getHeight())){//检测成功
if(this.lifethis.life++;//生命加一
}
returntrue;
}
returnfalse;
}
privatebooleanisContain(intotherX,intotherY,intotherWidth,intotherHeight){//判断两个矩形是否碰撞
intxd=0;//大的x
intyd=0;//大大y
intxx=0;//小的x
intyx=0;//小的y
intwidth=0;
intheight=0;
booleanxFlag=true;//玩家飞机x是否在前
booleanyFlag=true;//玩家飞机y是否在前
if(this.x>=otherX){
xd=this.x;
xx=otherX;
xFlag=false;
}else{
xd=otherX;
xx=thi