基于安卓坦克大战游戏毕业论文.docx

上传人:b****6 文档编号:5832922 上传时间:2023-01-01 格式:DOCX 页数:22 大小:123.52KB
下载 相关 举报
基于安卓坦克大战游戏毕业论文.docx_第1页
第1页 / 共22页
基于安卓坦克大战游戏毕业论文.docx_第2页
第2页 / 共22页
基于安卓坦克大战游戏毕业论文.docx_第3页
第3页 / 共22页
基于安卓坦克大战游戏毕业论文.docx_第4页
第4页 / 共22页
基于安卓坦克大战游戏毕业论文.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

基于安卓坦克大战游戏毕业论文.docx

《基于安卓坦克大战游戏毕业论文.docx》由会员分享,可在线阅读,更多相关《基于安卓坦克大战游戏毕业论文.docx(22页珍藏版)》请在冰豆网上搜索。

基于安卓坦克大战游戏毕业论文.docx

基于安卓坦克大战游戏毕业论文

摘要

本设计采用面向对象的设计模式,对游戏中的所有物体赋予对象的概念和属性。

在开始游戏后,可以对游戏的进行一些初始设置。

在游戏按钮主页面上面有三个按钮,这三个按钮分别是开始游戏,设置音效和积分榜。

设置音效分为背景音乐的设置还有音效的设置,这里的设置主要是开关。

音乐是背景音乐,音效是当发射子弹时,带的声音还有当子弹击中敌方坦克时,发出的爆炸声。

积分榜是玩家的得分展示,游戏最后可以根据积分来判断玩家是否破纪录,如果破纪录,则游戏结束时界面会显示恭喜你破纪录了,如果没有破纪录,则会显示请再接再厉。

开始游戏,玩家可以通过主界面上面的虚拟按钮来控制主角的左右移动,通过触屏来控制坦克炮筒的角度,并且发射子弹。

敌方单位随机的出现在屏幕上,然后经过一段弧形的路径,如果在移动过程中被子弹击中,子弹和坦克会消失,如果没有被子弹击中,则会判断该坦克是否在屏幕上面,在屏幕上面就会继续移动,不在屏幕上面该目标就会消失。

分数的记录是在60秒内,主角坦克击中敌方坦克的数量。

关键词:

面向对象坦克大战JavaSocket类

Abstract

Thisdesignusesanobject-orienteddesignpatterns,allobjectsinthegametogivetheconceptofobjectsandattributes.Atthebeginningofthegame,thegamecanmakesomeinitialsetup.Buttonhomesideinthegamewiththreebuttons,whicharethreebuttonstostartthegame,settheaudioandstandings.

Setaudiosettingsandbackgroundmusicintosoundsettings,setthemainswitchhere.Musicisbackgroundmusic,soundeffectswhenfiringbullets,theband'ssoundaswellasthebullethitenemytanks,theissueoftheexplosion.

Standingsshowtheplayer'sscore,thegamecaneventuallypointstodeterminewhethertheplayeraccordingtotherecord,iftherecord,thegameisoverwhenthescreendisplaysCongratulationsonyourrecord,ifnotrecord-breaking,itwilldisplayyourpersistentefforts.

Startthegame,playerscanvirtualbuttonsabovethemaininterfacetocontrolandmovearoundtheprotagonist,throughthetouchscreentocontroltheangleofthetankbarrelandfiringbullets.Enemyunitsrandomlyappearonthescreen,andthenafteracurvedpathduringthemoveifhitbyabullet,bulletsandtankswilldisappear,ifnothitbyabullet,itwilldeterminewhetherthescreenabovethetank,willcontinuetomoveinthescreenabove,notonthescreenabovethetargetdisappears.Scoresrecordiswithin60seconds,theprotagonisthitenemytankstanknumber.

Keywords:

Object-orientedTankedaizhanJavaSocketclass

第1章绪论1

1.1系统开发背景1

1.2相关技术介绍1

1.2.1Eclipse1

1.2.2ADT2

1.2.3AndroidSDK2

1.2Android、C语言、C++三种主流编程技术比较2

第2章需求分析3

2.2功能上需解决的问题3

第1章绪论

1.1系统开发背景

游戏软件业是一个新兴行业,存在着巨大的生存和发展空间,同时它也是一个存在社会争议的行业。

 

游戏的完整定义可以归纳为:

一种由道具和规则构建而成、由人主动参与、有明确目标、在进行过程中包含竞争且富于变化的以娱乐为目的的活动,它与现实世界相互联系而又相互独立,能够体现人们之间的共同经验,能够体现平等与自由的精神。

 

游戏产业准确地讲应该叫做电子娱乐业,是指基于电子技术、计算机技术、软件技术、网络技术和无线技术的新型娱乐产业,分为单机游戏、网络游戏和无线游戏等几个部分。

电子游戏业从诞生至今已经有几十年的时间,可仅仅在这短短的几十年的时间里,它却在发达国家的经济发展中发挥了显著的作用。

 

游戏软件业从诞生到现在,历经几代的发展,已进入了一个非常成熟的时期。

对于我国而言,游戏软件业也有快速的发展,但是因为很多原因阻碍了这个产业的发展,如游戏软件研发人才缺乏,软件开发投入不足;对青少年的负面影响,一些不健康的游戏软件导致了社会对游戏软件的偏见;技术滞后等情况。

 

坦克大战游戏是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。

它看似简单但却变化无穷,令人上瘾。

相信大多数用户都还记得为它痴迷得茶不思饭不想的那个坦克大战时代。

究其历史,坦克大战最早还是出现在FC机上,现在又重新掀起这股让人沉迷的坦克大战风潮,它的规则简单,容易上手,且游戏过程变化无穷,使用户既能感受到游戏中的乐趣,也给用户提供了一个展现自己高超技艺的场所。

这次练习的是在Visual studio C++ 2003上生成坦克大战游戏。

Microsoft Visual C++是一个非常好的windows软件开发程序,很多的windows平台下的软件都是把它作为辅助工具编写出来的。

现在使用得比较多的是6.0版 和.NET版,随着版本的提高,Microsoft给我们提供的函数数据库也越来越方便,越来越丰富了。

当完成时,觉得自己在不知不觉中已跨入了它的大门。

使用Microsoft Visual studio C++ 几乎可以做出一切东西来,从即时战略到三维RPG游戏。

当然还有各种应用软件了。

如果要开发出更复杂的游戏,就还需要学习更多的东西,为了提高显示速度,需要使用DirectX,为了制作3D图像,又要使用Direct3D。

由于游戏的流程和内部原理很复杂,所以需要学习数据结构、图形学„„ 学习这么多专业知识需要很大的努力,不过我心中有一个梦想,那么再难的目标也能实现。

“千里之行,始于足下”,尤其是在迈出了坦克大战的第一步之后,实际上,已经走进了软件开发,尤其是游戏开发的大门,前面的世界是美丽多彩而又充满挑战的。

1.2相关技术介绍

1.2.1Eclipse

Eclipse是著名的跨平台的自由集成开发环境(IDE)。

其本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。

许多软件开发商以Eclipse为框架开发自己的IDE,因此得到众多组织定力支持。

1.2.2ADT

这是Eclipse插件,作用是关联AndroidSDK,使Eclipse能够新建Android工程。

1.2.3AndroidSDK

AndroidSDK全称为AndroidSoftwareDevelopmentKit,它提供在Windows/Linux/

Mac平台上开发Android应用的开发组件。

包含在Android平台上开发移动应用程序的各种工具集,主要是由以下5个部分组成:

Andriod模拟器(AVDManager.exe):

运行在计算机上的虚拟移动模拟器,可以使用模拟器来在一个实际的Android运行环境下设计,调试和测试应用程序。

调试监视服务(ddms.bat):

它集成在Dalvik(Android平台虚拟机)中,用于管理运行在模拟器或设备上的进程,并协助进行调试。

可以用它来去除进程,选择一个特定程序来调试,生成跟踪数据,查看堆和线程数据,对模拟器或设备进行屏幕快照等。

Android调试(sb.exe):

它用于向模拟器或手机设备安装应用程序的apk文件和从命令行访问模拟器或手机设备。

也可以用于将标准的调试器连接到运行在android模拟器或手机设备上的应用代码。

SQLite数据库(sqlite.exe):

Android应用程序可以创建和使用SQLite数据文件,开发者和使用者也可以方便的访问这些数据文件。

创建SD卡工具(mksdcard.exe):

主要用于模拟手机SD卡。

在创建AVD中,可以选择该工具作为SD卡。

1.2Android、C语言、C++三种主流编程技术比较

Android(Java)语言是一种跨平台,适合于分布式计算环境的面向对象编程语言。

JAVA现在主要用在WEB开发,手机游戏及一些平台游戏的开发,因为它具有很好的跨平台性,在手机等各种电子产品上应用非常广泛。

C语言是一种面向过程编程,这就使得Java具有重用的特性,在开发速度上比C语言更快,但是在运行速度上却是C更快,因为C属于底层语言,它比JAVA更加亲近机器,所以在许多系统开发上一般是用C语言,比如我们常用的XP系统、LINUX系统,都是C语言开发的。

跨平台的服务器端的嵌入式脚本语言。

C++多用于游戏引擎、反病毒、硬件驱动以及一些对运行效率要求比较高的应用程序,比如数据库管理系统。

C++语言在提供强大的功能的同时也提高了程序含BUG的可能性。

C++为了照顾大量的C语言使用者,而兼容了C,使得自身仅仅成为了带类的C语言,多多少少影响了其面向对象的彻底性。

 

第2章需求分析

2.1系统的功能需求

坦克大战是一款经典的游戏本游戏在学习继承前辈的同时尝试性的进行一些创新下面是对系统主要功能的简要概述。

整体上说,本游戏分为敌我双方,主战坦克由玩家控制,敌方坦克能够智能化的随机出现在屏幕上,并且移动但是不会发射子弹。

玩家的控制:

游戏打开的时候,玩家可以选择音乐音效的开关还可以查看积分榜,然后进入游戏,玩家可以通过屏幕上面的虚拟键控制坦克的运行,可以通过触屏来控制坦克的炮筒方向并且打出炮弹,当坦克打中敌方坦克,子弹和地方坦克都死亡,分数会加一。

游戏过程中,玩家不可以暂停游戏,然后再开始游戏。

当倒计时结束时,则游戏结束。

敌方坦克的智能运行:

敌方坦克由于需要具有一定的智能性,随机的出现在屏幕上,并且消失在屏幕以外,撞到主角坦克时,也不会发生爆炸。

使之具有一定的可玩性。

敌人可以自动行走,但是应当在以下适当的情况下转向:

首先是是否超出界面的边界,其次是是否与地图障碍物发生了碰撞,再次是是否与用户坦克发生了碰撞。

子弹的运行:

主战坦克是有玩家控制打出的,通过控制炮筒的方向,向不同的方向发射子弹,如果击中目标就会爆炸消失,如果没有击中目标,出了屏幕也会消失。

音乐音效的设置:

玩家可以根据自己的喜好来通过开关按钮,控制音乐音效。

积分榜:

玩家的得分会在积分榜上面显示,主要显示六个最高分。

主角击中一个敌方坦克分数就会增加一,直到60秒结束,所得的分数,就是该次游戏的最终得分,所得的分数要和数据库里面的分数进行比较的,看看是否能够显示在积分榜上面。

2.2功能上需解决的技术问题

游戏程序是一项精度要求很高的程序系统,因为其代码利用率很高。

一个实时运行的最终作品,每秒都会运行成千上万行程序、绘图事件、键盘事件都会以极高的频率在后台等待响应。

若有丝毫的差别都将很容易导致程序在运行不久后可能出现严重错误甚至崩溃死机。

因此,其逻辑设计应当相当严谨,需将所有可能发生的事件及意外情况考虑在设计中。

游戏中为了美观和适用性强,就需要采用外部文件引入的png图片有关贴图,屏幕刷新的双缓冲等都有较好的解决方案。

这里应当减少手工画图,从而是程序能更高效的运行。

己方坦克的运行可以通过监听键盘控制,但由于敌方是自动运行就需要有较强的智能性同时屏幕上的敌方可能会有较多的数量这需要为每个敌方开辟一个线程以便能让其独立运行。

还需要在坦克死亡的时候终止线程。

Android的多线程能力为实现这样的游戏提供了可能。

敌人坦克的运行算法也需要进行适当的设置以免游戏过于简单、单调或者过于繁杂。

对于双方坦克发出的子弹的控制也需要对其跟踪控制,为了避免子线程太多的现象,子弹不应当成为独立的线程。

这里就需要一个单独的线程来控制子弹或者是由子弹所属的坦克来控制子弹。

这需要对所有的对象有较好的控制。

另外子弹在运行过程中也需要实时扫描是否碰撞敌方坦克或屏幕边界。

如果子弹由产生自己的坦克控制,就需要特别这一子弹类和坦克类之间的关系。

碰撞检测是坦克大战的最重要的环节之一。

主角坦克在运动过程中需要考虑到是否碰子弹本身或对方坦克,以免重叠运行,造成许多逻辑上不可能的情况。

每一次刷新页面、每一次的移动都要考虑整体以及个体与个体的变化。

游戏的结束、开始、动态信息画面作为构成一个完美程序都是必不可少的重要部分。

良好的用户界面更是吸引用户的硬指标相关的美术构图也需要有一定的考虑。

游戏中敌方坦克的路径专门类,这个类中存储着的三维数组就是敌方坦克的经过的坐标和时间。

用户运行游戏时需要有分数记录的可能。

如何采用合理的记分标准需要进行适当的设计。

记录分数的存储方式也需要有较好的解决方案。

手机中由于处理器和内存空间、存储空间都十分有限,其数据库系统与普通PC大相径庭。

Android是基于虚拟机的半解释型编译系统,其执行效率较C++等完全编译后的程序会低很多,程序如果不进行精简和优化,将可能导致运行的不流畅。

除开发过程中对结构上的控制、变量的使用、算法的优化等优化外,还可以使用混淆器(Obfuscator)进行程序打包后的优化。

 

第3章概要设计

3.1系统功能设计

3.1.1主角

在人机对战时,主角的主要功能是点击左右虚拟按钮,坦克会向左向右移动,但是通过按住按钮的时间,来控制坦克的移动速度,按住时间长,坦克的速度就会加快,按住的时间短,坦克就会移动的比较慢。

通过触屏来控制坦克炮筒的方向,并且发射子弹。

当子弹打中目标时,子弹和目标都会爆炸,当子弹没有打中目标时,子弹走出屏幕,子弹消失。

该游戏主要是控制在60秒内,倒计时为零则游戏结束,打中目标数就是该次游戏的分数。

如图3.01所示,

图3.1主角功能图

当游戏进入到游戏按钮主页面时,可以对游戏进行音乐音效的设置,音乐是当游戏开始时,加的背景音乐;而音效设置是指挡子弹发射或者子弹击中目标时,所加的音效。

按钮主页面的音效设置包括两方面的内容,音效的设置和背景音乐的设置。

音效分为开,关;音乐也分为开和关。

背景音乐从游戏的开始直到游戏的结束,而音效主要是在游戏的60秒内才有并且要有子弹的发射或者子弹及中敌方坦克,敌方坦克发生爆炸才能听到音效的。

如表3.2所示

表3.2音乐音效用例图

用例名称

背景音乐音效

功能简述

控制游戏背景音乐的开关;发射子弹时的音效;

子弹打中目标时,爆炸音效

前置条件

游戏开启,音乐音效打开

后置条件

游戏没有结束,子弹打中目标或者有子弹发射

基本流

1、在主按钮界面中,设置音效音乐

2、设置音乐的开关

3、设置音效的开关

4、设置成功,返回主按钮界面

敌方坦克在游戏开始以后才开始出现,并且没有什么太大的规律,都是从屏幕的最右面出现,然后消失在屏幕以外或者被子弹击中消失。

敌方坦克走的路线是有轨道的,从屏幕的右上方出现后,会走一段轨迹,在运动过程中如果被子弹打中就会爆炸消失,如果没有被击中,则会消失在屏幕以外的地方。

如表3.3所示,

表3.3敌方坦克用例图

用例名称

敌方坦克

功能简述

坦克随机出现,被击中或者离开屏幕

前置条件

游戏开始,并且在60秒之内

后置条件

游戏没有结束

基本流

1、在主按钮界面中点击开始游戏

2、敌方坦克就会在屏幕上随机的出现

3、如果被子弹打中就会爆炸如果没有,则会消失在屏幕以外

3.2系统功能设计流程

我把整个游戏分为了两部分游戏开始欢迎界面,游戏功能选择。

而游戏功能选择又分为三部分:

游戏开始,音乐的开关,积分榜。

游戏首次运行时,会有动画界面的播放,动画界面分为两个画面,动画画面1、动画画面2。

游戏开始时,可通过虚拟键的来控制坦克的左右移动,通过在屏幕上面点击来调整炮筒的角度并且发子弹,如果击中敌方坦克,就会有相应的音效和动画。

音乐开关设置分为游戏背景音乐的设置和游戏音效的设置。

分数的最高纪录主要记录的是时间和分数。

时间设置为一分钟,在一分钟内打的坦克数量就是玩家该次游戏的得分,得分与数据库中的分数进行比较,如果是最高的则为破纪录,则显示恭喜你打破记录,如果没有破纪录则显示为加油,再接再厉,同时还要和其他的分数进行比较,是否在最高分的五个分数之中,如果在这五个当中就会删除原来五个分数中最低的那个,并且获取当时玩家游戏的时间,显示在积分榜中。

如图3.4

 

图3.4总体功能结构图

3.3坦克大战相关功能联系设计

Android(java)主要是面向对象的编程语言,也就是坦克大战中的每一个类都有各自的动作和功能。

例如子弹类,子弹类主要就是发射子弹和子弹的碰撞爆炸效果。

这些类表面上都是各自独立,没有什么太大的关系。

但是整个程序的运行要所有的类之间互相配合才能完成。

通过点击开始游戏按钮,游戏就会进入到欢迎动画界面,播放完动画后进入按钮主界面,选择游戏开始按钮就会进入游戏机面,通过控制主角的移动和炮筒的方向来控制子弹的发射方向,并且判断是否击中目标,一分钟后,游戏结束进入到结束界面。

如图3.5所示。

图3.5主类设计流程

图3.6主类相关流程图

GameActivity类是主类,通过调用其他类中封装的方法来使整个系统运行起来实现相应的功能,下面显示GameActivity类与各个类之间的关系,并且展示个各类之间调用关系,类完成的主要动作,还有各个动作之间是怎么配合,通过什么函数实现。

其中坦克的Daoao类还有Target类是主角坦克和敌方坦克出现的类,主角发射子弹通过调用Bullet类还有explosion类来实现的。

主角发射子弹,击中敌方坦克并且发生爆炸,最后通过score类,判断是否破纪录,并且是否能够显示在积分榜上面。

如图3.6所示

 

第4章详细设计

4.1坦克大战主要类基本功能分析

GameActivity类,把游戏分为八个界面,在不同的状态下进入到不同的界面来完成不同的功能和动作,这八个界面主要是欢迎界面(WellcomeSurfaceView),主菜单界面(MainMenuSurfaceView),游戏界面(GameView),音效控制界面(SoundControlsSurfaceView),积分榜界面(HighScoreSurfaceView),胜利界面(WinSurfaceView),失败界面(FailSurfaceView),游戏结束界面,高分记录界面。

其中对数据库也做了定义用SQL数据库,把分数存储到数据库。

当游戏处于不同的状态或者动作时就会转到相应的界面,来完成相应的动作或者功能。

定义了一个类为classWhatMessage()包含了这八个方法,新定义一个控制器,还定义了向Handler发送信息的方法。

当Handler接收到发送来的不同的信息,并采用Case来进行判断是哪一个界面并且转到该界面,来实现和完成相应的功能。

并且还定义了触屏,当触到了不同的功能也会转到相应的类来实现这个功能。

一样也是使用了switch…case语句来实现的。

数据库的初始化也在这里完成了,主要是数据库的创建方法,数据库的关闭,插入记录的方法和查询方式。

全屏的设置,设置全屏的操作主要就两点:

隐去状态栏部分,包括电池等图表;把应用的名字也隐去不显示。

隐去标题栏(应用程序的名字)用:

this.requestWindowsFeature(Window.FEATURE_NO_TITTLE)来实现的。

隐去状态:

this.getWindow().setFlags(,,可以通过在项目的AndroidManifest.xml文件中对Activity的属性中进行配置来实现,隐去标题:

android:

theme=“@android:

style/Theme.NoTitleBar”;设置全屏(隐去状态栏和应用标题):

android:

theme=“@android:

style/

WellcomeSurfaceView类,该类主要实现了游戏开始时进行的动画加载,主要分为两个画面,并且这两个画面只播放一次。

这两个画面播放完毕之后,就进入到了MainMenuButton界面。

而该类的实现主要是通过以下几个方法实现的。

首先是图片的引用,定义了一个logo图片数组,并且获得屏幕的宽和屏幕的高,目的是让图片容易实现占满整个屏(好设置)。

其次是把图片加载到系统中应用。

在引用过程中要对图片做一些处理,为了让图片美观的显示,设置抗锯齿:

Paint.setAntiAlias(true);还有图片资源的加载使用BitmapFactory.decodeResource(Activity.getResources(),,其中n为数字,name为图片的名字。

使用onDraw(Canvascanvas)来对画布和画笔进行设置,背景的设置使用画笔Paint,设置画笔的颜色和绘制黑填充矩形背景:

paint.setColor(color.BLACK)Canvas.drawRect(0,0,

screenWidth,screenHeight,paint),这个矩形的大小就是屏幕的大小即该矩形覆盖整个屏幕。

然后向这个矩形贴图,也就是用图片覆盖整个屏幕。

canvas.drawBitmap(currentLogo,currentX,

currentY,paint)使用这段代码来实现的。

最后使用run()函数来实现图片的动画显示。

先计算一下图片的位置,在横坐标上currentX=screenWidth/2-bm.getWidth()/2,计算出屏幕的中间坐标,还有图片的中间坐标;在纵坐边上currentY=screenHeight/2-bm.getHeight()/2获得图片的纵坐标还有屏幕的纵坐标。

这样做的目的是让图片进行居中显示,美观。

最后动态的更改图片的透明度的值并且不断的重绘来实现动画的效果。

还有判断是判断图片是不是原来的图片,如果不是原来的图片,而是重新放里面的新图片,则图片动画需要多等一会。

还有用到了画布,首先是画布的获取canvas=myholder.lockCanvas(),然后是在画布上绘图锁定画布,myholder.unlockCanvasandPost(canvas)。

动画播放完毕后,主动转到主菜单

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

当前位置:首页 > 经管营销

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1