基于Android的塔防类游戏.docx
《基于Android的塔防类游戏.docx》由会员分享,可在线阅读,更多相关《基于Android的塔防类游戏.docx(32页珍藏版)》请在冰豆网上搜索。
![基于Android的塔防类游戏.docx](https://file1.bdocx.com/fileroot1/2023-1/21/c53e0fc6-c8ad-4de1-b970-657a2050a2d1/c53e0fc6-c8ad-4de1-b970-657a2050a2d11.gif)
基于Android的塔防类游戏
引言
随着信息科技的快速发展,Android(安卓)已经被人们所熟知,Android智能手机火速上位,甚至可以说现在的手机系统由苹果的IOS和Android平分也不为过。
随着安卓智能手机在中国各地的风靡,基于Android平台的应用软件也逐渐成为了IT开发的一大热门。
手机游戏是智能机不可或缺的应用之一,“植物大战僵尸”“保卫萝卜”等Android游戏应用的成功,让人们看到了手机游戏在Android平台上的巨大发展空间。
基于此,我将采用Eclipse和AndroidADT作为集成开发平台,开发本Android游戏APP。
Android是Google在2007年11月5日公布的手机系统平台,早期Google开发,后由(OpenHandsetAlliance)开发,以Linux为基础的开放源代码操作系统,是一套真正意义上的开发性的移动设备综合平台,并且无缝地结合Google优秀的服务。
手机游戏由于具有随时、随地、随身的特性开始在游戏市场占据越来越大的市场份额,本手机游戏是基于Android系统进行开发,因此,具有更广泛的使用性。
本应用为Android塔防类游戏,主要有6个操作界面分别为欢迎界面,主操作界面,排行榜界面,音效设置界面,帮助界面和游戏结束界面。
玩家可以选择自己要进入的界面对游戏设置,查看帮助或进入的积分榜界面查看得分排名等操作。
作为一款智能手机的游戏应用,背景音乐的存在是不可或缺的,本游戏在有着令人兴奋的背景音乐,还有打击箭塔攻击怪物时候的过瘾音效。
本应用采用Android的Canvas绘制游戏界面,游戏的主界面美观,赏心悦目,以提高玩家对游戏的兴趣。
游戏的控制模块做到简单明了,易上手,以给玩家一个很好的游戏环境。
1绪论
1.1游戏开发背景
当前移动互联网技术快速发展,人们生活逐渐趋于多元化,以智能手机为代表的电子产品也逐渐受到人们的追捧,现在手机的功能已不仅仅是简单的接打电话、收发短信了。
更多的用户希望在学习和工作之余通过方便灵巧可随身携带的手机或平板等休闲娱乐。
现如今游戏又是人们日常生活的一个必不可少的娱乐项目,也带动了游戏相关产业市场的发展。
游戏平台也是经过了从游戏机到电视游戏,然后到PC游戏,再到手机游戏的蜕变,中间经历了很多技术的更新和变革。
但随着新技术的发展和人们生活水平质量的提高,手机开始逐渐普及,因为其小巧便捷的特点,手机成为人们日常生活中必不可少的通讯工具。
而基于手机平台的游戏也就拥有的市场空间是巨大的,也因随着3G、4G网络的开通和应用,手机游戏必然会迎来新的一轮游戏热潮。
因此,为了迎合众多用户的需求并适应现在手机的规模,我们开发出一套具有不错娱乐性和挑战性的休闲示意打发时间的家园塔防无尽版小游戏。
塔防类游戏是一种比较经典的益智类策略游戏。
塔防游戏即指一类通过在地图上建造炮塔或类似建筑物,以阻止游戏中敌人进攻的策略型游戏。
该类游戏目前就是主要是有3大类第一种就是摆回龙,堵怪模式,一张空白的地图,让怪兽按照你摆的炮塔的阵型来回移动,并且可以通过搭建和贱卖出口的炮塔,使怪兽来回移动,达到最长的移动距离,以便于炮塔不断的轰击怪兽,但是最长路线的不一定是最好的,一般每种地图都会有空军无视你的阵型;另一种就是类似《植物大战僵尸》玩家通过武装多种植物切换不同的功能,快速有效地把僵尸阻挡在入侵的道路上。
不同的敌人,不同的玩法构成五种不同的游戏模式,加之夕阳、浓雾以及泳池之类的障碍增加了游戏挑战性。
它对玩家的要求也是大脑的智慧和小脑的反应,目前正在白领和学生中风靡起来;最后一种就是像本款游戏一样让怪物走固定路线,比较经典的是DefenseGrid:
TheAwakening<防御觉醒>,这个游戏获得过许多奖项,如PCGAMER的编辑推荐奖,IGN的08年度10大不可错过游戏奖,还上过许多杂志等等。
游戏的画面从图片中已经可以看出来了,画面效果太绚丽了,无可挑剔,对硬件的要求也不高。
游戏有很多个关卡,每个关卡都胜利模式还不太一样,可以说每个关卡都是集合了一种有人气的塔防的特色。
虽然现在市面上存在着各种各样的游戏版本,可是塔防游戏其市场还是相当大的。
因为它的特殊在于人们在玩游戏的时候的过程中使爱不释手。
随着其难度增大,刺激性也更强,挑战性越强。
可以说该游戏的优势在于它的简单易行,不论是手机,还是小游戏机,都能很快顺利的运行。
而且对于在外忙碌的人,不可能花费大量时间在娱乐上,大型游戏是行不通的。
他们会在工作之余,上下班乘坐公交或地铁的时候消磨时间娱乐一下,所以像这款无尽版塔防小游戏刚好迎合了他们的需求。
1.2程序研究目的和意义
在如今社会,人们的生活节奏也逐渐加快,工作和学习压力逐渐增大,大多数人没有足够的时间去休闲娱乐,放松自己。
但这款小型的塔防游戏,则可以让我们随时随地都能享受游戏,从繁重的日常生活中解脱出来。
这款塔防游戏是用比较流行的保护城池的玩法,让怪物精灵走固定路线,通过合理适当的建造箭塔阻挡不断侵袭的怪物精灵,当城池血量为零时守城失败。
此款游戏题材新颖,让人们进入科幻飘渺的远古世界中,在保护城池的过程中自己不断改变箭塔种类位置锻炼自己的大脑,并且还能跟各种各样的精灵斗智斗勇,让我们在闲暇之时得到畅汗淋漓的精神满足。
当然,这也要求我把大学学到的知识都总结在一起,考验我的“学以致用”的能力,我会要求自己把游戏编写的赏心悦目,力求美观,以提高玩家对游戏的兴趣。
游戏的控制模块应该做到易懂、易操作,以给玩家一个很好的游戏环境。
1.3可行性分析
该系统采用Eclipse集成AndroidADT作为开发平台进行APP开发。
Eclipse是一个开放的源代码的、基于Java的可扩展开发平台。
就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。
虽然大多数用户很乐于把Eclipse当作Java集成开发环境(IDE)来使用,但Eclipse的目标却不仅限于此。
Eclipse还包括插件开发环境,这个组件主要针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具。
由于Eclipse中的每样东西都是插件,对于给Eclipse提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。
Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentKit,JDK),而且Android专门针对Eclipse开发做了ADT(AndroidDeveloperTools)开发插件,因此该应用使用Eclipse开发完全可行。
2游戏需求分析
2.1用户功能需求分析
本毕业设计目标用户是Android2.2及以上系统的智能手机用户。
无论男女老少均可以进行游戏。
玩家通过Android手机系统使用进行游戏。
由于本程序简单易操作,有着基本的开始游戏、继续游戏、保存游戏和返回游戏等主要按钮,还有音效设置、积分榜、帮助等辅助按钮,所以本游戏对用户没什么特别要求。
一般用户经过几分钟练习都可以熟悉本游戏的规则。
游戏开始会有两个怪物沿着地图中路线从怪物窝出来,向路线终点的房子匀速行走,这时候,用户需要点击25游戏币或者15游戏币的箭塔安放在路线以外能够打中怪物的地方,当怪物进入箭塔的攻击范围之后,箭塔就会主动攻击进入范围的怪物向其射出白色子弹;每消灭一个怪物就会加5游戏币,当消灭足够的怪物时又可以有钱摆放新的箭塔;当箭塔攻击不够不能消灭一波怪物的时候,点击画面顶端一行中的水晶,就会释放能量消灭全屏幕的敌人,但是不会增加赏金;每个怪物进入房子后就会减掉房子一个血量,当房子总共的10个血量为0时,怪物攻占了房子,游戏结束。
玩家除了偷闲娱乐还可能一本正经的挑战自己,于是排行榜是必不可少的。
排行榜模块是用户通过游戏闯关的结束从而在玩家中进行成绩排名,排行榜会记录用户玩游戏的时间和消灭怪物的数量,给玩家挑战自己,超越自己的动力。
对于刚开始接手的用户来说,帮助模块则是本游戏静态显示的一个游戏介绍和说明,用户可以在帮助模块中,对本游戏情况有个大概的了解。
本游戏是通过碰撞检测来实现箭塔对怪物的攻击。
根据其他手机游戏的特点和用户对游戏的体验需求,本游戏是以图文声并茂的方式呈现的。
当游戏开始时和游戏过程中会出现游戏的背景音乐,在箭塔攻击怪物发生碰撞的同时会出现音乐特效等。
在家园被怪物侵袭的时候设置有震动,这样玩家用户看着图片、听着声音、感觉着震动的效果,不仅在视觉上和听觉上得到了很好的体验和满足,在触觉上也有着不一样的感受。
本毕业设计为人们提供一款手机休闲娱乐的游戏软件,不仅能锻炼玩家的大脑和双手的配合,还能开拓玩家的思维方式和动手能力。
让人们在繁忙的工作和学习之余,得到身体和心情的放松。
另外,此游戏画面优美,音效恰到好处,操作简单易上手,触感非凡,适合各阶段人群。
图2.1功能界面示例图
图2.2游戏界面示例图
2.2系统性能要求
1.实用性
本应用为安卓手机游戏,要和其他手机游戏一样能在智能机上安装,游戏和卸载,游戏支持触屏操作,要求有清晰的图片,令人喜欢的游戏音效和手机震动多种感觉体验。
2.实时性
本游戏要对用户的操作做出实时响应,当手触摸屏幕抬起时就应该有函数响应,对其进行各种操作,避免卡机等情况发生。
3.易操作性
单机手机游戏的最大特点即为易操作性,用户在不看说明的情况下也能够通过自己摸索很快就能自己上手玩,并且在玩过几遍之后掌握游戏的规则和得高分的要领。
2.3游戏框架和流程分析
依据系统的需求分析,得到游戏框架图如图2-3所示:
图2.3游戏框架图
1公共类中实现类TafangGameActivity,该类通过扩展Activity得到,是整个游戏的控制器,也是游戏的程序入口,用来实现游戏中所有的定义。
2界面相关类中实现欢迎界面类WelcomeView,通过改变图片的透明度实现图片的渐变,达到开机动画的效果,运行期间屏蔽任何触屏以及键盘操作;主操作界面类MainMenuSurfaceView为游戏主界面,设计实现后可以进行游戏音效的设置、跳转帮助界面、查看游戏积分榜、运行新游戏以及读取游戏存档继续游戏等操作;排行榜界面类HighJifenSurfaceView的实现,该类数据库查询中应用了分页技术,通过向上或者向下滑动屏幕实现积分榜信息的分页显示;帮助界面类HelpView的实现,静态的向读者介绍游戏的玩法;音效设置界面类MusicSurfaceView设置背景音乐和炮塔的射击音效的开启和关闭;游戏结束界面类GameOverView为游戏结束后改变图片透明度实现图片渐变和WelcomeView类相似;游戏界面类GameView为游戏视图主要的类,负责游戏画面的绘制。
3辅助线程类中各类的实现:
用IfGameOverThread类继承自Thread类来判断游戏何时结束;ShellNumThread类和ShellThread类均继承自Thread类,用来控制炮弹的产生和发射路线;TargetNumThread类和TargetThread类分别用来控制怪物的产生和怪物的行走;SelectThread类用来控制主界面中下拉选项组下拉的线程;TimeThread类和ShuiJingThread类继承自Thread类,用来控制游戏界面中水晶物品操作的线程。
4实体对象类中主要实现Shell类和Target类,Shell类是为了描述炮塔射击炮弹开发的对象类,Target为了描述怪物开发的对象类;而SingleJianta类和SingleGoJianta类则分别描述游戏界面中箭塔开发的对象类和拖动箭塔过程中的箭塔类。
玩家在安卓智能手机上安装此应用客户端程序后,点击塔防游戏图标进入游戏,之后就会看到主菜单界面,里面包含6项主要功能:
图2.4游戏功能图
第一次玩游戏的话点击继续游戏是不会进入游戏界面进行游戏的,因为它需要玩家已经玩一次游戏,进入游戏界面并点击设置按钮保存的上一次的存档记录之后,点击继续游戏方可接着上次保存的记录玩耍;如果不想接着玩从新开始挑战自己,则可以点击新游戏从新玩;玩家玩完一局后会在积分榜上查看自己此局的游戏时间和消灭怪物的个数,并且按照消灭怪物的数量进行从大到小排序,让玩家对自己的战绩一目了然,增加了趣味性和挑战性,激起玩家挑战自己,超越自己的斗志;一款好玩的游戏不仅有基本游戏功能,好的画面,还要有让人兴奋的音乐,所以此款软件增加音效设置模块,用来设置背景音乐和音效的开关,让玩家在不同时间不同场合都能方便愉快的进行游戏;玩家还可以进入帮助按钮查看帮助,此功能主要是用图片配上文字的方式静态的显示游戏的一些相关介绍和玩法,让玩家对此游戏有个大概的认识和了解。
3系统总体设计与实现
3.1.主控制类TafangGameActivity的实现
3.1.1首先,实现游戏各个类的定义
在TafangGameActivity类中的Activity中分别定义欢迎界面、主菜单界面、积分榜界面、音乐设置界面、帮助界面和游戏结束界面;在类开始引用GameView来定义游戏界面,用来编写游戏视图中相关类的实现;然后定义SQLiteDatabasesldd为数据源来保存相关数据;之后定义游戏存档对话框Inputdialog和继续游戏对话框GoonGamedialog,当用户玩到中途不得不暂停游戏的时候或不想玩的时候可以点击在游戏界面左下方的设置按钮,然后弹出对话框可以选择保存游戏、返回游戏和退出游戏,然后自己下次可以按继续游戏按钮接着上次的存档玩;然后定义手机屏幕的宽度和高度用来动态获得手机屏幕分辨率的大小,以便能全屏游戏从而获得更好的感觉;当然,声音和震动的定义也必不可少的,定义声音标志位的开启关闭和震动的声明则让玩家获得更好的体验。
3.1.2然后,实现TafangGameActivity类中的Hander消息处理器
以下代码是Hander根据传入不同的消息ID判断系统要跳转的界面,例如,当Hander消息处理器收到消息0时,就会调用gotoGameView函数,跳转到游戏界面,Hander消息处理器收到消息1时,就会调用gotoMainMenuView函数,跳转到游戏界面,其他操作类似,代码如下:
publicvoidhandleMessage(Messagemsg){//根据出入不同的ID选择切换到不同界面
switch(msg.what)
{
case0:
gotoGameView();//切换到游戏界面
break;
case1:
gotoMainMenuView();//切换到主界面
break;
case2:
gotoHelpView();//切换到帮助界面
break;
case3:
gotoJifenView();//切换到积分榜界面
break;
case4:
gotoMusicView();//切换到音效设置界面
break;
case5:
gotoGameOverView();//切换到游戏结束界面
break;
}
Hander主要是与子线程通过Message对象来传递消息数据,这个时候,就需要把数据消息作为一个Message对象发送到消息队列中,然后,在初始化Handler对象时重写的handleMessage方法来接收Messgae并进行相关操作,然后绑定在主线程的消息队列中。
3.1.3手机屏幕分辨率的设置
新建DisplayMetrics对象,动态获得当前屏幕的分辨率,其中dm.widthPixels为系统得到的屏幕宽度,dm.heightPixels为系统得到屏幕的高度,然后调用setWindow方法,实现窗口管理器中全屏幕的布局,最后调用setRequestedOrientation函数把屏幕强制设置为横屏,最后设置进入开机动画WelcomeView界面,代码如下:
DisplayMetricsdm=newDisplayMetrics();//新建DisplayMetrics对象
getWindowManager().getDefaultDisplay().getMetrics(dm);
//动态获得手机屏幕的宽高
screenWidth=dm.widthPixels;//动态获得屏幕宽度像素
screenHeight=dm.heightPixels;//动态获得屏幕高度像素
//全屏
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//设置为横屏
collisionShake();//初始化
gotoWelcomeView();//开机动画,首先进入WelcomeView
在Android中可以设置程序界面随着窗口大小调整缩放比例,但是即使如此,编程人员还是必须知道手机屏幕的分辨率等信息,以避免缩放造成的布局变形问题。
而DisplayMetircs类就可以很方便的获取屏幕的分辨率,并且构造函数DisplayMetrics不需要传递任何参数;调用getWindowManager()之后,会取得现有Activity的Handle,此时,getDefaultDisplay()方法将取得的宽高维度存放于DisplayMetrics对象中,而取得的宽高维度是以像素为单位(Pixel),“像素”所指的是“绝对像素”而非“相对像素”。
3.1.4切换不同界面的方法
首先,初始化进入开机动画函数gotoWelcomeView(),进入WelcomeView界面;然后判断界面是否为空,如果是则新建WelcomeView,不为空就设置当前界面显示于画面中;主菜单界面,游戏界面等同理。
主界面MainMenuView、帮主界面HelpView、积分界面JifenView和音乐界面MusicView原理同开始界面。
3.1.5音乐设置的方法
首先在音乐界面中判断musicView是否为空,若为空则新建MusicSurfaceView,否则设置显示当前界面,然后定义声音播放标志位函数isBackGroundMusicOn()和游戏音效标志位函数backGroundMusicOn,通过设定两个函数控制播放游戏背景音乐和音效。
3.1.6游戏存档对话框和继续存档游戏对话框的设定
首先定义弹出对话框gototachu,在函数里显示其对话框及其ID,之后定义继续游戏对话框,在函数里定义查找DBUtil数据库的查询语句nearlist=DBUtil.getcundang(),然后再显示其对话框及其ID,这样当弹出对话框系统存档其ID,当再次接着存档游戏的时候,判断其ID是否存在并查找DBUtil数据库中存档数据,然后提取存档继续游戏。
3.1.7手机震动信息的设定
定义手机震动函数collisionShake(),然后设置震动信息在调用方法shake()中定义震动信息,mVibrator.vibrate(newlong[]{0,80},-1);其中坐标是防御阵地的坐标,当血量-1时说明有怪物攻入房子,系统会触发手机震动,表明已有怪物侵袭到阵地中,来给玩家提醒并制造刺激感。
3.1.8重写返回键的事件监听
定义onKeyDown(intkeyCode,KeyEvente)函数来重写手机返回键的事件监听,在函数中判断界面上键值是否为4,如果是再次判断是否在帮助界面,积分榜界面或音效设置界面,如果是用gotoMainMenuView()函数返回到主菜单界面。
3.1.9创建对话框
创建对话框函数onCreateDialog(intid),定义ID,然后用switch语句分别把ID设置为存档和读档;存档输入对话框创建后返回结果,游戏读档对话框通过AlertDialog.Builder来创建。
AlertDialog是Dialog的一个直接子类,同样也是安卓系统中最常用的对话框之一。
AlertDialog.builder是AlertDialog的内部静态函数,一般生成AlertDialog的时候是通过AlertDialog.builder来构造的。
通过重写这个方法,可以根据传入不同的ID创建相应类型的对话框,完成对话框的最后创建还需要重写onPrepareDialog函数。
3.1.10函数onPrepareDialog的开发
在存档对话框中定义确认和取消按钮,然后需要设置监听事件bjhmcok.setOnClickListener,然后重写onClick方法得到文本框及其输入的内容,得到事件后执行插入语句,遍历怪物列表获得当前怪物的种类、位置坐标、当前种类怪物的血量以及总血量,用于继续游戏中怪物的加载;同样的方法获得当前游戏进度下的金钱树、当前家园的血量、杀敌数以及水晶的数量,用于继续游戏有的金钱、血量、杀敌以及水晶物品的加载;然后将数据通过listView加载进文档进度选择对话框内,最后选择不同ListView中的元素,加载相应的游戏进度。
3.2.主控制类TafangGameActivity中部分数据库的实现
3.2.1创建数据库方法
首先创建数据库函数openOrCreateDatabase(),然后在里面调用trycatch方法,在try中表明数据源为SQLite数据库,并定义数据库所在路径,然后在创建的数据库中建表highScore,用来记录游戏中的得分情况;如果try里面语句发生错误抛出异常,将会执行catch语句中语句来打印异常信息,如果try里面出现了Error,表示出错那后面的语句也不执行了,catch也抓不住。
图3.1创建数据库
3.2.2关闭数据库的方法
同样在closeDatabase()函数中调用trycatch方法,实现数据库的关闭,如果关闭抛出异常后打印异常信息。
在此解释数据库的查询插入方法完成后要先关闭数据源,否则会影响数据库的查询。
3.2.3数据库插入记录和查询的方法
同样用trycatch方法,在try语句中打开数据源openOrCreateDatabase(),然后定义要插入记录的SQL语句,插入记录后关闭数据源,否则抛出异常打印异常信息;
查询则用query()方法,先定义查找的位置和记录条数,然后得到返回的结果StringBuilder(),声明此游标,然后打开数据源,查询该条记录的SQL语句,然后执行trycatch方法将游标移到指定位置,记录此记录积分,时间等信息,根据查询的位置以及一组查询结果数量的限制对积分表进行查询,查询完毕后关闭数据游标,关闭数据源。
3.2.4存档、读档游戏数据库的建立
首先创建save表,用于记录游戏存档的名称和时间,创建nochange,用于记录当前怪物的金钱数、血量、杀敌数以及水晶物品的数量;创建表guaiw,用来记录当前怪物的位置、血本以及怪物的种类;用于记录当前创建jiant表,用于记录当前箭塔的位置、射程等,便于读档游戏时候的加载。
在TafangGameActivity中设计了积分榜的数据库开发,现在在游戏存档和读档则用数据库DBUtil的开发。
它是是操作数据库的组件,对传统操作数据库的类进行二次