android飞机小游戏实训报告.doc_第1页
android飞机小游戏实训报告.doc_第2页
android飞机小游戏实训报告.doc_第3页
android飞机小游戏实训报告.doc_第4页
android飞机小游戏实训报告.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1实训时间2012年12月17日2013年01月10日2实训内容2.1引言随着科技的发展,现在手机的功能已不仅仅是简单的打接电话、收发短信了。更多的手机用户希望在工作、学习之余通过方便灵巧可随身携带的仪器休闲娱乐。因此,为了迎合众多用户的需求并适应现在手机的规模,我通过这近一个月的学习决定开发出了一套适合各阶层人士的具有很强的娱乐性和交互性的飞机小游戏。虽然现在市面上存在着各种各样的游戏版本,可是飞机游戏其市场还是相当大的。因为它的特殊在于它能吸引人更深入,爱不释手.随着游戏关卡不断提高,其难度也更大,刺激性也更强。可以说该游戏的优势在于它的简单易行,不论是手机,还是小游戏机,都能很快顺利的运行。对于在外忙碌的人,不可能花费大量时间在娱乐上,大型游戏是行不通的。这样的小游戏刚好迎合了他们的需求。本游戏是基于安卓系统下开发的应用,采用java语言和安卓自带的xml布局编写,采用手机键盘进行操作;操作简便,容易上手。这学期,我们已经学过了JAVA 的基本知识,但是这个开发环境对于我们来说很陌生,还需要了解Android 提供的扩展的JAVA 功能。游戏通过控制飞机发射子弹击毁敌机来实现,子弹为自动发射,飞机可以进行上下左右移动,当子弹碰撞敌机时即判定击毁,通过击败最后的boss来通关游戏。2.2实训过程和目的本次实训是由学校聘请外校教师为我们讲解android的一些知识,并带领我们做一些小程序。本次实训的时间共四周,长达一个月的时间。第一、二、三周是我们的培训时期,每天上午我们听指导老师讲课,下午完成他布置的编程小作业,比如做个简易计算器,模仿银行ATM的取款功能,小型管理系统等。刚开始,我们会出现各种小问题,老师都忙不过来,不过老师还是很耐心地为我们讲解了,在此要非常感谢指导老师,他们负责任的精神是值得我们每位同学学习的。总之,我们最后掌握了在搭建好的Android 开发环境下编写和运行java程序的基本步骤,以及各个Android应用程序组件的含义,用途和使用方法,比如:Activity(最基本的组件),Intent(实现屏幕之间的切换),各种布局方式等,这让我们在编写程序上也提高了工作效率。三个星期的培训也让我们深刻认识到了android功能的强大。最后一周,我开始着手于我的实习项目小飞机游戏,我必须要知道这个游戏最基本的游戏规则,软件的基本功能,整个程序的基本框架,主要是三个功能模块:界面模块、运动控制模块、奖励模块,可能因为时间太紧迫了,我所编写的程序过于简单化,但是还是可以运行的。在编写程序的过程中,我也加入了自己的创意,对游戏的界面进行更改和拓展,虽然问题很小,但总之创新会成为最终成果的一个亮点。我们本次实训的目的就是通过学习和实践,熟悉和掌握一些基于Android平台的编程开发的基础知识,并利用人机交互相关原理,设计并开发出可在Eclipse虚拟机上运行的小游戏。2.3 Android系统在用android编写程序前,我们要先了解android系统。2.3.1 Android系统简介 (1)命名由来 Android一词最早出现于法国作家利尔亚当(Auguste Villiers de lIsle-Adam)在 1886 年发表的科幻小说未来夏娃(Lve future)中。他将外表像人的机器人取作 Android。(2)Logo来源Android的Logo是由 Ascender 公司设计的。其中的文本使用了Ascender公司专门制作的称之为“GoogleDroid字型”的字型。Android是一个全身绿色的机器人,绿色也是Android的标志。颜色采用了PMS 376C和RGB中十六进制的#A4C639来绘制,这是Android操作系统的品牌象征。有时候,它们还会使用纯文本的Logo。(3)Linux内核Android操作系统的内核属于Linux内核的一个分支,具有典型的Linux周期和功能,除此之外,Google为了能让Linux在移动设备上良好的运行,对其进行了修改和扩充。Android去除了Linux中的本地X Window System,也不支持标准的GNU库,这使得Linux平台上的应用程序移植到Android平台上变得困难。2008年,Patrick Brady于Google I/O演讲“Anatomy & Physiology of an Android”,并提出的Android HAL架构图。HAL以*.so档的形式存在,可以把Android framework与Linux kernel隔开,这种中介层的方式使得Android能在移动设备上获得更高的执行效率。这种独特的系统结构被Linux内核开发者Greg Kroah-Hartman和其他内核维护者称赞。Google还在Android的内核中加入了自己开发制作的一个名为“wakelocks”的移动设备电源管理功能,该功能用于管理移动设备的电池性能,但是该功能并没有被加入到Linux内核的主线开放和维护中,因为Linux内核维护者认为Google没有向他们展示这个功能的意图和代码。2010年2月3日,由于Google在Android内核开发方面和Linux社区方面开发的不同步,Linux内核开发者Greg Kroah-Hartman将Android的驱动程序从Linux内核“状态树”(“staging tree”)上除去。2010年4月,Google宣布将派遣2名开发人员加入Linux内核社区,以便重返Linux内核。2010年9月,Linux内核开发者Rafael J. Wysocki添加了一个修复程序,使得Android的“wakelocks”可以轻松地与主线Linux内核合并。2011年,Linus Torvalds说:“Android的内核和Linux的内核将最终回归到一起,但可能不会是4-5年。”(4)特点1.显示布局Android操作系统支持更大的分辨率,VGA,2D显示,3D显示都给予OpenGL ES 2.0标准规格,并且支持传统的智能手机。2.数据存储Android操作系统内置SQLite小型关联式资料库管理系统来负责存储数据。3.网络Android操作系统支持所有的网络制式,包括GSM/EDGE、IDEN、CDMA、EV-DO、UMTS、Bluetooth、Wi-Fi、LTE、NFC和WiMAX。4.信息作为原设计给手机使用的操作系统,Android操作系统原生支持短信和邮件,并且支持所有的云端信息和服务器信息。5.语言Android操作系统支持多语言。6.浏览器Android操作系统中内置的网页浏览器基于WebKit内核,并且采用了Chrome V8引擎。在Android 4.0内置的浏览器测试中,HTML5和Acid3故障处理中均获得了满分,并且于2.2版及之后能原生支持Flash。7.支持Java虽然Android操作系统中的应用程序大部分都是由Java编写的,但是Android却是以转换为Dalvik executables的文件在Dalvik虚拟机上运行的。由于Android中并不自带Java虚拟机,因此无法直接运行Java程序。不过Android平台上提供了多个Java虚拟机供用户下载使用,安装了Java虚拟机的Android系统可以运行J2ME的程序。8.媒体支持Android操作系统本身支持以下格式的音频/视频/图片媒体:WebM、H.263, H.264 (in 3GP or MP4 container)、MPEG-4 SP、AMR, AMR-WB (in 3GP container)、AAC, HE-AAC (in MP4 or 3GP container)、MP3、MIDI、Ogg Vorbis、FLAC、WAV、JPEG、PNG、GIF、BMP。如果用户需要播放更多格式的媒体,可以安装其他第三方应用程序。9.流媒体支持Android操作系统支持RTP/RTSP(3GPP PSS, ISMA)的流媒体以及(HTML5 )的流媒体,同时还支持Adobe的Flash,在安装了RealPlayer之后,还支持苹果公司的流媒体。10.硬件支持Android操作系统支持识别并且使用视频/照片摄像头,多点电容/电阻触摸屏,GPS,加速计,陀螺仪,气压计,磁强计,键盘,鼠标,USB Disk,专用的游戏控制器,体感控制器,游戏手柄,蓝牙设备,无线设备,感应和压力传感器,温度计,加速2D位位块传输(硬件方向,缩放,像素格式转换)和3D图形加速。11.多点触控Android支持原生的多点触摸,在最初的HTC Hero手机上即有这个功能。该功能是内核级别(为了避免对苹果公司的触摸屏技术造成侵权)。12.蓝牙Android支持A2DP,AVRCP,发送文件(OPP),访问电话簿(PBAP),语音拨号和发送手机之间的联系。同时支持键盘,鼠标和操纵杆(HID)。13.语音功能除了支持普通的电话通话之外,Android操作系统从最初的版本开始就支持使用语音操作来使用Google进行网页搜索等功能。而从Android OS v2.2开始,语音功能还可以用来输入文本、语音导航等功能。14.无线共享功能Android操作系统支持用户使用本机充当“无线路由器”,并且将本机的网络共享给其他手机,其他机器只需要通过WiFi寻找到共享的无线热点,就可以上网。而在Android OS v2.2版本之前的操作系统则需要通过第三方应用或者其他定制版系统来实现这个功能。15.截图功能从Android OS v4.0版本开始,Android操作系统便支持截图功能,该功能允许用户直接抓取手机屏幕上的任何画面,用户还可以通过编辑功能对截图进行处理,还可以通过蓝牙/E-mail/微博/共享等方式发送给其他用户或者上传到网络上,也可以拷贝到电脑中。2.3.2 Android的功能特征(l)应用程序架构:在应用程序架构内已经具备多种不同的基础组件,在开发应用程序时,就可以直接调用这些组件来使用,可以节省开发应用程序的心力及时间。(2)Dalvik虚拟机器:在Android平台上所使用Java虚拟机,不是Sim公司的标准Java虚拟机,而是使用Google自主开发的代号为Dalvik的虚拟机,它在保证API方面的兼容的同时,针对移动手机进行了大幅优化,占用资源更小,运行效率更高。(3)集成的浏览器:集成的浏览器是Android内建的浏览器,是以WebKit的浏览引擎为基础所开发成的。WedKit是一个开源浏览器网页排版引擎,目前使用WebKit引擎的浏览器主要有:Safari,Midori,Epiphany等。配合Android手机的功能,可以在浏览网页时,达到更好的效果,例如:局部性的缩放网页上的资讯、触控式的操作等效果。(4)优化的绘图能力:在程序里可以用到的绘图功能分为2D与3D两个方面。在2D方面,Android提供了一套特有的类库(SGL;而在3D方面则是使用OpenGLES1.0(openGL for Embedded systems)规范的类库。它们是一种非常快的图形引擎,并且支持硬件加速。(5)SQLite数据库:SQLite提供结构化的数据存取。SQLite是一款轻型的数据库,它的设计目标是嵌入式的,目前已经在很多嵌入式产品中使用了它,它占用的资源非常低。它能够支持Windows/Linux/U nix等主流的操作系统,同时能够跟很多程序语言相结合,比如php,Java等,还有ODBC接口,同样比起Mysql,PostgreSQL来讲,它的处理速度比它们都快。它无需安装和管理配置,它是一个储存在单一磁盘文件中的完整数据库,体积小只有250KB但支持数据库大小至2TB。它虽然很小巧,但是支持的SQL语句毫不逊色于其它开源数据库。同时它还支持事务功能和并发处理等等。SQLite也是一套开放性的关联式资料库,其特点在于轻量性方面的设计结构,更适合在手机上使用。(6)多媒体的支持能力:主要用于播放媒体文件。这同时包括对音频(如播放MP3或其他音乐文件等)和视频(如播放从网上下载的视频)的支持,并支持“播放URI地址”(Note:URI即是统一资源识别地址)模式在网络上直接播放的流媒体。另外支持各种通用的静态图像格式,例如:JPG、PNG、GIF等格式。(7)GSM技术:Global System for Mobile Communications,即全球移动通讯系统,俗称”全球通”,是一种起源于欧洲的移动通信技术标准,是第二代移动通信技术,其开发目的是让全球各地可以共同使用一个移动电话网络标准,让用户使用一部手机就能行遍全球。GSM技术是属于手机硬件方面的展现,也是在开发Android应用程序时可以突出的特点之一。(8)蓝牙、EDGE、3G及Wi-Fi:蓝牙是一种新型、开放、低成本、短距离的无线连接技术,可取代短距离的电缆,实现话音和数据的无线传输。EDGE(Enhanced Data Rate for GSM,Evolution),即增强型数据速率GSM演进技术。EDGE是一种从GSM到3G的过渡技术,它主要是在GSM系统中采用了一种新的调制方法,即最先进的多时隙操作和SPSK调制技术。由于8PSK可将现有GSM网络采用的GMSK调制技术的信号空间从2扩展到8,从而使每个符号所包含的信息是原来的4倍。Wi-Fi(WirelessFidelity),即无线保真技术,与蓝牙技术一样,同属于在办公室和家庭中使用的短距离无线技术。该技术使用的是2.4GHz附近的频段,该频段目前尚属没用许可的无线频段。其目前可使用的标准有两个,分别是IEEE802.lla和IEEE802.11b。这些通讯能力也是属于手机硬件方面的展现,也是在开发Android应用程序时可以突出的特点之一。(9)GPS: Global Positioning System,即全球定位系统,它是一个由覆盖全球的24颗卫星组成的卫星系统。这个系统可以保证在任意时刻和任何地点都可以同时观测到4颗卫星,以保证卫星可以采集到该观测点的经纬度和高度,以便实现导航、定位、授时等功能。这项技术可以用来引导飞机、船舶、车辆以及个人。这个同样也是属于手机硬体方面的体现,也是在开发Android应用程序是可以突出的特点之一。2.3.3Android开发环境(1)下载JDK 6首先需要的是JDK。Android SDK需要JDK 5或更高的版本,我们使用JDK 6来开发。以windows为例,从Sun网站(/javase/downloads/ )下载JDK 6并安装。接下来,设置JAVA_HOME环境变量以指向JDK安装文件夹。右键单击“计算机”选择“属性”,选择“高级系统设置”,然后单击“环境变量”。单击“新建”添加JAVA_HOME变量,如果该变量已存在,单击“编辑”修改它。JAVA_HOME的值类似于“C:Program FilesJavajdk1.6.0_16”。(2)下载Eclipse 3.5安装JDK之后,可以从 /downloads/ 下载Eclipse IDE for Java Developers。将下载的.zip的文件解压到任何位置。首次启动Eclipse时,它将要求为工作区间提供一个位置。为了简化操作,可以选择一个简单的位置,比如D:workspaces。(3)下载Android SDKAndroid SDK是开发android应用程序的基本要求,没有Android SDK,android应用开发无从谈起。Android SDK中包含一个模拟器,所以无需带有Android操作系统的移动设备就能开发Android应用程序。Android SDK可以从/sdk 下载。Android SDK同eclipse一样以.zip文件的形式发布,所以将其解压到合适的位置。Android SDK包含一个tools目录,需要将它添加到PATH中。(4)安装ADTADT这个Eclipse插件对开发Android应用程序有很大的帮助。它提供了一些工具来创建、测试、和调试Android应用程序。ADT需要使用Eclipse中的Install New Software工具来执行安装。(1)选择Help菜单项并选择Install New Software选项。这个选项在以前的Eclipse版本中为“Software Updates”。(2)选择“Work with”字段,输/android/eclipse/ 。Eclipse将连接该网站并生成列表,如图1所示。然后选择父节点Developer Tools,并确认同事选中所有子节点,然后单击Next。(3)更具提示安装所有的工具,并安装ADT所需工具的许可协议。单击“I accept”,然后单击Finish按钮。图1 使用Eclipse中的Install New Software功能安装ADT在Eclipse中安装ADT的最后一步是将他指向Android SDK。选择windows菜单并选择Preferences。在Preferences对话框中,选择Android节点并将SDK Location字段设置为Android SDK的路径(参见图2)然后单击Apply按钮。图2 将ADT指向Android SDK2.4飞机游戏设计2.4.1研究目标在如今社会,人们的工作学习压力逐渐增大,生活节奏逐渐加快,大多数人没有足够的时间去休闲娱乐,放松自己。这款小型的手机游戏,可以让我们随时随地都能享受游戏,。让我们从繁重的日常生活中解脱出来。游戏的主界面应该力求美观,爽心悦目,以提高玩家对游戏的兴趣。游戏的控制模块应该做到易懂、易操作,以给玩家一个很好的游戏环境。(1) 了解Android应用程序的设计和开发过程;(2) 使用多种组件进行Android 平台校园资讯软件的开发。本软件是基于Eclipse的开发环境,在Android平台上的手机游戏软件。2.4.2 需求细则1飞机(1)移动属性:必选描述:能够监听玩家操控。完成下列情况的任一种即可:玩家可以通过触摸屏触点的位置不同来控制飞机;键盘上的方向键控制飞机;点击屏幕上自己绘制的方向键控制飞机.(2)子弹属性:必选描述:飞机能够发射子弹。完成下列情况的任一种即可:飞机连续发子弹,只要飞机出现,就持续发射;(3)血量值属性:必选描述:飞机要有血量值,玩家能够根据血量值来判断飞机剩余血量。血量值必须具有下列特征:每被击中,血量值都要减少一个;当血血量值为0时,即判定为死亡。2敌机(1)移动属性:必选描述:能够移动。完成下列情况的任一种即可:上下飞行;斜着飞行;其它更有创意的设计。(2)子弹属性:必选描述:敌机能够发射子弹(3)碰撞 飞机子弹击中敌机属性:必选判定:子弹只要出现在敌机图片的范围内,即判定为击中描述:敌机被飞机击中,死亡或掉血。敌机子弹击中飞机属性:必选判定:子弹只要出现在飞机图片的范围内,即判定为击中描述:飞机被击中,掉血。敌机和飞机相撞属性:任选判定:只要飞机图片和敌机图片有重叠,即判定为相撞描述:敌机死亡,飞机掉血。飞机子弹和敌机子弹相撞属性:任选(此项无分)判定:飞机子弹图片和敌机子弹图片有重叠,即判定为相撞描述:飞机子弹和敌机子弹都消失(4)BOSS 移动属性:必选描述:能够左右上下移动。子弹属性:必选描述:BOSS能够发射子弹。完成下列情况的任一种即可:子弹威力更强;发射更多子弹;子弹路线复杂;其它更有创意的设计。血条属性:必选描述:BOSS必须有血条,每被击中即掉血。(5)界面 开始界面和结束界面属性:必选描述:必须有开始界面和结束界面(当玩家胜利或失败,要输出一个消息“Win”或“Game Over!”)。完成下列情况的任一种即可: 仅仅输出输赢信息; 显示一张或一些图片; 设计一些有创意的动画。2.4.3 界面设计游戏总共分为4个界面,分别为游戏开始界面、游戏界面、游戏失败结束界面和游戏胜利结束界面;如图3至图7所示:图3游戏开始界面图4游戏界面图5游戏boss界面图6游戏失败结束界面图7游戏胜利结束界面2.4.4游戏各功能实现代码飞机类定义自己定义的飞机类,定义了飞机的坐标px和py,以及飞机的图片Bitmap;然后通过nextInt(n)来控制飞机的数量,这里用的random.nextInt(3)表示1-3之间的随机飞机架数,子弹类定义参照飞机类。public class planes private int px;private int py;private Bitmap bitmap;public planes() super();public planes(int px, int py, Bitmap bitmap) super();this.px = px;this.py = py;this.bitmap = bitmap;public Bitmap getBitmap() return bitmap;public void setBitmap(Bitmap bitmap) this.bitmap = bitmap; public void plane(Canvas canvas) Random random = new Random(); canvas.drawBitmap(bitmap, px += random.nextInt(3), py += random.nextInt(5), null); /控制飞机出现的数量 飞机移动设计飞机的移动设计采用触屏和按键两种操作方式,运用安卓自带的封装类onTouchEvent(触屏)和onKeyDown(按键)来实现。触屏操作为手指点击屏幕,则飞机直接飞到手指触发的那一个坐标上,按键操作为点击上下左右,飞机以坐标10的间距上下左右移动,整个屏幕的坐标以像素为主,本游戏采用的是320*480./ 触屏控制Overridepublic boolean onTouchEvent(MotionEvent event) x = (int) event.getX();y = (int) event.getY();return super.onTouchEvent(event);/ 键盘的控制Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) switch (keyCode) case KeyEvent.KEYCODE_DPAD_UP:y -= 10;break;return super.onKeyDown(keyCode, event);子弹的绘制运用安卓自带的Surface view功能,使用bul.add调用子弹类,add里面的函数new bullet()定义子弹的初始位置,把子弹一个个图片画在画布上(循环滚动的背景图片),用2个自定义的时间参数firsttime、 twotime来控制子弹发射的频率,(参数pla1为敌机,参数pla2为敌方boss)。/ 我方子弹的绘制if (firsttime - twotime 800) bul.add(new bullet(x + bmp_air.getWidth() / 4, y- bmp_air.getHeight(), bmp_bullet_blue);twotime = firsttime;/ 敌机子弹的绘制if (firsttime - fivetime 5000) for (planes p : pla1) bul2.add(new bullet2(p.getPx() + bmp_plane2.getWidth()/ 2, p.getPy() + bmp_plane2.getHeight(),bmp_bullet_red);for (planes p : pla2) bul2.add(new bullet2(p.getPx() + bmp_plane2.getWidth()/ 2, p.getPy() + bmp_plane2.getHeight(),bmp_bullet_red);fivetime = firsttime;飞机碰撞设计碰撞设计运用坐标x和y来实现,当子弹的坐标x、y等于飞机的坐标x、y时触发条件:子弹碰撞敌机时,子弹消失bul.remove(n),敌机消失pla1.remove(m);子弹撞击我方飞机时,子弹消失bul2.remove(n),我方飞机血量减少。/ 子弹打BOSSfor (n = 0; n bul.size(); n+) if (Hit(bmp_boss, bul.get(n).getBx(), plane_x1, bul.get(n).getBy(), plane_y1) canvas.drawBitmap(bmp_bomb, plane_x1, plane_y1,null);number1-;/ 子弹打敌机for (n = 0; n bul.size(); n+) for (m = 0; m 0) / 我方血条int bloodair = (int) (screenWidth * (number2 / 10.0);Rect rect1 = new Rect(0, screenHeigh - 10, bloodair,screenHeigh);Rect rect3 = new Rect(0, screenHeigh - 10, screenWidth,screenHeigh);canvas.drawRect(rect3, paint4);canvas.drawRect(rect1, paint1);for (n = 0; n bul2.size(); n+) if (Hit(bmp_air, bul2.get(n).getBx2(), x, bul2.get(n).getBy2(), y) canvas.drawBitmap(bmp_bomb, x, y, null);bul2.remove(n);n-;number2-;/ info(number2 + );/ 敌方敌机1撞我for (m = 0; m pla1.size(); m+) if (Hit(bmp_air, pla1.get(m).getPx(), x, pla1.get(m).getPy(), y) canvas.drawBitmap(bmp_bomb, x, y, null);pla1.remove(m);m-;number2 -= 2;break;/ 敌方敌机2撞我for (m = 0; m pla2.size(); m+) if (Hit(bmp_air, pla2.get(m).getPx(), x, pla2.get(m).getPy(), y) canvas.drawBitmap(bmp_bomb, x, y, null);pla2.remove(m);m-;number2 -= 4;break;/ BOSS子弹打我for (m = 0; m bul3.size(); m+) if (Hit(bmp_air, bul3.get(m).getBx3(), x, bul3.get(m).getBy3(), y) canvas.drawBitmap(bmp_bomb, x, y, null);bul3.remove(m);m-;number2-;break;/ 死

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论