《2022年2022年基于android贪吃蛇游戏本科毕业设计》由会员分享,可在线阅读,更多相关《2022年2022年基于android贪吃蛇游戏本科毕业设计(42页珍藏版)》请在金锄头文库上搜索。
1、本科毕业设计(论文)题目名称:基于 Android 贪吃蛇游戏学院:计算机科学技术专业年级:计算机科学与技术08(师)级学生姓名:班级学号:2 班 28 号指导教师:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 42 页 - - - - - - - - - I 摘要本课题是利用 java语言在 Android 平台上进行手机游戏的开发,由于本人知识的有限,以及客观条件的限制,本人打算开发一个单机版的游戏。本人在手机上玩过贪吃蛇的游戏,曾经为了和别人比赛,苦苦的玩了好多次
2、,追求高分!后来得知这个小小的游戏是nokia 当年很成功的一款手机游戏,许多人都玩过,也很喜欢。现在这款游戏的版本已经发展到第三版了,手机生产厂商继续开发这个游戏,看来这个游戏还是有很大的市场的。Google公司 2007年 11月 5日发布的开源的 Android平台 一款包括操作系统(基于 Linux 内核) 、中间件和关键应用的手机平台,并组建了开放手机联盟 (Open Handset Alliance), 包括 Google、中国移动、 T-Mobile、宏达电、高通、摩托罗拉等领军企业。于是,我决定利用自己大学所学的知识,自己在指导老师的帮助下,独立开发这个小游戏。本文首先详细介绍
3、了java的一些基本的知识点,在此基础上引出了Android,介绍了 Android 的基础以及其特点,然后介绍了一下 Android 将来的一些前景和发展。重点说明了这个贪吃蛇程序所用到的一些类和控件,包括Drawable,Canvas, Thread, 等等。介绍了这些类的一般的使用方法,以及本程序是如何使用这些类来进行游戏的开发的。本程序将老少皆宜的经典作品移植到手机上来,为更流行的硬件平台提供应用软件。这些都将能很好的满足未来人们对手机游戏的需求。吞吃蛇游戏基于Android 平台编写,满足一般手机用户的娱乐需求。关键词 :Android 系统; 贪食蛇游戏 ; 手机游戏名师资料总结
4、- - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 42 页 - - - - - - - - - II Abstract.This topic is using java language on the Android platform mobile phone game development, I limited knowledge, and objective constraints, I intend to develop a stand-alone game. I played
5、the game of Snake, on the phone once in order to match with others, struggling to play many times, the pursuit of high scores! Later learned that this little game nokia was very successful mobile phone games, many people have played, and also enjoyed. Version of the game has been developed to the th
6、ird edition, mobile phone manufacturers continue to develop this game, it seems that this game is a great market. Open-source Android platform, Googles released on November 5, 2007 - an operating system (Linux kernel), middleware and key applications-based mobile phone platform, and the formation of
7、 the Open Handset Alliance (Open Handset Alliance), includingGoogle, China Mobile, T-Mobile, HTC, Qualcomm, Motorola and other leading enterprisesSo, I decided to use the knowledge learned in his college, in the instructors help, the independent development of this game.This article first details so
8、me of the basic java knowledge, on this basis leads to Android, the basis of the Android and its characteristics, and then introduces the Android future prospects and development. Highlights this Snake procedures used and controls, including the Drawable Canvas, Thread, and so on. Describes the gene
9、ral use, as well as the program is how to use these classes to the development of the game. The ages of the classic works transplantation in this program to the phone up, to provide application software for the more popular hardware platforms. These will be well positioned to meet future demand for
10、mobile games. Devour the snake game based on the Android platform, prepared to meet the entertainment needs of the general mobile phone users. Key words: Android system; Gluttony snake game; Mobile game名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 42 页 - - - -
11、 - - - - - 目录摘要 . IAbstract . II第 1 章绪论 . 11.1 Android 简介 . 11.1.1 Android 的来源及发展 . 11.1.2 Android 系统的特点 . 21.2 项目目的与意义 . 21.2.1 开发目的 . 21.2.2 开发意义 . 31.3 国内外现状分析 . 3 1.3.1 国内外手机系统现状 . 31.3.2 国内外手机应用现状 . 41.3.3 发展趋势 . 5第 2 章方案论证 . 62.1 经济可行性分析 . 6 2.2 技术可行性分析 . 6 2.2.1 Android 平台特性 . 62.2.2 Android
12、平台架构 . 62.2.3 Android 应用程序组件 . 72.3 本项目的开发方法 . 92.4 开发工具及环境简介 . 102.4.1 开发工具 Eclipse简介 . 102.4.2 开发环境简介 . 10第 3 章需求分析 . 113.1 系统开发目标 . 113.2 系统需求分析 . 11 3.2.1 业务需求分析 . 113.2.2 用户需求分析 . 123.2.3 功能需求分析 . 12第 4 章过程论述 . 错误!未定义书签。4.1 程序流程设计 . 13 4.2 概要设计 . 14 4.2.1 模块划分 . 144.2.2 游戏主界面模块 . 144.2.3 游戏控制模块
13、 . 154.3 模块实现原理 . 15 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 42 页 - - - - - - - - - 4.3.1 游戏界面模块实现 . 154.3.2 游戏控制模块实现 . 164.3.3 TileView 类的设计 . 174.3.4 SnakeView类的设计 . 174.4 程序主结构 . 17 4.5 程序类图 . 184.6 类的详细设计 . 194.6.1 Snake类的详细设计 . 194.6.2 TileView 类的详细
14、设计 . 214.6.3 SnakeView类的详细设计 . 22第 5 章系统测试与结果分析 . 255.1 软件测试 . 255.1.1测试的基本概念 . 255.1.2测试的步骤 . 255.2 系统测试 . 265.3 测试结论 . 错误!未定义书签。结论 . 13致谢 . 29参考文献 . 30附录 . 31名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 42 页 - - - - - - - - - 1 第 1 章绪论随着移动通信的发展以及互联网向移动终端的普及
15、,网络和用户对移动终端的要求越来越高,而 Symbian,Windows Mobile,PalmOS等手机平台过于封闭,不能很好的满足用户的需求,因此市场迫切需要一个开放性很强的平台。经过多年的发展,第三代数字通信 (3G)技术获得了广泛的接受,它为移动终端用户带来了更快的数据传输速率。随着3G 网络的使用,移动终端不再仅是通讯网络的终端,还将成为互联网的终端。 因此,移动终端的应用软件和需要的服务将会有很大的发展空间。Google为此于 2007年 11月推出了一个专为移动设备设计的软件平台Android。Android 是一套真正意义上的开放性的移动设备综合平台,它包括操作系统、中间件和一
16、些关键的平台应用。Android 是由 Linux+Java 构成的开源软件,允许所有厂商和个人在其基础上进行开发。Android 平台的开放性等特点既能促进技术(包括平台自身 )的创新,又有助于降低开发成本, 还可以使运营商能非常方便地制定自己的特色化的产品。因此,它具有很大的市场发展潜力。1.1 Android 简介1.1.1 Android 的来源及发展本项目在 Android 平台下,使用 java 语言、 Android 开发技术开发一款界面友好,功能齐全的贪食蛇游戏。贪食蛇是一款老牌的手机游戏,同时也是一款比较需要耐心的游戏,用游戏控制方向键上下左右控制蛇的方向,寻找吃的东西,每吃
17、一口就能得到一定的积分,而且蛇的身子会越吃越长,身子越长玩的难度就越大,不能碰墙,更不能咬自己的尾巴,当蛇头碰到墙或者自己的身体则游戏结束。Android 一词本意是指 机器人 ,同时也指 Google 于 2007 年 11 月 5 日推出的开源手机操作系统。 Android 基于 Linux 平台,由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。它是由一个由 30 多家科技公司和手机公司组成的开放手机联盟共同研发,将大大降低新型手机设备的研发成本,完全整合的全移动功能性产品成为开放手机联盟 的最终目标。Android 作为谷歌移动互联网战略的
18、重要组成部分,将进一步推进 随时随地为每个人提供信息 这一企业目标的实现。 全球为数众多的移动电话用户从未使用过任何基 Android 的电话。谷歌的目标是让移动通讯不依赖于设备,甚至是平台。出于这个目的, Android 将完善,而不是会替代谷歌长期以来推行的移动发展战略:通过与全球各地的手机制造商和移动运营商成为合作伙伴,开发既实用又有吸引力的移动服务,并推广这些产品。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 42 页 - - - - - - - - - 2 A
19、ndroid 平台的研发队伍阵容强大,包括Google、HTC(宏达电) 、T-Mobile、高通、摩托罗拉、三星、 LG 以及中国移动在内的30 多家企业都将基于该平台开发手机的新型业务, 应用之间的通用性和互联性将在最大程度上得到保持。开放手机联盟表示, Android 平台可以促使移动设备的创新,让用户体验到最优越的移动服务。同时,开发商也将得到一个新的开放级别,更方便地进行协同合作,从而保障新型移动设备的研发速度。因此Android 是第一个完整、开放、免费的手机平台。1.1.2 Android 系统的特点Android 系统具有如下 4 个特点。1. 开放性Google 与开放手机联
20、盟合作开发了Android,这个联盟由包括中国移动、摩托罗拉、高通、宏达电和T-Mobile 在内的 30 多家技术和无线应用的领军企业组成。Google通过与运营商、设备制造商、开发商和其他有关各方结成深层次的合作伙伴关系,希望借助建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统。2. 应用程序无界限Android 上的应用程序可以通过标准API 访问核心移动设备功能。通过互联网,应用程序可以声明它们的功能可供其他应用程序使用。应用程序是在平等的条件下创建的,所以移动设备上的应用程序可以被替换或扩展,即使是拨号程序或主屏幕这样的核心组件;应用程序可以轻松地嵌入HTM
21、L 、Javascript 和样式表。应用程序可以通过WebView 显示网络内容。3. 应用程序可以并行运行Android 是一种完整的多任务环境,其中应用程序可以并行运行。在后台运行时,应用程序可以生成通知以引起注意。4. 智能虚拟键盘虚拟键盘的出现意味着基于Android 1.5的移动设备可以同时支持物理键盘和虚拟键盘。不同的输入方式可满足用户在特定场景的需求。Android虚拟键盘可以在任何的应用中提供,包括Gmail、浏览器、 SMS ,当然也包括大量的第三方应用。它包括自动校正、推荐、习惯文字的用户词典。你可以通过振动屏幕来进行触觉反馈。不同于竞争对手的手机平台,Android 1
22、.5 还支持第三方虚拟键盘应用的安装。1.2 项目目的与意义1.2.1 开发目的自 2007年 Google 发布 Android 系统 1.0 之后,各大手机生产厂商纷纷将目光投向了最具发展潜力的Android 系统,并陆续推出了各种品牌的搭载Android 系统名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 42 页 - - - - - - - - - 3 的智能手机。时隔四年,Android 手机在手机市场中占的市场份额正以非常迅猛的速度上升:2010 年市场份额
23、:Symbian 36.6%、Android 25.5% 、iPhone 16.7 、windows Mobile 2.8%、linux 2.1% 。Nokia 的 Symbian系统在 Android 系统的冲击下,正在从手机市场中的王者慢慢被挤下来。在未来的几年内,Android手机必定会占据手机市场的主要份额,所以在这种形式下,Android 应用的前景也必定是前景一片大好。1.2.2 开发意义现如今,电子商品的硬件支持越来越高端。人们对手机的功能要求不再仅仅局限于接电话和打电话了,在这些基本功能的基础上,手机更成了人们日常生活中非常重要的娱乐和休闲工具。许多时候人们都会处于无聊的状态,
24、比如等车的时候、坐长途车的时候.这时若有一款有意思的游戏来打发时间是再好不过了。由于Android 手机具有多任务功能,可以一边听音乐一边玩游戏,是让人们在等车的时候玩上一玩消磨时间的好东东。1.3 国内外现状分析1.3.1 国内外手机系统现状目前国外各软硬件厂商已经推出过多款手机操作系统。下面简单介绍一下现主流手机操作系统。现阶段使用较广泛大家也相对熟悉的手机操作系统是由诺基亚公司主导推出的Symbian 操作系统。 Symbian 是为手机而设计的操作系统,它是一个实时性,多任务的纯 32 位嵌入式的操作系统,具有低能耗,内存占用较少等特点。现在流行的Symbian系统有以下四个版本,分别
25、为S40、S60(第二版) 、S60 (第三版)、S60 (第五版) 。S60(第五版)为触摸屏手机版本。IOS 是由苹果公司为 iPhone 开发的操作系统。它主要是给iPhone、iPod touch以及 iPad 使用。就像其基于的 Mac OS X操作系统一样, 它也是以 Darwin 为基础的。IOS 的系统架构分为四个层次:核心操作系统层(the Core OS layer) ,核心服务层(the Core Services layer ) ,媒体层( the Media layer ) ,可轻触层( the Cocoa Touch layer ) 。系统操作占用大概240MB 的
26、存储器空间。Windows Mobile 系列操作系统是从微软计算机的Windows 操作系统演化而来的。Windows Mobile 系列操作系统功能强大,而且支持该操作系统的智能手机大多数都采用了英特尔嵌入式处理器,主频比较高, 在其它硬件配置 ( 如内存、储存卡容量等) 上也比采用其它操作系统的智能手机要高出许多,因此性能比较强劲, 速度比较快。PalmOS属于 Palm公司开发, 是一种 32 位的嵌入式操作系统,是一套专门为掌上电脑编写的操作系统, 是一种轻量级、 比较开放的操作系统, 占用的内存非常小。现在多用Paml 公司生产的手机上。该系统允许用户在其基础上编写和修改相关软名师
27、资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 42 页 - - - - - - - - - 4 件,使支持的应用程序更加丰富多彩。Palm系统与其他手机系统相比在其它方面也还存在一些不足,如Palm操作系统本身不具有录音、 MP3播放功能等,但是可以通过加入第三方软件或硬件设备来实现。相对国外手机系统百花齐放的局面,国内手机操作系统则处于刚起步的阶段。目前国内还没有自主研发并商品化的手机操作系统。当然近些年来国内企业和我国政府在这方也投入了大量的人力和物力。同时也取得了一定
28、成果。在 2009年 8 月,由中国移动所主导开发OPhone 平台面世。 OPhone 平台采用开源的 Linux 作为系统内核, 借鉴并兼容 Android 平台,集成灵活高效的 Java 应用框架,充分借鉴当下主流手机操作系统所具有的良好用户体验,提供了一套完整的电话解决方案和各类移动数据业务解决方案。1.3.2 国内外手机应用现状随着 3G 在中国的全面启动,它所带来的巨大机遇和新生力量,大规模的网络建设正不断深入展开。但不可否认的是我国在通信领域中相比许多发达国家仍然存在着不小的差距, 就在国人还在为 EDGE 这种传输速度仅能达到384KB/秒的 2.75G过渡技术而欣喜的时候,国
29、外早已开始试行HSDPA 这种 3.5G 技术,传输速度更可达到惊人的数兆每秒,而基于其上所开发的延伸功能更是数不胜数,所以国内外手机应用也存在的较大的差异。但国内外对手机应用的需求方向是大致相似的,主要集中在信息服务,娱乐,学习这些方面。目前国内外手机应用服务方向主要有基于地理位置的信息服务(Location Based Service LBS)它是通过电信移动运营商的无线电通讯网络(如 GSM 网、CDMA 网)或外部定位方式 (如 GPS)获取移动终端用户的位置信息(地理坐标,或大地坐标 ),在GIS(Geographic Information System ,地理信息系统 )平台的支
30、持下,为用户提供相应服务的一种增值业务。例如手机定位,导航服务。近年来十分热门的网络社交服务(Social Networking Services)也已进入到手机客户端领域。例如国内有名的社交网站人人网已经针对Iphone,Android,塞班等手机平台推出了手机客户端。 国外最大的社交 Fackbook也已经传出正在进行针对手机的产品的研发。 Twiter,Myspace 等国外知名社交类网站都已经推出手机版。国内淘宝网旗下口碑网在今年也已经推出针对多个手机平台的客户端程序。MSN,QQ 等即时通信类的应用也已经在各个主流手机平台推出。手机办公类软件在手机上也正日趋完善,在手机上编辑查看各类
31、文档已经实现,在 Android 平台上的 QuickOffice 就是这样的软件。在Google Market(一个谷歌针对 Android 系统用户所开发的应用商场)上已经有过万的企业应用办公套件。手机娱乐游戏类应用,该类应用作为传统类手机应用,在各个平台上发展已近相对完善,手机上对各种流媒体的播放也已完美的支持。各类传统PC 游戏厂商进入手机领域。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 42 页 - - - - - - - - - 5 1.3.3 发展趋势随
32、着 3G 应用的不断开发推广,用户会越来越需要更加个性化、优质化的多媒体数据服务,用户希望能够随时、随地无缝利用3G 网络进行办公、网上交易、游戏娱乐、欣赏影视节目、收听和下载音乐等。根据观察,在不久的将来,移动手机终端将会在以下若干方面具有新的发展。首先,提供智能提醒服务,手机能够与用户实现密切配合,并监控用户的个性化设置(保持在本地或者云端) ,当重要时间点或关键事物需要用户注意时,手机会向用户发出 “ 提醒” 服务,服务包括日程提醒、交通状况、最佳行车路线、最佳泊位、优惠活动、实时新闻、体育赛事、天气情况、股市行情、好友活动、亲友生日等。其次,提供虚拟现实体验,手机可以借助传感器、周边设
33、备了解到您的身边环境,并根据收集到的信息,智能的为您提供有用的信息,如在网络世界养的宠物,可以借助音频设备表达叫声,借助马达和位置传感器等传递其跳、跃等行为信息;也可以在用户购物时,提供相关的同类产品价格参考,提醒用户附近的那个卖场更物美价廉;根据实际场景,为用户及时提供正在操控的产品的使用方法提醒。接着,发挥物联网的优势,借助无处不在的传感器,可以感知并分享到周围世界的海量信息,这些信息将在“ 云端” 得到整合,帮助用户及时、准确的获得气息信息、交通路况。另外借助物联网,用户间可以方便、快速的分享资源,协助和交互。如进行端到端的多人游戏、照片分享、书籍分享、音乐分享等。然后,作为经济工具,在
34、交通或者信息不发达的情况下,帮助用户找到最佳的市场,获得有价值的帮助信息,帮助用户从事的经济活动的收益率。最后,更加智能、安全的设备,随着智能手机的不断普及和更加智能,手机软件的更新、升级将会变得越发简单,并会为用户提供工具或信息,让用户有能力和权力决策那些内容可以浏览、下载或分享。在安全性上也将更加出色,能够十分有效的帮助用户进行获取到的内容的管理,保护用户的个人隐私和基于手机的金融活动如电子钱包、在线支付、在线贸易等。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共
35、42 页 - - - - - - - - - 6 第 2 章方案论证2.1 经济可行性分析本系统开发经费并不是很多。个人或者团队都可以按相应时间完成基本功能。若在基本功能上进而实现界面的美化,则还需要更好的美术人员协助实现。投入:除软件开发成本外,需要一台安装Windows操作系统和 Android 虚拟机的中等以上电脑,一部中等配置的装有Android2.3 或以上的 Android 手机。2.2 技术可行性分析2.2.1 Android 平台特性(1) 支持组件的重用与替换。意味着我们可以把系统中不喜欢的应用程序换掉,安装我们自己喜欢的程序。(2) Dalvik虚拟机专门为移动设备做了优化
36、。将class 文件通过 DX工具转换成后缀为.dex 的文件来执。 Dalvik 虚拟机基于寄存器,比java 虚拟机快。(3) 内部集成浏览器基于开源的WebKit 引擎。(4) 优化的 2D和 3D图形库。(5) SQLite 数据库,用于结构化的数据存储。(6) 支持各种多媒体格式: MPEG4、H.264、MP3 、AAC 、AMR 、JPG 、PNG 、GIF。(7) GSM 电话全球通。(8) 蓝牙、 Wifi (无线网络)、EDGE(GSM到 3G的过渡 ) 。(9) 照相机、 GPS 、指南针和加速度计。(10) 丰富的开发环境包括设备模拟器,调式工具,内存及性能分析表和Ec
37、lipse集成开发环境插件。 Google 提供了 Android 开发包 SDK ,其中包含大量的类库和开发工具。2.2.2 Android 平台架构如图 2-1 所示的 Android 操作系统的体系结构图, 我们可以看出 Android 操作系统结构分为 4 层,由上到下一次是应用程序、应用程序框架、核心类库和Linux 内核。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 42 页 - - - - - - - - - 7 图 2-1 Android 操作系统的体
38、系结构图(1) 应用程序。 Android 连同一个核心应用程序抱一起发布,改应用程序包包括E-mail 客户端。 SMS 短消息程序、日历、地图、浏览器、联系人管理应用程序等。(2) 开发者完全可以访问核心应用程序所使用的API 框架。该应用程序框架用来简化组件软件的重用,任何一个应用程序度可以发布它的功能并且任何其他应用程序度可以使用其所发布的功能块。应用程序都是由一系列的服务和系统组成包括:一个可扩展的视图(Views) 、内容管理器( Content Providers) 、资源管理器(Resource Manager ) 、通知管理器( Notification Manager) 、
39、活动类管理器(Activity Manager) 。(3) Android 程序库通过 Android 应用程序框架为开发者提供服务主要核心库包括:系统 C 库、媒体库、Suface Manager 、 LibWebCore、 SGL、 3D libraries、 FreeType 、SQLite。(4) Android 运行库包括一个核心库,提供java 编程语言核心库的大多数功能。(5) Linux 内核。Android 的核心系统服务依赖于Linux2.6 内核,如安全性、内存管理、进程管理、网络协议、和驱动模型。2.2.3 Android 应用程序组件如前所述, Android 运行在
40、 Linux 内核上。 Android 应用程序是用 Java 编程语言编写的,它们在一个虚拟机(VM )中运行。需要注意的是,这个VM 并非您想象中的 JVM,而是 Dalvik Virtual Machine ,这是一种开源技术。每个Android 应用程序都在 Dalvik VM 的一个实例中运行, 这个实例驻留在一个由Linux 内核管理的名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 42 页 - - - - - - - - - 8 进程中,如下图 2-2 所
41、示。图 2-2 Dalvik VMAndroid 应用程序由一个或多个组件组成。1. 活动( Activity )具有可视UI 的应用程序是用活动实现的。当用户从主屏幕或应用程序启动器选择一个应用程序时,就会开始一个动作。2. 服务(Service) 服务应该用于任何需要持续较长时间的应用程序,例如网络监视器或更新检查应用程序。3. 内容提供程序 (Content Provider) 可以将内容提供程序看作数据库服务器。内容提供程序的任务是管理对持久数据的访问,例如SQLite 数据库。如果应用程序非常简单,那么可能不需要创建内容提供程序。如果要构建一个较大的应用程序,或者构建需要为多个活动或
42、应用程序提供数据的应用程序,那么可以使用内容提供程序实现数据访问。4. 广播接收器 (Broadcast Receiver) Android 应用程序可用于处理一个数据元素,或者对一个事件(例如接收文本消息)做出响应。5. 视图( View)View 是 Android 中图形用户界面的基类,提供了可视化界面展示。Android 的图形界面分为三层: 底层是 Activity;Activity上面是 Window; Window 上面是 Views。View 又可以分为 View 和 ViewGroup。View 是基本控件, ViewGroup 是布局控件。6. 信使( Intent)Int
43、ent 是不同组件之间相互导航的纽带,封装了不同组件导航查找的条件。Android 应用程序是连同一个AndroidManifest.xml文件一起部署到设备的。AndroidManifest.xml 包含必要的配置信息,以便将它适当地安装到设备。它包括必需的类名和应用程序能够处理的事件类型,以及运行应用程序所需的许可。例如,如果应用程序需要访问网络例如为了下载一个文件 那么 manifest 文件中必须显式地列出该许可。很多应用程序可能启用了这个特定的许可。这种声明式安全性有助于减少恶意应用程序损害设备的可能性。Linux Kernel Linux process Daivik Virtua
44、l Machine Android application 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 42 页 - - - - - - - - - 9 2.3 本项目的开发方法经过深入分析,本项目使用面向对象方式开发是比较好的开发方式。面向对象的软件技术以对象 (Object) 为核心,用这种技术开发出的软件系统由对象组成。对象是对现实世界实体的正确抽象,它是由描述内部状态表示静态属性的数据,以及可以对这些数据施加的操作( 表示对象的动态行为 ) ,封装在一起所构
45、成的统一体。对象之间通过传递消息互相联系,以模拟现实世界中不同事物彼此之间的联系。面向对象的设计方法与传统的面向过程的方法有本质不同,这种方法的基本原理是,使用现实世界的概念抽象地思考问题从而自然地解决问题。它强调模拟现实世界中的概念而不强调算法,它鼓励开发者在软件开发的绝大部分过程中都用应用领域的概念去思考。在面向对象的设计方法中,计算机的观点是不重要的,现实世界的模型才是最重要的。面向对象的软件开发过程从始至终都围绕着建立问题领域的对象模型来进行:对问题领域进行自然的分解,确定需要使用的对象和类,建立适当的类等级,在对象之间传递消息实现必要的联系,从而按照人们习惯的思维方式建立起问题领域的
46、模型,模拟客观世界。传统的软件开发过程可以用“瀑布”模型来描述,这种方法强调自顶向下按部就班地完成软件开发工作。事实上,人们认识客观世界解决现实问题的过程,是一个渐进的过程,人的认识需要在继承以前的有关知识的基础上,经过多次反复才能逐步深化。在人的认识深化过程中,既包括了从一般到特殊的演绎思维过程,也包括了从特殊到一般的归纳思维过程。人在认识和解决复杂问题时使用的最强有力的思维工具是抽象,也就是在处理复杂对象时,为了达到某个分析目的集中研究对象的与此目的有关的实质,忽略该对象的那些与此目的无关的部分。面向对象方法学的出发点和基本原则,就是分析、设计和实现一个软件系统的方法和过程尽可能接近人们认
47、识世界解决问题的方法和过程,也就是使描述问题的问题空间和描述解法的解空间在结构上尽可能一致。也可以说,面向对象方法学的基本原则,是按照人们习惯的思维方式建立问题域的模型,开发出尽可能直观、自然地表现求解方法的软件系统。面向对象的软件系统中广泛使用的对象,是对客观世界中实体的抽象,对象实际上是抽象数据类型的实例,提供了理想的数据抽象机制,同时又具有良好的过程抽象机制( 通过发消息使用公有成员函数)。对象类是对一组相似对象的抽象,类等级中上层的类是对下层类的抽象。因此,面向对象的环境提供了强有力的抽象机制,便于人在利用计算机软件系统解决复杂问题时使用习惯的抽象思维工具。此外,面向对象方法学中普遍进
48、行的对象分类过程,支持从特殊到一般的归纳思维过程; 面向对象方法学中通过建立类等级而获得的继承特性,支持从一般到特殊的演绎思维过程。面向对象的软件技术为开发者提供了随着对某个应用系统的认识逐步深入和具体化的过程,而逐步设计和实现该系统的可能性,因为可以先设计出由抽象类构成的系统框架,随着认识深入和具体化再逐步派生出更具体的派生类。这样的开发过程符合人们认识客观世界解决复杂问题时逐步深化的渐进过程。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 42 页 - - - -
49、- - - - - 10 2.4 开发工具及环境简介2.4.1 开发工具 Eclipse简介Eclipse是一个开放源代码的、与NetBeans、Sun ONE Studio和 Borland Jbuilder类似的一种基于Java 的整合型可扩展开发平台,也是目前最著名的开源项目之一,Eclipse 附带了一个标准的插件集,包括 Java 开发工具(Java Development Tools ,JDT ) 。其未来的目标不仅仅是成为专门开发Java 程序的 IDE环境,根据 Eclipse 的体系结构,通过开发插件,它能扩展到任何语言的开发,甚至能成为图片绘制的工具。目前, Eclipse
50、已经开始提供C 语言开发的功能插件。更难能可贵的是,Eclipse是一个开放源代码的项目,任何人都可以下载Eclipse的源代码,并且在此基础上开发自己的功能插件。 也就是说未来只要有人需要, 就会有建立在 Eclipse之上 COBOL,Perl ,Python 等语言的开发插件出现。同时可以通过开发新的插件扩展现有插件的功能,可以无限扩展,而且有着统一的外观,操作和系统资源管理,这也正是 Eclipse 的潜力所在。Eclipse的主要组成。Eclipse是一个开放源代码的软件开发项目,专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。它主要由Eclipse项目、 Ecl
51、ipse工具项目和 Eclipse 技术项目三个项目组成,具体包括四个部分组成 Eclipse Platform 、JDT 、CDT和 PDE.JDT支持 Java 开发、CDT支持 C开发、PDE 用来支持插件开发, Eclipse Platform则是一个开放的可扩展IDE,提供了一个通用的开发平台。它提供建造块和构造并运行集成软件开发工具的基础。Eclipse SDK (软件开发者包)是Eclipse Platform 、JDT和 PDE 所生产的组件合并,它们可以一次下载。 这些部分在一起提供了一个具有丰富特性的开发环境,允许开发者有效地建造可以无缝集成到Eclipse Platfor
52、m中的工具。 Eclipse SDK由 Eclipse 项目生产的工具和来自其它开放源代码的第三方软件组合而成。Eclipse项目生产的软件以 CPL 发布,第三方组件有各自自身的许可协议。2.4.2 开发环境简介本 项 目 在 windowsXP 操 作 系 统 上 进 行 开 发 , Google 为 开 发 者 提 供 了SDK(Software Development Kit)。Android SDK的下载地址为http:/development.A 因 为 本 项 目 的 开 发 工 具 是Eclipse ,所以还需要安装ADT(Android Development Tools)插
53、件。具体安装步骤就不在本文中介绍了。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 42 页 - - - - - - - - - 11 第 3 章需求分析需求分析工作是软件生存周期中重要的一步,也是起决定性的一步。通过它可以全面了解整个系统的功能和性能方面的要求,为软件设计打下坚实的基础。该部分的目标主要有:获得目标系统的物理模型,了解目标系统是如何运行的;抽象出目标系统的逻辑模型,对物理模型进行筛选,得到与软件系统有关的部分;建立目标系统的逻辑模型,得出数据流图和数据
54、字典;补充目标系统的逻辑模型,对目标系统的用户界面,至今尚未考虑的细节进行说明。本系统主要是完成贪吃蛇游戏的基本操作。用户可以自己练习和娱乐。本系统需要满足以下几点要求。(1) 利用方向键来改变蛇的运行方向。(2) 空格键暂停或继续游戏,并在随机的地方产生食物。(3) 吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。3.1 系统开发目标采用基于 Android 的程序设计技术,以及用 Eclipse 开发 Android 程序的相关技术开发出具有良好用户界面,操作简单易学,游戏功能齐全且有益于智力开发的贪吃蛇游戏。3.2 系统需求分析3.2.1 业务需求分析虽然现在市面上存在着各
55、种各样的游戏版本,可是贪吃蛇其市场还是相当大的.因为它的特殊在于它能吸引人更深入,爱不释手 .随着游戏速度不断加快 ,其刺激性也更强.可以说该游戏的优势在于它的简单易行,不论是手机 ,还是小游戏机 ,都能很快顺利的运行 .对于在外忙碌的人 ,不可能花费大量时间在娱乐上,大型游戏是行不通的 ,这样的小游戏刚好迎合了他们的需求。手机贪吃蛇游戏基于JAVA 平台编写, 采用 Android 技术开发的一款手机游戏。手机游戏程序是一项精度要求很高的程序系统,因为其代码利用率很高。一个实时运行的最终作品,每秒都会运行成千上万行程序,绘图事件、键盘事件都会以极高的频率在后台等待响应,若有丝毫的差别都将很容
56、易导致程序在运行不久后可能出现严重错误,甚至死循环。因此,其逻辑设计应当相当严谨,需将所有可能发生的事件及意外情况考虑在设计中。JAVA 是基于虚拟机的半解释型编译系统,其执行效率较 C+等完全编译后的程序会低很多,程序如果不进行精简和优化,将可能导致运行的不流畅。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 42 页 - - - - - - - - - 12 3.2.2 用户需求分析本项目中用户的需求如下图3-1。图 3-1 用户需求游戏开发成功后,最终用户为各个年
57、龄段的人群,用户范围相当广泛。但是用户对软件产品也有一定的要求。1. 简单易学时间不管对于谁来说都是宝贵的,用户不会愿意花大量时间去学习使用一款软件。一款软件如果操作界面不友好,让用户难以上手使用,那就说明这款软件开发得不够成功,从而失去大量的用户。所以本项目必须拥有良好的交互界面,让用户安装之后就能进行游戏。2. 运行稳定一款软件设计得不够好,那么就有可能在运行的时候出现一些不可预料的错误从而造成软件崩溃。如果用户正在游戏突然软件崩溃了,无疑会让用户感到非常不舒服,有可能就把软件给卸载了,这样也会失去很多用户。3. 操作简便用户不是程序员,他们不知道程序的内部逻辑。所以程序员必须提供给用户便
58、捷的操作接口来供用户操作,灵活便捷的操作性直接影响了一款软件的好坏。3.2.3 功能需求分析本项目是一个运行在Android 手机上的游戏,所以在应该实现以下功能。1. 响应键盘事件玩家可以从手机键盘或者触屏开始游戏,操控游戏,暂停游戏,结束游戏。2. 绘制游戏图形界面玩家开始游戏后,在手机屏幕上绘制出一条初始由7 个节点组成小蛇。蛇能够在屏幕上移动,屏幕上随机位置出现食物,当蛇吃到食物后蛇的身体会增长一截同时移动速度也会响应加快。蛇不能向相反方向移动,例如蛇头朝南时则不能向北移动。当蛇头碰到墙壁或者碰到自己的身体时游戏结束。3. 记录玩家分数当游戏结束后,显示玩家在游戏中所获得的分数。开始游
59、戏操作游戏退出游戏player 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 42 页 - - - - - - - - - 13 贪吃蛇详细设计1.1 程序流程设计本游戏的流程如下图4-1 所示。触摸屏幕游戏开始,蛇开始移动键盘操作:向上左移右移向下没有吃到食物且蛇碰到边界游戏结束游 戏 中 途 欲 中断,稍后继续游戏触摸屏幕暂停游戏游戏暂停进入游戏画面再次触摸屏幕游戏恢复图 1-1 游戏处理流程图名师资料总结 - - -精品资料欢迎下载 - - - - - - -
60、- - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 42 页 - - - - - - - - - 14 1.2 概要设计1.2.1 模块划分从面向对象程序设计的角度,本项目总体可以分为游戏界面模块、数据存储模块和控制模块。如下图 4-2 所示。1.2.2 游戏主界面模块游戏界面主框架主要包括游戏图形区域界面、游戏的开始按钮、暂停按钮、游戏的退出按钮。游戏界面主框架的主要结构图如图1-3 所示。游戏的主界面架游 戏 图形 区 域界面游戏控制按钮图 1-3 游戏主界面贪吃蛇游戏游戏主界面模块游戏控制模块图 1-2 游戏总设计模块游戏数据存储模块名
61、师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 42 页 - - - - - - - - - 15 1.2.3 游戏控制模块游戏控制模块主要通过手机键盘上的按钮来控制游戏的开始、游戏的退出这两个功能以及控制游戏分数变化。 在这个模块中, 需要给各个按钮添加响应事件代码,来对上述的功能加以进一步的实现。游戏控制模块的主要框架如图4-4 所示。1.3 模块实现原理1.3.1 游戏界面模块实现1. 实现游戏背景本游戏采用 Activity 作为游戏背景的载体 ,在 Androi
62、d 中一个 Activity 就相当于windows 中的一个窗口, Activity 上可以放置许多类型的控件。一个activity 主要有三个状态。当在屏幕前台时 (位于当前任务堆栈的顶部) ,它是活跃或运行的状态。 它就是相应用户操作的 activity。当它失去焦点但仍然对用户可见时,它处于暂停状态。即是:在它之上有另外一个 activity。这个 activity 也许是透明的,或者未能完全遮蔽全屏,所以被暂停的activity 仍对用户可见。暂停的activity 仍然是存活状态(它保留着所有的状态和成员信息并连接至窗口管理器) ,但当系统处于极低内存的情况下, 仍然可以杀死这个a
63、ctivity。游戏控制模块游戏的移动速度游戏的暂停功能游戏的重新开始图 1-4 游戏控制模块框架名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 42 页 - - - - - - - - - 16 如果它完全被另一个activity 覆盖是,它处于停止状态。 它仍然保留所有的状态和成员信息。然而它不在为用户可见,所以它的窗口将被隐藏,如果其它地方需要内存,则系统经常会杀死这个activity。如果一个activity 处于暂停或停止状态,系统可以通过要求它结束(调用它的
64、finish() 方法)或直接杀死它的进程来将它驱出内存。当它再次为用户可见的时候,它只能完全重新启动并恢复至以前的状态。当一个 activity 从这个状态转变到另一个状态时,它被以下列protected方法所通知。void onCreate(Bundle savedInstanceState) 、void onStart() 、void onRestart() 、void onResume() 、void onPause() 、void onStop() 、void onDestroy() 2. 实现蛇的身体蛇可以看做是一个个节点组成的,因此可以用一个链表来存储蛇身的元素,在画蛇时遍历这个
65、链表讲里面的元素一一画出,这样就实现了一条蛇。3. 实现蛇的移动用一个 timer(定时器 )来不断地刷新游戏画面 ,每刷新一次就再蛇头的前面(链表的尾部 )增加一个新元素 ,同时把蛇尾的一个元素删掉,这样从视觉上看起来就实现了蛇的移动。4. 实现蛇吃食物蛇移动的过程中如果蛇头的坐标与食物出现的坐标重合了,那么就在蛇头的位置增加一个元素同时不删除蛇尾的最后一个元素,这样蛇每迟到一个食物身 体 就 会变长一截。1.3.2 游戏控制模块实现1. 实现操作蛇的移动方向在 Android 系统中,手机上的每个按钮都会有一个对应的键值跟它对应,所在可以给对应的按钮设置监听器OnClickListener
66、,监听器是一个接口 ,该接口中有一个方 法onClick(View v) 。 当 按 钮 被 点 击 的 时 候 系 统 会 自 动 调 用 该 监 听 器 的onClick(View v) 方法。所以实现游戏控制的具体代码将被写到该方法中。因为本游戏中不允许蛇向与蛇头相反的方向移动,所以当用户操作时需要判断用户操作的方向是不是跟规则冲突,若冲突则无视该操作, 若不冲突则响应该操作,所以需要用一个变量来记录蛇头的当前方向。2. 实现游戏暂停在 Activity 的生命周期中,有一个onPause() 方法.该方法在 Activity 变得不可见的时候被系统自动调用 .在玩游戏过程中, 如果有来
67、电或是其它事件中断,这时应该把当前状态保存。以便返回时,还可以继续玩游戏。这就使用onSaveInstanceState实现保存当前状态。3. 实现游戏恢复Activity 生命周期的 onResume() 方法.该方法在 Activity 从不可见的状态下变得名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 42 页 - - - - - - - - - 17 可见时被系统自动调用.在用户接完电话或者在暂停状态下触摸屏幕后可以在该生命周期方法中对游戏进行恢复。4. 实现游
68、戏退出当一个Activity退出或者被调用finish() 方法后 ,系统会调用其生命周期方法onDestroy().当用户退出游戏时 ,可以在这个方法中对资源进行释放。1.3.3 TileView 类的设计TileView 是游戏的界限,即蛇头若触碰到界限则游戏结束。因为界限也需要被现实到屏幕上,所以TileView 需要继承 Android.view.View 类。Android.view.View类是描绘块状视图的基类。View 会绘制一个包含 Drawing 是 event事件的方形块。View 是所有与用户交互的组件的Widgets 的基类(Buttons, textField 等)
69、,View 的子类ViewGroup 是 layouts 类的基类, layouts类可以包含其他的View/ViewGroup 组件并且定义展示的属性。实现一个 View,首先需要实现框架中一些所有Views 公用的方法。不必重写所有所有的方法,可以仅仅重写onDraw(Android.graphics.Canvas)。1.3.4 SnakeView类的设计SnakeView 是本游戏的业务逻辑类,该类中包含了游戏数据和一些处理数据的方法以及一些内部类。 SnakeView的方法摘要。1. 判断按键的方法在 Android 手机上,每个按键都会有一个唯一的键值与它对应,可以通过获得键值来判断
70、哪个键被按下了并采取相应的动作。2. 设置提示信息的方法通过程序判断动态地设置用户提示信息,如游戏结束。3. 在随机位置出现食物的方法通过随机数在屏幕范围内随机出现一个食物,但是不允许同一时刻有两个食物存在。4. 刷新蛇的当前位置的方法主要用于刷新蛇的当前位置。5. 判断蛇是否吃到食物的方法因为食物和蛇都会有一个坐标,所以可以通过判断蛇头坐标是否跟食物坐标相等的方法来判断蛇是否吃到了食物。1.4 程序主结构本次所设计贪吃蛇游戏的程序主结构如图4-5 所示。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - -
71、- - - - 第 22 页,共 42 页 - - - - - - - - - 18 1.5 程序类图该程序由以下五个类实现,分别为TileView,Snake ,SnakeView。各个类之间的关系及所包括的方法如图4-6 所示。初始化进入事件等待状态初始化失败不正常退出开始请求相关事件返回暂停请求退出正常退出图 1-5 贪吃蛇程序主结构名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 23 页,共 42 页 - - - - - - - - - 19 图 1-6 程序类图1.6 类的
72、详细设计1.6.1 Snake类的详细设计Snake类是蛇头以及蛇头的控制部分, 包括判断 newDirection 和 oldDirection 是否为相反方向,用于选取有效方向。判断蛇头是否和蛇身的某个节点的坐标重合,即蛇是否吃到自己。实现蛇身沿着蛇头的轨迹移动。根据方向键,改变蛇头的x、y的值,即改变方向。以及让蛇不停走动。public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); / No Title bar requestWindowFeature(Window.FEATURE
73、_NO_TITLE); setContentView(R.layout.snake_layout); mSnakeView = (SnakeView) findViewById(R.id.snake); mSnakeView.setTextView(TextView) findViewById(R.id.text); play = (Button)findViewById(R.id.play); Snake-mSnakeView: SnakeView-ICICLE_KEY: String+onCreate()+onPause()+onSaveInstanceState()SnakeView+S
74、nakeView(context: Context, attrs: AttributeSet)+initSnakeView()+initNewGame()+onKeyDown(keyCode: int, msg: KeyEvent): boolean+addRandomApple()+update()+updateSnake()+updateWalls()+updateApples()+coordArrayListToArray(cvec: ArrayList): int+restoreState(icicl: Bundlee)+setTextView(newView: TextView)Ti
75、leView-mTileSize: int-mXTileCount: int-mYTileCount: int-mXOffset: int-mTileArray: Bitmap-mYOffset: int+TileView()+onSizeChanged(w: int, h: int, oldw: int, oldh: int)+loadTile(key: int, tile: Drawable)+clearTiles()+onDraw(canvas: Canvas)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理
76、- - - - - - - 第 24 页,共 42 页 - - - - - - - - - 20 play.setId(PLAY); play.setOnClickListener(this); play.setBackgroundColor(Color.argb(0, 0, 255, 0); left = (ImageButton)findViewById(R.id.left); left.setId(LEFT); left.setOnClickListener(this); left.setBackgroundColor(Color.argb(1, 1, 255, 1); left.set
77、Visibility(View.GONE); right = (ImageButton)findViewById(R.id.right); right.setId(RIGHT); right.setOnClickListener(this); right.setBackgroundColor(Color.argb(1, 1, 255, 1); right.setVisibility(View.GONE); up = (ImageButton)findViewById(R.id.up); up.setId(UP); up.setOnClickListener(this); up.setBackg
78、roundColor(Color.argb(1, 1, 255, 1); up.setVisibility(View.GONE); down = (ImageButton)findViewById(R.id.down); down.setId(DOWN); down.setOnClickListener(this); down.setBackgroundColor(Color.argb(1, 1, 255, 1); down.setVisibility(View.GONE); if (savedInstanceState = null) / We were just launched - se
79、t up a new game mSnakeView.setMode(mSnakeView.READY); else / We are being restored Bundle map = savedInstanceState.getBundle(ICICLE_KEY); if (map != null) mSnakeView.restoreState(map); else mSnakeView.setMode(SnakeView.PAUSE); handler = new Handler() public void handleMessage(Message msg) 名师资料总结 - -
80、 -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 25 页,共 42 页 - - - - - - - - - 21 switch (msg.what) case Snake.GUINOTIFIER: play.setVisibility(View.VISIBLE); left.setVisibility(View.GONE); right.setVisibility(View.GONE); up.setVisibility(View.GONE); down.setVisibility(View.GONE)
81、; break; super.handleMessage(msg); 1.6.2 TileView 类的详细设计TileView 是游戏的界限,即蛇头若触碰到界限则游戏结束。因为界限也需要被现实到屏幕上,所以TileView 需要继承 Android.view.View 类。Android.view.View类是描绘块状视图的基类。View 会绘制一个包含 Drawing 是 event事件的方形块。View 是所有与用户交互的组件的Widgets 的基类(Buttons, textField 等),View 的子类ViewGroup 是 layouts 类的基类, layouts类可以包含其
82、他的View/ViewGroup 组件并且定义展示的属性。实现一个 View,首先需要实现框架中一些所有Views 公用的方法。 不必重写所有所有的方法,可以仅仅重写。onDraw(Android.graphics.Canvas) protected void onSizeChanged(int w, int h, int oldw, int oldh) mXTileCount = (int) Math.floor(w / mTileSize); mYTileCount = (int) Math.floor(h / mTileSize); mXOffset = (w - (mTileSize
83、* mXTileCount) / 2); mYOffset = (h - (mTileSize * mYTileCount) / 2); mTileGrid = new intmXTileCountmYTileCount; clearTiles(); public void loadTile(int key, Drawable tile) Bitmap bitmap = Bitmap.createBitmap(mTileSize, mTileSize, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); 名师资料总结 -
84、- -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 26 页,共 42 页 - - - - - - - - - 22 tile.setBounds(0, 0, mTileSize, mTileSize); tile.draw(canvas); mTileArraykey = bitmap; public void clearTiles() for (int x = 0; x mXTileCount; x+) for (int y = 0; y mYTileCount; y+) setTile(0, x,
85、y); public void setTile(int tileindex, int x, int y) mTileGridxy = tileindex; public void onDraw(Canvas canvas) super.onDraw(canvas); for (int x = 0; x mXTileCount; x += 1) for (int y = 0; y 0) canvas.drawBitmap(mTileArraymTileGridxy, mXOffset + x * mTileSize, mYOffset + y * mTileSize, mPaint); 1.6.
86、3 SnakeView类的详细设计SnakeView 是本游戏的业务逻辑类,该类中包含了游戏数据和一些处理数据的方法以及一些内部类。SnakeView的方法摘要。1. 判断按键的方法在 Android 手机上,每个按键都会有一个唯一的键值与它对应,可以通过获得键值来判断哪个键被按下了并采取相应的动作。2. 设置提示信息的方法通过程序判断动态地设置用户提示信息,如游戏结束。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 27 页,共 42 页 - - - - - - - - - 23
87、3. 在随机位置出现食物的方法通过随机数在屏幕范围内随机出现一个食物,但是不允许同一时刻有两个食物存在。4. 刷新蛇的当前位置的方法主要用于刷新蛇的当前位置。5. 判断蛇是否吃到食物的方法因为食物和蛇都会有一个坐标,所以可以通过判断蛇头坐标是否跟食物坐标相等的方法来判断蛇是否吃到了食物。private RefreshHandler mRedrawHandler = new RefreshHandler(); class RefreshHandler extends Handler Override public void handleMessage(Message msg) SnakeView
88、.this.update(); SnakeView.this.invalidate(); public void sleep(long delayMillis) this.removeMessages(0); sendMessageDelayed(obtainMessage(0), delayMillis); ; public SnakeView(Context context, AttributeSet attrs) super(context, attrs); initSnakeView(); public SnakeView(Context context, AttributeSet a
89、ttrs, int defStyle) super(context, attrs, defStyle); initSnakeView(); private void initSnakeView() setFocusable(true); Resources r = this.getContext().getResources(); resetTiles(4); loadTile(RED_STAR, r.getDrawable(R.drawable.redstar); loadTile(YELLOW_STAR, r.getDrawable(R.drawable.yellowstar); load
90、Tile(GREEN_STAR, r.getDrawable(R.drawable.greenstar); mSnakeTrail.add(new Coordinate(7, 7); mSnakeTrail.add(new Coordinate(6, 7); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 28 页,共 42 页 - - - - - - - - - 24 mSnakeTrail.add(new Coordinate(5, 7); mSnakeTrail.add(new
91、 Coordinate(4, 7); mSnakeTrail.add(new Coordinate(3, 7); mSnakeTrail.add(new Coordinate(2, 7); mNextDirection = NORTH; / Two apples to start with addRandomApple(); addRandomApple(); mMoveDelay = 600; mScore = 0; private int coordArrayListToArray(ArrayList cvec) int count = cvec.size(); int rawArray
92、= new intcount * 2; for (int index = 0; index 选择 WindowpreferencesapplicationServers 选择所用服务 tomcat6.0选择 enable选择 tomcat主目录 JDK 主目录(只要选择到 jdk主目录就可以) 选择 apply。2)回到 My Eclipse 主界面 选择 ProjectDeployments选择 add(添加第一部配置好的 tomcat6.0服务) 确定就可以直接运行程序。2. 主要代码(1) 蛇身、食物和墙的实现class coordinate public int x; public i
93、nt y; public Coordinate(int newX, int newY) x = newX; y = newY; public boolean equals(coordinate other) if (x = other.x & y = other.y) return true; return false; Override public String toString() return Coordinate: + x + , + y + ; Override public void onDraw(Canvas canvas) 名师资料总结 - - -精品资料欢迎下载 - - -
94、 - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 36 页,共 42 页 - - - - - - - - - 32 super.onDraw(canvas); for (int x = 0; x mXTileCount; x +) for (int y = 0; y 0) canvas.drawBitmap(mTileArraymTileGridxy, mXOffset + x * mTileSize , mYOffset + y * mTileSize , mPaint); (2) 处理键盘事件Override public bool
95、ean onKeyDown(int keyCode, KeyEvent msg) if (keyCode = KeyEvent.KEYCODE_DPAD_UP) if (mMode = READY | mMode = LOSE) initNewGame(); setMode(RUNNING); update(); return (true); if (mMode = PAUSE) /* setMode(RUNNING); update(); return (true); if (mDirection != SOUTH) mNextDirection = NORTH; return (true)
96、; if (keyCode = KeyEvent.KEYCODE_DPAD_DOWN) if (mDirection != NORTH) mNextDirection = SOUTH; return (true); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 37 页,共 42 页 - - - - - - - - - 33 if (keyCode = KeyEvent.KEYCODE_DPAD_LEFT) if (mDirection != EAST) mNextDirectio
97、n = WEST ; return (true); if (keyCode = KeyEvent.KEYCODE_DPAD_RIGHT) if (mDirection != WEST ) mNextDirection = EAST; return (true); return super.onKeyDown(keyCode, msg); if (direction != currentDirection) & !needUpdate) / 取出列表中的最后一个元素(蛇的头部 ) WormLink sl = (WormLink)worm.lastElement(); int x = sl.get
98、EndX(); int y = sl.getEndY(); / 不同的运动方向坐标的改变也不一样switch (direction) case UP: / 当这段向上运动的时候if (currentDirection != DOWN) y-; needUpdate = true; break; case DOWN: / 当这段向下运动的时候if (currentDirection != UP) y+; needUpdate = true; break; case LEFT: / 当这段向左运动的时候if (currentDirection != RIGHT) x-; needUpdate =
99、true; break; case RIGHT: / 当这段向右运动的时候名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 38 页,共 42 页 - - - - - - - - - 34 if (currentDirection != LEFT) x+; needUpdate = true; break; / 当更改方向后需要更新if (needUpdate = true) worm.addElement (new WormLink (x, y, 0, direction); cur
100、rentDirection = direction; snake if (savedInstanceState = null) / We were just launched - set up a new game mSnakeView.setMode(mSnakeView.READY); else / We are being restored Bundle map = savedInstanceState.getBundle(ICICLE_KEY); if (map != null) mSnakeView.restoreState(map); else mSnakeView.setMode
101、(SnakeView.PAUSE); handler = new Handler() public void handleMessage(Message msg) switch (msg.what) case Snake.GUINOTIFIER play.setVisibility(View.VISIBLE); left.setVisibility(View.GONE); right.setVisibility(View.GONE); up.setVisibility(View.GONE); down.setVisibility(View.GONE); break; super.handleM
102、essage(msg); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 39 页,共 42 页 - - - - - - - - - 35 3. 附图附图 1 游戏开始界面附图 2 游戏结束界面名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 40 页,共 42 页 - - - - - - - - - 36 目录摘要 . IAbstract . II第 1 章绪论 . 11.
103、1 Android 简介 . 11.1.1 Android 的来源及发展 . 11.1.2 Android 系统的特点 . 21.2 项目目的与意义 . 21.2.1 开发目的 . 21.2.2 开发意义 . 31.3 国内外现状分析 . 3 1.3.1 国内外手机系统现状 . 31.3.2 国内外手机应用现状 . 41.3.3 发展趋势 . 5第 2 章方案论证 . 62.1 经济可行性分析 . 6 2.2 技术可行性分析 . 6 2.2.1 Android 平台特性 . 62.2.2 Android 平台架构 . 62.2.3 Android 应用程序组件 . 72.3 本项目的开发方法
104、. 92.4 开发工具及环境简介 . 102.4.1 开发工具 Eclipse简介 . 102.4.2 开发环境简介 . 10第 3 章需求分析 . 113.1 系统开发目标 . 113.2 系统需求分析 . 11 3.2.1 业务需求分析 . 113.2.2 用户需求分析 . 123.2.3 功能需求分析 . 12第 4 章过程论述 . 错误!未定义书签。4.1 程序流程设计 . 13 4.2 概要设计 . 14 4.2.1 模块划分 . 144.2.2 游戏主界面模块 . 144.2.3 游戏控制模块 . 154.3 模块实现原理 . 15 名师资料总结 - - -精品资料欢迎下载 - -
105、 - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 41 页,共 42 页 - - - - - - - - - 37 4.3.1 游戏界面模块实现 . 154.3.2 游戏控制模块实现 . 164.3.3 TileView 类的设计 . 174.3.4 SnakeView类的设计 . 174.4 程序主结构 . 17 4.5 程序类图 . 184.6 类的详细设计 . 194.6.1 Snake类的详细设计 . 194.6.2 TileView 类的详细设计 . 214.6.3 SnakeView类的详细设计 . 22第 5 章系统测试与结果分析 . 255.1 软件测试 . 255.1.1测试的基本概念 . 255.1.2测试的步骤 . 255.2 系统测试 . 265.3 测试结论 . 错误!未定义书签。结论 . 13致谢 . 29参考文献 . 30附录 . 31名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 42 页,共 42 页 - - - - - - - - -