基于Android的飞机大战游戏设计与开发.doc

上传人:laozhun 文档编号:2394090 上传时间:2023-02-17 格式:DOC 页数:62 大小:4.37MB
返回 下载 相关 举报
基于Android的飞机大战游戏设计与开发.doc_第1页
第1页 / 共62页
基于Android的飞机大战游戏设计与开发.doc_第2页
第2页 / 共62页
基于Android的飞机大战游戏设计与开发.doc_第3页
第3页 / 共62页
基于Android的飞机大战游戏设计与开发.doc_第4页
第4页 / 共62页
基于Android的飞机大战游戏设计与开发.doc_第5页
第5页 / 共62页
点击查看更多>>
资源描述

《基于Android的飞机大战游戏设计与开发.doc》由会员分享,可在线阅读,更多相关《基于Android的飞机大战游戏设计与开发.doc(62页珍藏版)》请在三一办公上搜索。

1、LUOYANG NORMAL UNIVERSITY 2013届本科毕业设计基于Android的飞机大战游戏设计与开发院(系)名称信息技术学院专 业 名 称 软件工程 学生姓名学号指导教师XXX副教授完 成 时 间2013年5月摘要相信Android(安卓)已经为人们熟知,经过2011年的洗礼,Android智能手机火速上位,甚至说现在手机系统由IOS和Android平分也不为过。随着Android智能手机在中国内地的风靡,基于Android平台的应用开发也逐渐成为IT开发的一大热门。游戏是智能机不可或缺的应用之一,“水果忍者”、“愤怒的小鸟”等Android游戏应用的成功,让人看到手机游戏在A

2、ndroid平台上的巨大发展空间。基于此,采用Eclipse和Android ADT作为集成开发平台,开发本Android游戏APP。本应用为Android飞机大战游戏,主要有6个操作界面分别为开始界面,游戏界面,设置界面,得分界面,Win界面,Lose界面。玩家可以选择自己进入设置界面对游戏进行设置,或进入的分界面查看自己本次操作是否在前六名等操作。作为游戏背景音乐的存在是不可或缺的,本应用在不同的操作界面演奏不同的背景音乐,玩家还可以在设置界面设置背景音乐的大小。由于Android控件Activity的生命周期的特点,本应用会在被点击“EXIT”按钮的Activity中发送一个EXIT的广

3、播,所有的本应用的Activity收到广播后会自动结束,使得本应用能够完全的退出系统。本应用采用Android的SurfaceView绘制游戏界面,游戏的主界面美观,赏心悦目,以提高玩家对游戏的兴趣。游戏的控制模块应该做到易懂、易操作,以给玩家一个很好的游戏环境。关键词:Android开发;手机游戏;Java;SQLiteAbstractAndroid has been known for people, after 2011 years of baptism, Android smartphone developing fast . Android occupies a large shar

4、e in the market . Android game application is successful, it make a person see that mobile games on the Android platform of the huge development space. Based on this,we using Eclipse and Android ADT as integrated development platform, to develop the Android game application.This application for Andr

5、oid plane war games include six operating interface, respectively as the start screen, the game interface and set interface, Win interface, Lose interface. Players can choose interface to play the game. As the mobile phone game background music is indispensable, the application play different backgr

6、ound music in different interface, players can also set the size of the background music in setting interface.This application using the Android SurfaceView to draw game interface, game interface pleasing to the eye by people to play. I n order to give players a good game environment , the control m

7、odule of game should be simple, easy to operate.Keywords : Android Programing; Mobile Phone Games ; Java Programing ;SQLite目 录第1章 绪论11.1 系统开发背景11.2 系统研究目的和意义11.3 可行性分析1第2章 系统需求分析22.1 用户功能需求分析22.2 系统性能要求32.3 业务流程分析3第3章 系统总体设计43.1 系统功能模块分析43.1.1系统管理43.1.2 APP应用设置43.1.3 玩家信息管理43.2 系统类关系图43.3 系统总体设计6第4章

8、 系统详细设计84.1 开发工具简介84.2 数据库设计84.2.1 DAO(数据库访问对象)94.2.2 SQLite数据库124.3 游戏界面设计124.3.1开始界面124.3.2游戏界面194.3.3设置界面264.3.4 得分界面344.3.5 Win界面414.3.6 Lose界面46第5章 软件测试和调试515.1 白盒测试法515.2 黑盒测试法52第6章 工作总结和展望53参考文献54致 谢55第1章 绪论1.1 系统开发背景 随着科技的发展,现在手机的功能已不仅仅是简单的接打电话、收发短信了。更多的手机用户希望在工作、学习之余通过方便灵巧可随身携带的仪器休闲娱乐。因此,为了

9、迎合众多用户的需求并适应现在手机的规模,我们开发出一套适合各阶层人士的具有很强的娱乐性和交互性的飞机小游戏。虽然现在市面上存在着各种各样的游戏版本,可是飞机游戏其市场还是相当大的。因为它的特殊在于人们在玩游戏的时候的过程中使爱不释手。随着游戏关卡不断提高,其难度也更大,刺激性也更强。可以说该游戏的优势在于它的简单易行,不论是手机,还是小游戏机,都能很快顺利的运行。对于在外忙碌的人,不可能花费大量时间在娱乐上,大型游戏是行不通的。这样的小游戏刚好迎合了他们的需求。1.2 系统研究目的和意义在如今社会,人们的工作学习压力逐渐增大,生活节奏逐渐加快,大多数人没有足够的时间去休闲娱乐,放松自己。这款小

10、型的手机游戏,可以让我们随时随地都能享受游戏,从繁重的日常生活中解脱出来。游戏的主界面应该力求美观,赏心悦目,以提高玩家对游戏的兴趣。游戏的控制模块应该做到易懂、易操作,以给玩家一个很好的游戏环境。1.3 可行性分析该系统采用Eclipse集成Android ADT为开发平台进行APP开发。Eclipse是一个开放的源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。虽然大都数用户很乐于Eclipse当作Java集成开发环境(IDE)来使用,但Eclipse的目标却不仅限于此。Eclipse还包括插件开发环境,这个组件主要针对希望扩展E

11、clipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具。由于Eclipse中的每样东西都是插件,对于Eclipse中的每样东西都是插件,对于给Eclipse提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。基于Eclipse的应用程序的插件开发诸如Siemens公司的PLM产品Teamcenter的插件级开发。Android专门针对Eclipse开发做了ADT(Android Developer Tools)开发插件,因此该应用使用Eclipse开发完全可行。第2章 系统需求分析2.1 用户功能需求分析由于本程序简单易操作,交

12、互性好,对用户没什么特别要求。一般用户经过几分钟练系都可以熟悉本游戏的规则。 图2-1 功能界面示例图 图2-2 游戏界面示例图2.2 系统性能要求1.实时性本应用为手机游戏因此对于用户的操作必须做出立即响应,否则本游戏即为失败。2.易操作性单机手机游戏的最大特点即为易操作性,用户在不看说明的情况下也能够玩,并且在玩过几遍之后即熟悉本游戏的规则。这是本应用对于操作性的要求。2.3 业务流程分析依据系统的需求分析,得到系统的流程图如图2-3所示:图2-3 系统流程图第3章 系统总体设计3.1 系统功能模块分析当前应用使用的SurfaceView来绘制的页面因此相对来说大部分逻辑都是由Activi

13、ty来做处理的。本系统的功能模块也根据Activity的不同来划分成6个功能模块。3.1.1系统管理 各个操作界面布局适当,颜色搭配等要美观。各个Activity之间的切换要快速(PS:它们各自的背景音乐也要随之切换,给用户以顺畅、自然的感觉)。用户在任何一个Activity点击“EXIT”按钮或ContextMenu中的“退出”都要成功的将当前应用挂起的多个Acitivity和当前Android虚拟机显示的Activity顺利的停止,并销毁。3.1.2 APP应用设置设置应用系统背景音乐声音大小和游戏难度。使用SeekBar来控制系统音量,使用RadioGroup来控制飞机难度。3.1.3

14、玩家信息管理在游戏结束时对于玩家的名称和得分进行记录,并在玩家查看排名情况时,以倒序形式显示前六名玩家的得分和姓名等信息。3.2 系统类关系图系统实体类、边界类、控制类之间的关系如图3-1所示:图3-1 实体类、控制类、边界类之间的关系各个界面类之间的关系如图3-2所示:图3-2 APP边界类关系3.3 系统总体设计系统的中只有玩家一种用户,不必向其他的网站或者是教务系统一样进行身份验证等操作。玩家点击应用图标直接进入应用的开始界面。用户的操作总体可以归并成如3-3玩家用例图所显示的内容,子弹的用例图如图3-4所示,飞机的用例图如图3-5所示。用户的操作基本可以划分为“开始游戏”,“设置游戏”

15、,“玩游戏”,“查看分数”,“退出游戏”这五个用例。图3-3 玩家用例图图3-4 子弹用例图图3-5 飞机用例图第4章 系统详细设计4.1 开发工具简介Android开发工具(ADT)是一个插件的Eclipse IDE,目的是给开发人员提供一个强大的、集成的环境中构建Android应用程序。扩展能力的Eclipse ADT让你迅速建立新的Android项目,创建一个应用程序的用户界面,添加基于安卓框架的API,调试您的应用程序使用Android SDK工具,生成apk文件在使用Eclipse运行Android应用的时候Eclipse会自动的将生成的apk文件自动的注册到Android虚拟机中。

16、在Eclipse ADT发展与高度推荐,是一种最快的方式开始。与引导项目设置它提供,以及工具集成、定制XML编辑器和调试输出窗格,ADT给了你极大的提高在发展中Android应用程序。使用Eclipse集成Android ADT做Android应用开发是目前企业中常用的Android应用开发方式。本项目在开发环境:l JDK 1.7 l Eclipse 3.7.0l Android ADT4.03 4.2 数据库设计本应用使用的是Android虚拟机做开发,因此使用的为Android虚拟机中自带的数据库SQLite。本应用只是在针对用户得分及用户姓名等基本信息进行存储,因此数据库非常简单,仅仅

17、是设计了一个用来存储用户排名信息的表结构。用来存储用户基本信息的compositor_table的字段信息如图4-1所示。CREATE TABLE compositor_table (id INTEGER PRIMARY KEY,name VARCHAR(40) NOT NULL,score INTEGER NOT NULL)图4-1 compositor表Android中自带的SQLiteOpenHelper 作用:一个帮助类,帮助创建数据库和数据库版本管理。本应用直接创建一个SkyGameDataBaseHelper类继承Android自带的数据库操作类SQLiteOpenHelper。在

18、onCreate()方法中创建表compositor_table。public void onCreate(SQLiteDatabase db) / TODO Auto-generated method stubString create_table = this.context.getResources().getString(R.string.create_compos_table);/ CREATE TABLE compositor_table (id INTEGER PRIMARY KEY,name VARCHAR(40) NOT NULL,score INTEGER NOT NULL

19、);db.execSQL(create_table);4.2.1 DAO(数据库访问对象)本应用中的数据库访问对象SkyGameDataBaseDao采用了单例模式,以保证当前应用中只存在一个DAO数据库访问对象。使用了最简单的单例,并未从线程安全的角度进行进一步的限制,原因在于考虑到当前应用中只有3个Activity使用了DAO,由图4-2可知Activity之间的切换类似于进程对于CPU的占用一样,当前显示在界面上的Activity是活动状态而其他Activity则是挂起状态,因此不必担心它们的线程同时去创建DAO对象以引起当前系统中多个DAO对象的状况。public class SkyG

20、ameDataBaseDao private static SkyGameDataBaseDao instance = null;private SQLiteDatabase database = null;private Context context = null;private SkyGameDataBaseHelper helper = null;public static SkyGameDataBaseDao getInstance (Context context)if(instance = null)instance = new SkyGameDataBaseDao(contex

21、t);return instance;private SkyGameDataBaseDao(Context context)this.context = context;helper = new SkyGameDataBaseHelper(context,1);while(this.database = helper.getWritableDatabase()=null);public void insertPlayer(SkyGamePlayer player)String sql = context.getResources().getString(Rpos_table);ContentV

22、alues values = new ContentValues();values.put(score,player.getScore();values.put(name, player.getName();if(!this.database.isOpen()this.helper.onOpen(this.database);try this.database.beginTransaction();this.database.insert(sql, null, values);this.database.setTransactionSuccessful(); catch (Exception

23、e) / TODO Auto-generated catch blocke.printStackTrace();finallythis.database.endTransaction();public ArrayList getPlayers()ArrayList players = new ArrayList();String sql = context.getResources().getString(R.string.select_form_compos_table_count);Cursor cursor = database.rawQuery(sql, null);cursor.mo

24、veToFirst();if(cursor.getCount() 0)int count = 0;count+;players.add(new SkyGamePlayer(count,cursor.getString(1),cursor.getInt(2);while(cursor.moveToNext()count +;players.add(new SkyGamePlayer(count,cursor.getString(1),cursor.getInt(2);return players;public void delete()String sql = context.getResour

25、ces().getString(R.string.delete_from_compos_table);if(!this.database.isOpen()this.helper.onOpen(this.database);try this.database.beginTransaction();this.database.execSQL(sql);this.database.setTransactionSuccessful(); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();finally

26、this.database.endTransaction();public void close()if(this.database.isOpen()this.database.close();图4-2Android中Activity生命周期状态图4.2.2 SQLite数据库SQLite,是一款轻量级的关系型数据库。由于它占用的资源非常少,所以在很多嵌入式设备都是用SQLite来存储数据。Android作为目前主流的移动操作系统,完全符合SQLite占用资源少的优势,故在Android平台上,集成了一个嵌入式关系型数据库SQLite。由于SQLite是轻量级的关系型数据库,它支持的SQL语句

27、也是有限的,在使用SQL语句获得前6名玩家的信息时直接使用了SQLite不支持的TOP语句引起了异常。在查阅相关资料后才发现SQLite不支持TOP语句,因此使用语句DESC LIMIT来代替TOP达到了自己想要的只获得表compositor_table中的score字段值最大的前六个记录信息。SELECT * FROM compositor_table ORDER BY score DESC LIMIT 64.3 游戏界面设计4.3.1开始界面使用SurfaceView将图4-3中的未被按下的按钮和图4-5游戏开始界面背景图片绘制成游戏开始界面图4-6。图4-3 未被按下的按钮图标集图4-4

28、 被按下的按钮图标集图4-5 开始界面背景图片图4-6 开始界面4.3.1.1 AndroidManifest.xmlAndroid应用程序中,并没有像C+和Java这样有main函数来作为应用程序的入口。Android应用程序提供的是入口Activity,而非入口函数。AndroidManifest.xml文件中定义了整个Android应用所包含的Activity.在AndroidManifest.xml中将SkyGameStartActivity设置为当前SkyGame启动时,默认加载的Activity,代码如下: 4.3.1.2 Activity中注册layout在SkyGameStar

29、tActivity的onCreate方法中设置要显示的layout,方法如下所示:protected void onCreate(Bundle savedInstanceState) / TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.sky_game_start_layout);/设置当前activity调用的layout/其他操作4.3.1.3 BroadcastReceiver由于本应用是有多个Activity为了解决多个Activity在其中任意一个Act

30、ivity结束时都会相应一起退出系统,因此针对每一个Activity设置一个BroadcastReceiver来接收广播,一旦接收到广播当前Activity自动退出。Activity接收到广播后退出的代码如下所示:private BroadcastReceiver exitReceiver = new BroadcastReceiver()Overridepublic void onReceive(Context context, Intent intent) / TODO Auto-generated method stubSkyGameScreenRollActivity.this.fin

31、ish();4.3.1.4 发送广播而当前Activity在被按下“EXIT”或者“退出”按钮时,会向外界发送一个广播,之后结束自己:Activity activity = (Activity)context;Intent intent = new Intent(EXIT);intent.setAction(EXIT);activity.sendBroadcast(intent);activity.finish();4.3.1.5 MediaPlayer(媒体播放器)本应用使用Android的MediaPlayer来演奏每一个页面的背景音乐。背景音乐可以存放在两个位置,一个是当前工程的/res

32、/raw目录下,如果是存放在该目录下的话,在install当前Android工程时,需要耗费非常的时间将此类音频文件上传到Android虚拟机中。另一个存放位置是直接将音频文件上传到DDMS的/mnt/sdcard/Music文件夹下,这相当于将该音频文件放入到了Android手机的SD卡上了,相对于存放位置一来说,该方法在加载Android工程时消耗的时间比较少。具体向虚拟机中上传文件如图4-7所示:图4-7 DDMS向Android虚拟机中上传文件MediaPlayer使用方法:private MediaPlayer startSound = null;startSound = new M

33、ediaPlayer();try /* * 从sdcard中获得音频文件的路径 */startSound.setDataSource(/mnt/sdcard/Music/start.mp3);startSound.prepare(); catch (IllegalArgumentException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (SecurityException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (Ille

34、galStateException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();startSound.setLooping(true) ;/设置循环由于当前应用针对不同的显示界面(Activity)有不同的背景音乐,因此当前Activity挂起时,对应的背景音乐也要挂起(startSound.pause())。而在当前Activity销毁(destory)时,需要对背景音乐进行

35、停止(startSound.stop())和回收(startSound.release())操作。4.3.1.6 layout中调用SurfaceView普通的layout设置与直接调用SurfaceView的layout有所不同,一下列出调用SurfaceView的layout的格式: 此处使用自定义SurfaceView的绝对路径来编写开始页面的layout文件,使得开始页面直接使用该SurfaceView绘制的Bitmap作为背景图片来显示。SurfaceView所需要设置下它的SurfaceHolder 和Monitor(实现CallBack接口)属性holder = getHolde

36、r();monitor = new Monitor();holder.addCallback(monitor);Monitor类的方法:方法surfaceCreated(SurfaceHolder holder)的主要作用是:在surfaceview创建的绘制SurfaceView的内容。方法surfaceDestroyed(SurfaceHolder holder)的主要作用是:在surfaceview销毁时对于当前SurfaceView中的一些对象做销毁处理。SurfaceView的方法:onTouchEvent(MotionEvent event)可以捕获鼠标对于屏幕的触碰事件,在该方法

37、中对于鼠标触碰的区域做出判断如果点击的为按钮图片的位置则会调用图4-4中对应的被按下按钮来显示,如此显示使用户有一个可感受的按钮被按下的动态即视感,用户体验更好。public boolean onTouchEvent(MotionEvent event) / TODO Auto-generated method stubint action = event.getAction();float eventX = event.getX();float eventY = event.getY();if(eventX = START_X)&(eventX = START_Y)&(eventY = OPTION_X)&(eventX = OPTION_Y)&(eventY = SCORE_X)&(eventX = SCORE_Y)&(eventY = EXIT_X)&(eventX = EXIT_Y)&(eventY = EXIT_Y + exitBut

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号