




已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
全套设计加扣 3012250582湖南软件职业学院 毕业设计 毕业选题: 基于安卓平台飞机大战游戏 指导教师: 学生姓名: 院系名称: 软件工程系 专业班级: Java1304 学生学号: 提交日期: 2015年12月19日 I全套设计加扣 3012250582目 录第1章 绪论- 1 -1.1 系统研究的背景及意义- 1 -1.2 国内外的发展现状- 1 -1.3 主要研究的内容- 2 -1.4 本文的组织结构- 2 -1.5 本章小结- 3 -第2章 用户需求分析- 4 -2.1系统的架构描述- 4 -2.2 友好的用户界面- 5 -2.3技术选型- 6 -2.4系统的开发环境- 7 -2.5 关键技术和工具简介- 7 -2.6 本章小节- 9 -第3章 系统概要设计- 10 -3.1 模块的划分- 10 -3.1.1 软件模块设计- 10 -3.1.2 软件功能模块- 11 -3.3 游戏界面设计- 14 -3.4 系统包及其资源规划- 14 -3.4.2 Sqlite数据库- 14 -3.4.3 Runable接口以及与Thread的区别- 16 -3.5 本章小结- 21 -第4章 系统功能的实现- 22 -4.1 主界面的功能实现- 22 -4.2 游戏界面的功能实现- 26 -4.3 敌机类的设计- 30 -4.4本章小结- 33 -第5章 系统测试- 33 -5.1 软件测试的概念- 34 -5.2 系统的功能和安全测试- 34 -5.3 测试总结- 37 -第6章 总结- 38 -参考文献- 39 -致 谢- 40 -III第一章 绪论4全套设计加扣 301225058224第1章 绪论1.1 系统研究的背景及意义在手机游戏的早期,大多数开发者都是想要玩转设备、学习技巧和快速攻关的狂热分子。但是,随着更多的开发者加入这个行业,手机游戏已经进化成涉及到专业设计师、构造师、开发者、产品经销商、律师、和艺术家在内的主导产品。这是行业走向成熟的必然趋势。尽管在某人的业余时间内要开发和推销简单的游戏更加困难,但是更多的专业商店将为许多人提供更多的就业机会。 从手机软件的平台的种类,游戏玩家的心理,未来移动通信服务终端的发展,3G手机网络对手机软件游戏的影响,还有从J2ME手机游戏开发平台介绍的手机游戏的趋势和未来这种游戏的运营模式,这几方面的内容来看,手机游戏是未来游戏发展的趋势,其移动性、互连性,必定会带来网络游戏的风暴,这就使我们对这一个新兴的领域有了一定的概念,对指导我们建立一个手机软件开发培训的知识结构有一定的帮助,也是我们的一个发展契机。本文基于Android系统设计一种轻松休闲的游戏软件,让用户可以使用手机轻松娱乐,因此项目研究和软件开发具有重要的实际应用价值。1.2 国内外的发展现状手机游戏(Mobile Game或Wireless Game),是指消费者利用随身携带并具有无线网络联机功能的智能移动终端设备,能随时随地来进行的游戏。手机游戏最大的特点是其随时随地进行游戏的便利性。这些年来,手机游戏市场有了很大的发展,手机游戏已成为使用率最高的手机娱乐应用,占到各种手机娱乐应用比例的78.4%。在日本,手机游戏市场经历多年的稳定增长,市场规模已经超过了850 亿日元1。在美国,手机游戏作为美国手机用户最喜欢的移动应用之一,在iPhone和Android等智能终端推出后发展迅速。而在中国,根据易观智库产业数据库最新发布的2010 年第4 季度中国手机游戏市场季度监测数据显示,我国2010 年手机游戏市场规模已达到32.9 亿元,继续保持了较快的发展。2011年以来Android实现了计算机诞生以来最快速度的增长,目前Android以每天85万新增激活数的速度快速征服世界,成为世界范围内占有率最高的智能手机操作系统。根据comScore的统计,2012年第一季度Android在北美的市场占有率又增长了3.7%达到51%;而根据赛诺的调研报告,Android系统在中国- 3 -湖南软件职业学院毕业设计(作业)的市场份额高达74.7%,而Android游戏在诞生之处就被很多人看好,便宜的价格,小巧的外观,游戏资源丰富,相对于传统主机来说,这些都是Android游戏机的优点,于是一批Android游戏陆续出现了,但事实证明Android游戏并非当初描绘的那样美好,开放的Android开发平台,导致了游戏质量和数量不那么尽如人意,所以在游戏的设计与研发过程中游戏的质量关一定要把好。1.3 主要研究的内容本设计项目主要完成一种基于Android开发的一款游戏软件。项目研究和软件设计遵循软件工程的方法,从需求分析,系统分析,概要设计,详细设计,软件编码调试,到验证测试,完成本软件整个过程的设计开发。项目研究和软件设计的具体任务包括:(1)加深面向对象编程思想,巩固Java语言的设计模式,掌握Android开发的环境搭建。(2)学习和研究Android平台环境和软件接口的设计。(3)学习和研究Android平台多线程。(4)学习和研究Android系统中用户界面的动态显示。(5)学习并掌握Sqlite数据库。(6)学习并掌握Android平台下动态游戏开发的重要知识点:SurfaceView。1.4 本文的组织结构第1章 绪论 本章主要介绍了课题的研究背景,课题研究的目的与意义,以及该项目所在领域国内外发展状况等,最后指出了本文工作内容及论文的组织结构。第2章 软件需求分析和技术介绍 本章主要介绍了本系统的技术构架及课题的需求分析与说明,简单的介绍了项目应用的平台和开发环境,并解析了关键技术的含义。第3章 系统概要设计 本章是本文比较重要的章节,详细的划分了整个项目的开发模块,及各个模块的功能设计,最后对整个项目的包结构和项目资源路径做了简单的剖析和介绍。第4章 系统功能的实现 详细介绍开发流程,从建一个Android项目开始到最终完成软件开发的详细过程,介绍怎样检测飞机碰撞事件,怎样动态管理界面,怎样实现飞机飞行的效果。第5章 系统测试 详细介绍了测试的概念、目的和方法,并介绍如何利用Android自带的测试工具了系统测试。第6章 总结。1.5 本章小结详细介绍了Android游戏开发的国内外现状,以及本论文主要研究的方向和论文的整体结构,从本章中能够清楚的了解本论文的整体架构,对以后的各细节描述都有清晰的认识。 第2章 用户需求分析2.1系统的架构描述本项目主要面向游戏爱好者,要求项目不会占用太大的资源,并能够尽量沿用原有的相对成熟的java技术,与Android系统进行良好的整合。本设计主要讲述了飞机大战游戏的基本功能和基于Android平台的软件开发、接口的设计方法。设计最终达成了开始游戏、关闭音效、查看得分、退出游戏等Android游戏的基本功能。并且系统能够正常运行,各个页面交互性较好。在整个设计中基本运用基础的Android进行功能编程,其中主要利用了SurfaceView实现了动态界面显示,实现了飞机飞行和发射子弹等效果。在系统规划中先后系统功能结构图分析了系统所需的各种数据,详细的展现了系统的各个功能模块并给出了主要功能运行界面图。该游戏软件目前已有比较完善的管理与使用功能。对学习和工作中的学生和工作人员在闲暇时间放松的好软件。本系统主要采用模型-视图-控制器MVC架构的设计模式。MVC架构是Model-View-Controller的缩写,中文翻译为模型-视图-控制器。MVC应用程序总是由这三个部分组成。Event(事件)导致Controller改变Model或View,或者同时改变两者。只要Controller改变了Models的数据或者属性,所有依赖的View都会自动更新。类似的,只要Controller改变了View,View会从潜在的Model中获取数据来刷新自己。整个系统的物理架构如下:界面SurfaceVIe,模型为常用的子弹飞机类,Controller为SurfaceHolder.callback结构中的回调函数。本系统是应用Android平台,Android是一个移动设备的软件平台,由Linux+Java构成的开源软件,提供包括SDK、Key Apps、Middleware、Linux Kernel四个部分在内的全套手机软件方案。开放了基于Linux内核以上的开发工具,从而保证了内容的可移植性和多样性。Android平台为我们开发应用程序提供了一套很好的框架,我们可以在这个平台的基础上开发不同的应用程序,也可以开发新的组件供应用程序调用。Android会同一系列核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA语言编写的,本项目也是由java语言编写。开发人员也可以完全访问核心应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用。任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。Android系统架构图如2-1图所示。- 40 -湖南软件职业学院毕业设计(作业)图2-1 android系统架构图2.2 友好的用户界面本游戏是直接面对用户的,要求游戏能够提供良好的用户接口,易用的人机交互界面。要实现这一点,就要求软件应该尽量使用用户熟悉的术语和提示消息;针对用户可能出现的使用问题,要提供足够的提醒帮助功能,缩短用户对软件熟悉的过程。本项目采用Android平台,从Android的角度分析,Android的开发概括为两类:一是系统开发,包括底层Linux内核的裁剪和扩展、硬件驱动的开发和系统移植等,从业人员主要在工作在硬件厂商的公司里。二是应用开发,主要包括游戏开发、Android互联网客户端开发和工具软件开发。业内人士预言Android系统将成为手机操作系统领域的“windows”。一个好的功能强大系统,必须要进行完善而且全面的系统分析和友好设计。本项目中,之所以能够有计划地进行下去,的确也是缘于良好的系统分析,如若省略这一步直接编程,那难度必然加大,以至于在编程过程中又不得不回过头来进行系统分析,此时必然拖慢进度,打乱整个系统逻辑,其最终的成品也充满变数。本系统在性能功能上应达到如下需求:(1) 操作简单、界面友好: 完全控件式的页面布局。(2) 游戏的安全性,正在游戏中对可能发生的突发事件做出处理,例如,电话来了,或者有信息等。(3) 软件的响应速度要快,保证用户不会应为等待反馈时间过长而放弃本软件。(4) 软件的可靠性,能够真正的带给游戏者乐趣。(5) 在结构上应具有很好的可扩展性,便于将来的功能扩展和维护。根据以上功能,该系统主要以Android为操作平台,它提供了很大的自由空间,采用Java为开发语言,使系统开发更加方便快捷,本软件的目标即为成功、完整的体现该系统,让客户满意。2.3技术选型项目整体技术选型是这样的,飞机大战游戏开发过程中应用了java技术和Android SDK提供的类库,动态界面采用SurfaceView和一些XML文件-,后台控制使用了SurfaceHolder.callback接口的回调方法。常用的资源文件如子弹,和敌机,战机,背景图都通过ps自己处理,系统开始时就启动新线程,一直运行游戏,知道用户关闭为止。如下为整体流程图如下图2-2所示。2.4系统的开发环境2.4.1开发硬件要求硬件平台:PIV CPU,主频2.8G,内存2G,的PC机或PC服务器。操作系统:Microsoft Windows72.4.2系统的软件开发环境集成开发环境:Eclipse3.6+JDK6.0+SDK2.1数据库:MySQL5.0编程语言:java 开发模式:MVC模式 2.5 关键技术和工具简介(1)Intent Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。(2)ADT与SDKADT为Android开发工具(Android Development Tools)简称,是在强大的、集成的环境Eclipse IDE中构建Android应用程序插件。ADT扩展了Eclipse的功能,让您快速建立新的Android项目,创建一个应用程序的用户界面,加上Android框架的API组件、调试应用程序使用Android SDK工具,以便APK分发给应用程序。SDK即Software Development Kit 的缩写,中文即“软件开发工具包”。广义上指辅助开发某一类软件的相关文档、范例和工具的集合。它可以简单的为某个程序设计语言提供应用程序接口 API的一些文件,但也可能包括能与某种嵌入式系统通讯的复杂的硬件。 (3)SQLite数据库 SQLite是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至今已经有14个年头,SQLite也迎来了一个版本 SQLite 3已经发布。(4)Activity Activity是Android开发中非常重要的一个基础类。Activity提供了和用户交互的可视化界面,创建一个Activity一般是继承Activity类,并覆盖Activity的onCreate()方法。(5)Eclipse与JDK Eclipse是一个集成开发环境简称“IDE”,在Eclipse环境下开发JAVA程序可以大大提高效率,它提供的核心框架和可扩展的插件机制给广大的程序员提供了无限的便捷。JDK(Java Development Kit)是Sun Microsystems针对Java开发人员的产品,JDK 是整个Java的核心,包括了Java运行环境,Java工具和Java基础的类库。JDK是学好Java的第一步。(6)SurfaceView SurfaceView由于可以直接从内存或者DMA等硬件接口取得图像数据,因此是个非常重要的绘图容器,这次我就用两篇文章来介绍SurfaceView的用法。网上介绍SurfaceView的用法有很多,写法也层出不同,例如继承SurfaceView类,或者继承SurfaceHolder.Callback类等,这个可以根据功能实际需要自己选择,我这里就直接在普通的用户界面调用SurfaceHolder的lockCanvas和unlockCanvasAndPost。2.6 本章小节本章主要介绍了本系统的技术构架及在实际开发中的用户需求分析,简单的介绍了项目应用的平台和开发环境,并介绍了关键技术的含义。第3章 系统概要设计系统的概要设计主要是针对系统的总体功能如何设计,如何划分模块,系统的数据库如何设计进行研究。它为系统的详细设计做铺垫。在系统的设计过程中起着非常重要的作用。系统设计是信息开发过程中的另一个重要阶段,在这一阶段中将根据前一阶段逻辑分析的结果,在系统分析报告的基础上,按照逻辑模型的要求,科学合理地进行新系统的设计。系统设计包含两个方面:首先是总体结构设计,其次是具体物理模型的设计。这个阶段的主要目标是将反映用户信息需求的系统逻辑方案转换成可以实施的基于计算机的物理方案,并为下一阶段的系统实施提供必要的技术资料。本系统采用结构化设计的方法来实现系统总体功能,提高系统的各项指标,即将整个系统合理的划分成各个功能模块,正确地处理模块之间和模块内部的联系以及它们之间的调用关系和数据联系,定义各模块的内部结构,通过对模块的设计和模块之间关系的系统来实现整个系统的功能。3.1 模块的划分本系统整体划分为三个模块,分别为主界面,即Android游戏软件登录界面,游戏模块,游戏运行中的界面模块,用来处理用户触摸响应,还有得分统计模块,用来存储获的分数。3.1.1 软件模块设计用户界面是使用者最直接接触的东西,包括是否能够让客户很轻松、方便的使用,操作响应时间、主机连接时间、图片综合质量、首页布局质量、首页信息类型等。一般来说,一个界面主要由下面几个因素构成:(1)文字:文字元素是信息传达的主体部分。界面中的文字主要包括标题、信息、文字链接几种主要形式。标题和传统媒体中信息传达的基本作用相同,是内容的简概说明,一般比较醒目、优先编排。文字作为占据页面重要比率的元素,同时又是信息重要载体,它的字体、大小、颜色和排布对页面整体设计影响极大。(2)图形:图形在界面中具有重要作用。合理的运用图形,可以生动直观、形象地表现设计主题。网页中常用的图形格式包括jpg和png,这两种格式压缩比高,得到了Android平台的支持,图形元素包括标题、背景、主图、链接图标全套设计加扣 3012250582四种。(3)界面版式:版式是界面设计的重要组成部分,它将文字、图形等视觉元素进行组合配置,使页面整体视觉效果美观和谐,便于阅读,操作,实现信息传达的最佳效果。 Android游戏系统的界面设计也是综合了文字,图形等元素。使每一个功能有文字与图片的共同描述,达到看图就大概知道此键是什么功能的目的,最终的目的还是为了使用者能够快速上手,不至于因为操作的不得当而放弃此系统。3.1.2 软件功能模块 图3-1 整体结构图A) 游戏模块:负责游戏运行的主线程,在一个Android 程序开始运行的时候,会单独启动一个Process。默认的情况下,所有这个程序中的Activity或者Service(Service和 Activity只是Android提供的Components中的两种,除此之外还有Content Provider和Broadcast Receiver)都会跑在这个Process。 一个Android 程序默认情况下也只有一个Process,但一个Process下却可以有许多个Thread。在这么多Thread当中,有一个Thread,我们称之为UI Thread。UI Thread在Android程序运行的时候就被创建,是一个Process当中的主线程Main Thread,主要是负责控制UI界面的显示、更新和控件交互。在Android程序创建之初,一个Process呈现的是单线程模型,所有的任务都在一 个线程中运行。因此,我们认为,UI Thread所执行的每一个函数,所花费的时间都应该是越短越好。而其他比较费时的工作(访问网络,下载数据,查询数据库等),都应该交由子线程去执行, 以免阻塞主线程。那么,UI Thread如何和其他Thread一起工作呢?常用方法是:诞生一个主线程的Handler物件,当做Listener去让子线程能将讯息Push到主线程的Message Quene里,以便触发主线程的handlerMessage()函数,让主线程知道子线程的状态,并在主线程更新UI。B)页面布局模块(图形模块):虽然有的游戏不需要不断的重新绘制屏幕,但是假设你想要的游戏需要不间断的绘制屏幕,这是个简单的概念并且你不需要去关注任何脏标记或者去关注在某些游戏状态改变的情况下重新绘制屏幕。我们已经知道UI线程不是一直不间断的运行的,而是在事件的驱动下有操作系统调度运行的。这就是我们为什么实例化第二个线程,也就是我们通常说的渲染线程,这个线程是由Graphics模块所创建,Graphics模块本身由应用模块在程序启动的时候实例化。渲染线程执行一个无限循环,由于应用程序的生命周期事件,它可能会被暂停或者恢复。作为开发者,你可以通过注册一个RenderListerner将这个线程与图形模块连接起来.在我们进入这些方法的详解之前,我先给你介绍一些细节:libgdx使用OpenGl ES,这个是移动设备上硬件加速图像渲染的工业标准。OpenGL ES同一个叫做EGL的东西一起使用,EGL负责设立一个窗口系统和图像硬件的链接,它创建一个渲染表面,用户可以添加一个用户界面组件到上面,图形硬件可以不通过使用UI工具包直接渲染。OpenGL ES自身额外的添加了一个叫做图形上下文的东西,他用于管理驻留在显存中的图形资源,举个例子:这些资源可以是一个纹理,它从本质上来说就是一张位图,OpenGLES将其建立在EGL的表面和背景,通过图形处理处理器获得高质量的图片。C)游戏配置模块:对于音效的管理。D)游戏介绍模块:游戏有智力游戏和活动性游戏之分,前者如下棋、积木、打牌等,后者如追逐、接力及利用球、棒、绳等器材进行的活动,多为集体活动,并有情节和规则,具有竞赛性。当前日常用语中的“游戏”多指各种平台上的电子游戏。电子游戏有单机版和网络游戏。3.3 游戏界面设计采用分层管理,具体效果如3-3图所示:图3-2 游戏界面图3.4 系统包及其资源规划在软件项目管理过程中一个关键的活动是制定项目计划,它是软件开发工作的第一步。 项目计划的目标是为项目负责人提供一个框架,使之能合理地估算软件项目开发所需的资源 、经费和开发进度,并控制软件项目开发过程按此计划进行。 在做计划时,必须就需要的人力、项目持续时间及成本作出估算。这种估算大多是参考 以前的花费作出的。软件项目计划包括二个任务:研究和估算。即通过研究确定该软件 项目的主要功能、性能和系统界面。3.4.2 Sqlite数据库SQLite数据库是一款轻型的数据库,它嵌入在Android系统中,由于没有数据库操作的图形界面和客户端,所以我们只能通过命令进入Android系统中,进行数据库的操作。Android给我们提供了一系列系统工具可以访问SQLite数据库。Android Debug Bridge(ADB)是Android的一个通用调试工具,它可以更新设备或模拟器中的代码,可以管理预定端口,可以在设备上运行shell命令,我们知道android是基于Linux内核,它的内部文件结构也是采用Linux文件组织方式,因此访问它的文件结构需要使用shell。这次我们就会用shell来访问android应用中的SQLite数据库文件。1、运行cmd,切换到android-sdk目录,运行adb.exe,加上参数shell,出现#号就代表进入了shell命令模式,注意adb要在Android模拟器运行时才能进入shell。执行如下图3-3所示。图3-3 进入shell命令模式2、shell命令记住两个基本命令ls和cd,类似windows命令提示行中的dir和cd,代表列出当前目录下文件列表和进入到指定目录。了解这两个命令之后,就可以找到data/data/项目包名/databases。找到数据库文件,接下来就是使用sqlite管理工具来进行操作了。键入sqlite3+数据库名就进入了sqlite管理模式了。执行过程如下图3-4所示。图3-4 进入sqlite管理模式3.4.3 Runable接口以及与Thread的区别在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限。下面看例子:package org.thread.demo; class MyThread extends Thread private String name; public MyThread(String name) super(); = name; public void run() for(int i=0;i10;i+) System.out.println(线程开始:++,i=+i); package org.thread.demo; public class ThreadDemo01 public static void main(String args) MyThread mt1=new MyThread(线程a); MyThread mt2=new MyThread(线程b); mt1.run(); mt2.run(); 但是,此时结果很有规律,先第一个对象执行,然后第二个对象执行,并没有相互运行。在JDK的文档中可以发现,一旦调用start()方法,则会通过JVM找到run()方法。下面启动start()方法启动线程:package org.thread.demo; public class ThreadDemo01 public static void main(String args) MyThread mt1=new MyThread(线程a); MyThread mt2=new MyThread(线程b); mt1.start(); mt2.start(); ; 这样程序可以正常完成交互式运行。那么为啥非要使用start();方法启动多线程呢?在JDK的安装路径下,src.zip是全部的java源程序,通过此代码找到Thread中的start()方法的定义,可以发现此方法中使用了private native void start0();其中native关键字表示可以调用操作系统的底层函数,那么这样的技术成为JNI技术(java Native Interface)Runnable接口在实际开发中一个多线程的操作很少使用Thread类,而是通过Runnable接口完成。public interface Runnable public void run(); 例子:package org.runnable.demo; class MyThread implements Runnable private String name; public MyThread(String name) = name; public void run() for(int i=0;i100;i+) System.out.println(线程开始:++,i=+i); ; 但是在使用Runnable定义的子类中没有start()方法,只有Thread类中才有。此时观察Thread类,有一个构造方法:public Thread(Runnable targer)此构造方法接受Runnable的子类实例,也就是说可以通过Thread类来启动Runnable实现的多线程。(start()可以协调系统的资源):package org.runnable.demo; import org.runnable.demo.MyThread; public class ThreadDemo01 public static void main(String args) MyThread mt1=new MyThread(线程a); MyThread mt2=new MyThread(线程b); new Thread(mt1).start(); new Thread(mt2).start(); 两种实现方式的区别和联系:在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下好处:避免点继承的局限,一个类可以继承多个接口。适合于资源的共享以卖票程序为例,通过Thread类完成:package org.demo.dff; class MyThread extends Thread private int ticket=10; public void run() for(int i=0;i0) System.out.println(卖票:ticket+this.ticket-); ; 下面通过三个线程对象,同时卖票:package org.demo.dff; public class ThreadTicket public static void main(String args) MyThread mt1=new MyThread(); MyThread mt2=new MyThread(); MyThread mt3=new MyThread(); mt1.start();/每个线程都各卖了10张,共卖了30张票 mt2.start();/但实际只有10张票,每个线程都卖自己的票 mt3.start();/没有达到资源共享 如果用Runnable就可以实现资源共享,下面看例子:package org.demo.runnable; class MyThread implements Runnable private int ticket=10; public void run() for(int i=0;i0) System.out.println(卖票:ticket+this.ticket-); package org.demo.runnable; public class RunnableTicket public static void main(String args) MyThread mt=new MyThread(); new Thread(mt).start();/同一个mt,但是在Thread中就不可以,如果用同一 new Thread(mt).start();/个实例化对象mt,就会出现异常 new Thread(mt).start(); ; 虽然现在程序中有三个线程,但是一共卖了10张票,也就是说使用Runnable实现多线程可以达到资源共享目的。Runnable接口和Thread之间的联系:public class Thread extends Object implements Runnable发现Thread类也是Runnable接口的子类。3.5 本章小结本章详细的划分了整个项目的开发模块,及各个模块的详细设计,最后对整个项目的包结构和项目资源路径做了简单的剖析和介绍。第4章 系统功能的实现界面是呈现给用户的,一个界面呈现的友好性会决定用户是否会接受该系统,对于Android系统而言,界面的友好布局,信息的简单明了都至关重要。4.1 主界面的功能实现主界面的设计如下图4-1所示:图4-1 系统主界面在工程的reslayout目录下,创建了一个名称为”activity_main.xml”的布局文件,该文件主要为生成主界面做配置,其布局文件代码如下:1. 13. 20. 27. 34. 41. 主界面中有四个按钮分别为开始游戏,退出游戏,关闭音效,关于我们,其中每个按钮都绑定了一个监视器,当按下该按钮时,该监视器将触发点击事件,其中为开始按钮绑定的监视器如下:1 public class listener implements View.OnClickListener2 Override3 public void onClick(View v) 4 intent=new Intent(this,viewActivity.class);5 startActivity(intent);6 7 Intent对象介绍:Intent(意图)主要是解决Android应用的各项组件之间的通讯。Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。例如,在一个联系人维护的应用中,当我们在一个联系人列表屏幕(假设对应的Activity为listActivity)上,点击某个联系人后,希望能够跳出此联系人的详细信息屏幕(假设对应的Activity为detailActivity)为了实现这个目的,listActivity需要构造一个 Intent,这个Intent用于告诉系统,我们要做“查看”动作,此动作对应的查看对象是“某联系人”,然后调用startActivity (Intent intent),将构造的Intent传入,系统会根据此Intent中的描述,到ManiFest中找到满足此Intent要求的Activity,系统会调用找到的 Activity,即为detailActivity,最终传入Intent,detailActivity则会根据此Intent中的描述,执行相应的操作。其中startActivity(intent)将启动一个新的意图对象,代表一个新的Activity;在这里将启动游戏主Activity。Toast 是一个 View 视图,快速的为用户显示少量的信息。 Toast 在应用程序上浮动显示信息给用户,它永远不会获得焦点,不影响用户的输入等操作,主要用于 一些帮助 / 提示。Toast是Android中用来显示显示信息的一种机制,和Dialog不一样的是,Toast是没有焦点的,而且Toast显示的时间有限,过一定的时间就会自动消失。退出游戏按钮的监视器:1 public class listener1 implements View.OnClickListener2 Override3 public void onClick(View v) 4 try5 MainActivity.this.finish();6 catch (Throwable e) 7 / TODO 自动生成的 catch 块8 e.printStackTrace();9 10 11 其中finish()方法将关闭当前正在运行的Activity。关于我们按钮主要介绍了本软件的性质和软件编码者和其指导老师的简介,并标明了软件的版本号和开发的时间信息如图4-4所示,浏览全部的信息之后,用户可以点击返回主界面返回,或者使用手机自带的返回键返回到主界面。关于我们按钮的监视器:1. public class about implements View.OnClickListener2. Override3. public void onClick(View v) 4. startActivity(aboutIntent);5. 6. 在该点击事件里将启动管我们介绍的activity。4.2 游戏界面的功能实现图4-1 游戏积分界面主界面的实现是通过SurfaceView实现的,SurfaceView继承自View,但它与View不同?View是在UI的主线程中更新画面,而SurfaceView是在一个新线程中更新画面。我们不可能写一个方法让主线程自己运动。View的特性决定了其不适合做动画,因为如果更新画面时间过长,那么主UI线程就会被正在画的函数阻塞。所以Android中通常用SurfaceView显示动画效果。在对SurfaceView进行操作前Android为我们提供了一个十分好用的接口:SurfaceHolder.Callback接口。该接口中有三个抽象方法,这三个抽象方法是SurfaceView的三个生命周期: abstract void surfaceChanged(SurfaceHolder holder, int format, int w, int h) 这个方法被回调,当SurfaceView界面发生改变时。abstract
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 登报遗失租赁合同范本
- 过期妊娠催产素引产护理查房
- 医疗保障贷款合同
- 服务保理合同范本
- 美团电车合同范本
- 兼职配音协议合同范本
- 公务员合同范本
- 光伏售后合同范本
- 地皮转让流转合同范本
- 养鸡棚租赁合同范本
- 风光储储能项目PCS舱、电池舱吊装方案
- 原发性骨质疏松症诊疗指南(2022版)第一部分
- 重庆医科大学附属第一医院改建PET-CT、PET-MR项目环评报告
- 2022水电站计算机监控系统上位机现场验收标准手册
- 政务服务大厅管理规范:安全与应急处置
- 食管癌病人护理查房
- 双重预防机制构建-隐患排查治理(中石化中原油田天然气厂)
- 五牌一图(完整版)
- 二年级下册音乐《每天》教案
- 音乐美学.课件
- 心肺复苏说课比赛课件模板(一等奖)
评论
0/150
提交评论