基于google手机操作系统的游戏开发-王帧-6月7日

上传人:dao****ing 文档编号:60382366 上传时间:2022-03-07 格式:DOC 页数:70 大小:882KB
返回 下载 相关 举报
基于google手机操作系统的游戏开发-王帧-6月7日_第1页
第1页 / 共70页
基于google手机操作系统的游戏开发-王帧-6月7日_第2页
第2页 / 共70页
基于google手机操作系统的游戏开发-王帧-6月7日_第3页
第3页 / 共70页
点击查看更多>>
资源描述
苏州科技学院毕业论文基于 google 手机操作系统的游戏开发摘 要本论文主要阐述以面向对象的程序开发语言 Java 为开发工具,设计一个能在 android 为操作系统的手机上运行的手机小游戏。游戏的主要功能模块为:画出界面模块:装载图片。事件处理模块:处理鼠标事件。判断游戏状态模块:显示正确图片功能。且游戏能正常运行以游戏为例学习程序设计,使艰苦、枯燥的学习充满了丰富的乐趣。将程序设计的知识有机的分散在趣味程序中,使得程序设计语言众多的特征变得具体、形象、直观。数学小游戏充分体现了游戏在学习程序设计中的积极作用。关键词 数学游戏;面向对象;Java;android苏州科技学院毕业论文The Development of Mathematical Game Based on AndroidAbstractThis paper set out a game that can runs on mobile phone that using the android mobile operating system.The main function modules for:Draw interface modules: loading picture. Incident management modules: the mouse handling the incident. Judgement of the game state modules: display the correct picture functions.and the game should be operated normally Additional modules: Select a picture to the game.Learning Programming as an example of game, to hard, boring studying full of fun. Programming will be the knowledge of organic scattered in the fun in the process, making programming language many of the features become concrete, vivid and intuitive. Mathematical game fully embodies the game in the learning process in the design of the active role.Keywords Mathematical Game; Object Oriented; Java; android苏州科技学院毕业论文目目 录录1. 绪论.11.1前言.11.2主要工作内容.12. 开发工具介绍.12.1ANDROID的特性 .12.2ANDROID的结构 .22.3应用程序.32.4应用程序框架.32.5库.42.7LINUX内核.53. 开发工具的安装.53.1安装SDK.53.1.1下载 sdk.53.1.2本机开发环境配置介绍.53.1.3安装 sdk.53.2安装 ECLIPSE插件(ADT) .64. 在 ECLIPSE 上开发 ANDROID 应用程序.74.1创建ANDROID工程.74.2创建启动配置.84.3运行和调试程序.85. 需求分析.95.1任务概述.95.2需求分析总述.96. 系统的总体设计.96.1游戏初步设计描述.96.2游戏的界面设计.97. 游戏图片的构成思想.108. 游戏玩法介绍.12苏州科技学院毕业论文9. 系统详细设计和编程.129.1各个代码之间的关系.129.2装载图片.139.3按键处理:.149.4事件处理小模块.169.5判断游戏状态.1910.系统测试.1910.1功能测试.1910.2测试总结.20总 结.21致 谢.22参 考 文 献.23附录 A SNAKE 代码 .24附录 B SNAKEVIEW 代码.27附录 C TILEVIEW 代码.46附录 D R.JAVA 代码.52附录 E 外文参考文献(译文).54附录 F 外文参考文献(原文).59苏州科技学院毕业论文11.1. 绪论绪论1.11.1前言前言随着科技的进步以及 3G 的逐步普及,手机的越来越广泛的使用,使得随手机产生的一个重要部分-手机操作系统也发展的越来越快,同时移动技术开发越来越成为 IT 技术的重要部分,而手机操作系统的争夺正成为众多 IT 巨头的竞争重点。Google 开发的手机操作系统 android 刚提出一年多来就受到了广泛的关注,有望在手机智能操作系统(甚至有的厂家提出基于 android 系统的上网本)占据一席之地,在国内,目前中国移动、联想等公司都在积极推出基于android 系统的手机。Android 是 Google 开发的基于 Linux 平台的开源手机操作系统。它包括操作系统、用户界面和应用程序 移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍。Google 在 Android 手机软件使用的并不是常规的 C/C+开发而是更高层的 Java 语言。而 Android 系统的游戏设计以及开发也是 android 开发的一个重要方面随着 android 系统的不断成熟,世界各地的游戏爱好者们便不断创造出各种各样的 android 相关软件,基于 android 的小游戏也是层出不穷。1.21.2主要工作内容主要工作内容本文开发了一个 android 小游戏,使 android 的优点能被广泛使用,希望将来使用 android 技术创造出更多能使 android 手机用户喜欢的游戏。开发一个面向 android 手机使用用户的游戏,因本人水平有限,所以就编写了一个最简单的游戏贪吃蛇。希望用户在玩游戏的时候能锻炼自己的反应能力。2.2. 开发工具介绍开发工具介绍2.12.1AndroidAndroid 的特性的特性a) 程序程序框架可重用及可复写组件组成b) 针对移动设备优化过的 Dalvik 虚拟机苏州科技学院毕业论文2c) 整合浏览器, 该浏览器基于开源的 WebKit 引擎开发d) 提供了优化过得图形系统, 该系统由一个自定义的 2D 图形库; 一个遵循OpenGL ES 1.0 标准(硬件加速)的 3D 图形库组成e) 使用 SQLite 来实现结构化数据的存储f) 媒体方面对一些通用的 audio, video, 和图片格式提供支持(MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)g) GSM 技术(GSM(Global System for Mobile Communications,全球移动通讯系统)俗称全球通,由欧洲开发的数字移动电话网络标准,它的开发目的是让全球各地共同使用一个移动电话网络标准,让用户使用一部手机就能行遍全球。)(依赖硬件)h) 蓝牙, EDGE, 3G 和 WiFi(依赖硬件)i) Camera, GPS, 指南针, 和加速计 (依赖硬件)j) 包括一个设备模拟器, 调适工具, 内存和效率调优工具和一 Eclipse 的插件2.22.2AndroidAndroid 的结构的结构android 的系统架构和其操作系统一样,采用了分层的架构。从架构图看,android 分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和 linux 核心层。苏州科技学院毕业论文32.32.3应用程序应用程序Android 会同一系列核心应用程序包一起发布,该应用程序包包括 email客户端,SMS 短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用 JAVA 语言编写的。2.42.4应用程序框架应用程序框架开发人员也可以完全访问核心应用程序所使用的 API 框架。该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。隐藏在每个应用后面的是一系列的服务和系统, 其中包括:苏州科技学院毕业论文4a)丰富而又可扩展的视图(Views),可以用来构建应用程序, 它包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons), 甚至可嵌入的 web浏览器。b)资源管理器(Resource Manager)提供 非代码资源的访问,如本地字符串,图形,和布局文件( layout files )。c)通知管理器 (Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息。d)活动管理器( Activity Manager) 用来管理应用程序生命周期并提供常用的导航回退 gon 功能。2.52.5库库Android 包含一些 C/C+库,这些库能被 Android 系统中不同的组件使用。它们通过 Android 应用程序框架为开发者提供服务。以下是一些核心库:a) 系统 C 库 - 一个从 BSD 继承来的标准 C 系统函数库( libc ), 它是专门为基于 embedded linux 的设备定制的。b) 媒体库 - 基于 PacketVideo OpenCORE;该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括 MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 。c) Surface Manager - 对显示子系统的管理,并且为多个应用程序提 供了 2D 和 3D 图层的无缝融合。d) LibWebCore - 一个最新的 web 浏览器引擎用,支持 Android 浏览器和一个可嵌入的 web 视图。e) SGL - 底层的 2D 图形引擎f) 3D libraries - 基于 OpenGL ES 1.0 APIs 实现;该库可以使用硬件 3D加速(如果可用)或者使用高度优化的 3D 软加速。g) FreeType -位图(bitmap)和矢量(vector)字体显示。h) SQLite - 一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。2.62.6AndroidAndroid 运行时运行时苏州科技学院毕业论文5Android 包括了一个核心库,该核心库提供了 JAVA 编程语言核心库的大多数功能。每一个 Android 应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik 虚拟机实例。Dalvik 被设计成一个设备可以同时高效地运行多个虚拟系统。 Dalvik 虚拟机执行(.dex)的 Dalvik 可执行文件,该格式文件针对小内存使用做了优化。同时虚拟机是基于寄存器的,所有的类都经由 JAVA 编译器编译,然后通过 SDK 中 的 “dx” 工具转化成.dex 格式由虚拟机执行。Dalvik 虚拟机依赖于 linux 内核的一些功能,比如线程机制和底层内存管理机制。2.72.7LinuxLinux 内核内核Android 的核心系统服务依赖于 Linux 2.6 内核,如安全性,内存管理,进程管理, 网络协议栈和驱动模型。 Linux 内核也同时作为硬件和软件栈之间的抽象层。3.3. 开发工具的安装开发工具的安装3.13.1安装安装 sdksdk3.1.13.1.1 下载下载 sdksdk网址为:http:/ 本机开发环境配置介绍本机开发环境配置介绍操作系统: Windows XP 开发环境 :Eclipse 3.4.2 , Android 开发工具插件(可选) , JDK5.0或者 JDK6.0(仅有 JRE 是不够的)3.1.33.1.3 安装安装 sdksdk下载好 SDK 包后,将 zip 文件解压缩至合适的地方。在下文中,我们默认你的 SDK 安装目录为$SDK_ROOT 你可以选择将$SDK_ROOT/tools 加入到你的路径中 Windows 下,右键点击【我的电脑】 ,选择【属性】 ,在【高级】页中,点苏州科技学院毕业论文6击【环境变量】按键,在弹出的对话框中双击“系统变量”中的变量“Path” ,将$SDK/tools 的完全路径加入其中。 通过将$SDK/tools 加入系统路径,在运行 adb 和其它一些命令行工具时就不需要键入完全路径名了。需要注意到是,当你升级了 SDK 后,如果安装路径有变动的话,不要忘记了更新你的 PATH 变量的设置,将其指向变动后的路径。 3.23.2安装安装 EclipseEclipse 插件(插件(ADTADT)因为我选择 Eclipse 作为 Android 的开发环境,所以必须安装一个专门为Android 定制的插件:Android Development Tools(ADT),ADT 插件集成了对Android 工程和工具的支持,它包含了大量功能强大的扩展,使得创建、运行、调试 Android 程序更简单更快捷。 为了下载和安装 ADT 插件,按照下面的步骤设置 Eclipse 的远程更新站点:a)启动 Eclipse,依次选择 Help Software Updates Find and Install.b)在弹出的窗口中,选择 Search for new features to install,然后点击Nextc)点击 New Remote Sited)在弹出的对话框中,为远程站点输入一个自定义的名字(例如:Android Plugin),然后输入下面的内容作为其默认的 URL:然后点击 OKhttp:/dl- Search Results 对话框中,选中 Android Plugin Eclipse Integration Android Development Tools,然后点击 Nextg)阅读许可协议,然后选择 Accept terms of the license agreement,点击 Nexth)点击 Finishi)ADT 插件没有 signed,在安装过程中会弹出确认窗口,你只需要点击 Install All 就可以了苏州科技学院毕业论文7j)重启 Eclipsek)重启后,在 Eclipse 的 Preferences 中指定 SDK 的路径(1) 选择 Window Preferences.打开 Preference 的面板。(Mac OS X:Eclipse Preferences)(2) 在左侧的面板中选择 Android(3) 在主面板中,点击 Browse.定位到 SDK 的目录(4) 点击 Apply,然后点击 OKl)更新 ADT 插件按照下面的步骤将你的 ADT 插件升级到最新版本:(1) 选择 Help Software Updates Find and Install.(2) 选择 Search for updates of the currently installed features,然后点击Finish(3) 如果 ADT 插件有任何更新,选择并且安装另外的更新方式:(1)选择 Help Software Updates Manage Configuration(2)在其中找到 Android Development Tools 并选中(3)在 Available Tasks 下选择 Scan for Updates4.4. 在在 EclipseEclipse 上开发上开发 androidandroid 应用程序应用程序要开始在 Eclipse 上开发 Android 应用程序,首先需要创建一个 Android工程并且设置好启动配置项。然后你就可以开始编写、运行和调试你的应用程序了。4.14.1创建创建 androidandroid 工程工程ADT 插件提供了一个创建新工程的向导以使你能够快速的创建一个新的Eclipse 工程或者为现有代码创建一个新工程。按照以下步骤来创建一个工程:苏州科技学院毕业论文8(1) 选择 File New Project(2) 选择 Android Android Project,然后点击 Next在 Content 中选择 Project 选择 Create new project in workspace 以创建一个新的工程键入工程的名字,你程序的名称,base package 的名字,Activity class 的名字来创建一个 stub .java 文件(3) 选择 Create project from existing source 从现有代码创建一个工程。通过这种方式,你可以编译运行 SDK 里面 sample 中的应用程序。sample 应用程序在 SDK 安装目录下的 samples/中找到包含有现有代码的路径并点击 OK。如果路径中含有一个有效的 Android 的manifest file,ADT 插件就会加载包名,程序名,activity 名ADT 插件会根据你的工程的类型创建以下合适的文件夹和文件:src/文件夹包含 stub .java activity fileres/文件夹包含你的资源文AndroidManifest.xml 是你工程的 manifest(4) 点击 Finish 4.24.2创建启动配置创建启动配置要想在 Eclipse 下运行并调试你的程序,你需要先创建启动配置。启动配置中指定了要启动的工程,要用的模拟器选项等等。 要给程序创建启动配置,按照如下步骤:(1)选择 Run Open Run Dialog. 或者 Run Open Debug Dialog.(2)在左侧工程类型的列表中,右键点击 Android Application 并且选择 New(3)给你的配置键入一个名字(4)在 Android 的 Tab 页上,找到用于开始的工程和 Activity(5)在模拟器 Tab 页上,设置需要的屏幕和网络属性,和其他一些模拟器启动选项(6)在 Common 的 Tab 页上,你可以对一些附加的选项进行设置(7)点击 Apply 保存启动配置,或者,点击 Run 或者 Debug4.34.3 运行和调试程序运行和调试程序苏州科技学院毕业论文9当你建立工程,并为你的程序设置好启动配置后,按照下面的步骤你就可以运行或者调试你的程序了。在 Eclipse 的主菜单上选择 Run Run 或者 Run Debug,来运行或者调试可用的启动配置需要注意的是可用的启动配置默认的是最近一次在启动配置中选择的那一个。并不一定是对应着你在 Eclipse 打开的那个程序。 要设置或者更改启动配置,你可以通过运行配置管理器即点击 Run Open Run Dialog. 或者 Run Open Debug Dialog. 运行或者调试应用程序会引发以下的动作 启动模拟器编译工程,并将程序安装在模拟器上Run 启动程序Debug 启动程序进入“等待调试器”模式,然后打开调试视图并连接至Eclipse 的 Java 调试器。5.5. 需求分析需求分析5.15.1任务概述任务概述手机游戏形形色色,种类繁多,是各个手机用户手机中不可缺少的一个重要组成部分.玩游戏可以锻炼人的判断能力,反应能力, 开发一个面向 android 手机用户的手机小游戏,希望能在工作,学习之余给提供大家一个休闲游戏。5.25.2需求分析总述需求分析总述在游戏之余,锻炼手机用户的反应能力和判断能力,以及手机用户对突发事件的处理能力。让玩家适应越来越快的节奏。增进用户操作及手眼协调能力.需要用户耐心的操作,培养用户的观察力;培养耐心、专注力;从越来越快的节奏,越来越多的障碍中取得胜利,获得肯定,同时建立对自我的信心。6.6. 系统的总体设计系统的总体设计6.16.1游戏初步设计描述游戏初步设计描述和通常的贪吃蛇游戏一样,本次游戏设计是通过控制小蛇在花园中游走寻苏州科技学院毕业论文10找苹果,注意,每吃掉一个苹果,小蛇身体不但会变的更长,还会移动的更敏捷,一旦撞上四周的墙或是碰到自己就会结束这次游戏。6.26.2游戏的界面设计游戏的界面设计苏州科技学院毕业论文117.7. 游戏图片的构成思想游戏图片的构成思想在整个游戏界面的四周一个内用绿色的图标占满,表示是整个游戏的墙,也就是禁区,如下图:用红色和黄色的图片来构成蛇的身体,头部为黄色,其他的都是红色,如下图:苏州科技学院毕业论文12苹果用黄色图片表示:8.8. 游戏玩法介绍游戏玩法介绍通过控制小蛇在花园中游走寻找苹果,注意,每吃掉一个苹果,小蛇身体苏州科技学院毕业论文13不但会变的更长,还会移动的更敏捷,一旦撞上四周的墙或是碰到自己就会结束这次游戏。 9.9. 系统详细设计和编程系统详细设计和编程9.19.1各个代码之间的关系各个代码之间的关系9.29.2装载图片装载图片首先用绿色图片做出游戏的框架,代码如下: private void updateWalls() for (int x = 0; x mXTileCount; x+) setTile(GREEN_STAR, x, 0); setTile(GREEN_STAR, x, mYTileCount - 1); for (int y = 1; y mYTileCount - 1; y+) setTile(GREEN_STAR, 0, y); setTile(GREEN_STAR, mXTileCount - 1, y); 苏州科技学院毕业论文14 用黄色图片做出苹果,代码如下: private void updateApples() for (Coordinate c : mAppleList) setTile(YELLOW_STAR, c.x, c.y); 用黄色和红色图片做出蛇的身体,其中黄色的图片做蛇头,红色的做蛇的身体,代码如下:if (!growSnake) mSnakeTrail.remove(mSnakeTrail.size() - 1); int index = 0; for (Coordinate c : mSnakeTrail) if (index = 0) setTile(YELLOW_STAR, c.x, c.y); else setTile(RED_STAR, c.x, c.y); index+; 9.39.3按键处理:按键处理: 游戏在载入模拟器后按向上键开始运行的,同时设置一些参数,响应手机侧按键的动作,代码如下: public boolean onKeyDown(int keyCode, KeyEvent msg) if (keyCode = KeyEvent.KEYCODE_DPAD_UP) if (mMode = READY | mMode = LOSE) 苏州科技学院毕业论文15 initNewGame(); setMode(RUNNING); update(); return (true); if (mMode = PAUSE) setMode(RUNNING); update(); return (true); if (mDirection != SOUTH) mNextDirection = NORTH; return (true); if (keyCode = KeyEvent.KEYCODE_DPAD_DOWN) if (mDirection != NORTH) mNextDirection = SOUTH; return (true); if (keyCode = KeyEvent.KEYCODE_DPAD_LEFT) if (mDirection != EAST) mNextDirection = WEST; 苏州科技学院毕业论文16 return (true); if (keyCode = KeyEvent.KEYCODE_DPAD_RIGHT) if (mDirection != WEST) mNextDirection = EAST; return (true); return super.onKeyDown(keyCode, msg); 9.49.4事件处理小模块事件处理小模块首先是游戏开始状态,加入一条向东行驶正好转向北边的小蛇: mSnakeTrail.add(new Coordinate(7, 7); mSnakeTrail.add(new Coordinate(6, 7); mSnakeTrail.add(new Coordinate(5, 7); mSnakeTrail.add(new Coordinate(4, 7); mSnakeTrail.add(new Coordinate(3, 7); mSnakeTrail.add(new Coordinate(2, 7); mNextDirection = NORTH;刷出两个苹果: addRandomApple(); addRandomApple(); 根据按键信息,来修改蛇头的运动方位的模块: Coordinate head = mSnakeTrail.get(0);苏州科技学院毕业论文17 Coordinate newHead = new Coordinate(1, 1); mDirection = mNextDirection; switch (mDirection) case EAST: newHead = new Coordinate(head.x + 1, head.y); break; case WEST: newHead = new Coordinate(head.x - 1, head.y); break; case NORTH: newHead = new Coordinate(head.x, head.y - 1); break; case SOUTH: newHead = new Coordinate(head.x, head.y + 1); break; 检测是否自己撞到自己的模块: int snakelength = mSnakeTrail.size(); for (int snakeindex = 0; snakeindex snakelength; snakeindex+) Coordinate c = mSnakeTrail.get(snakeindex);苏州科技学院毕业论文18 if (c.equals(newHead) setMode(LOSE); return; 检测是否吃到苹果的模块: int applecount = mAppleList.size(); for (int appleindex = 0; appleindex run configuration .打开运行配置对话框,在右边的树中选择Android Application,单击左上角的新建按钮,苏州科技学院毕业论文20单击新建会创建一个新的Android应用程序运行配置信息,在对话狂的右侧的Android tab页中设置如下 在target tab页中选中刚才在命令提示符中新建的avd,如下设置好了单击对话框右下侧的“Apply”按钮。这样一个新的针对hello项目的运行配置就新建设置完成了,单击对话框右下角的“Run”按钮就可以运行此项目中的应用程序了。苏州科技学院毕业论文21苏州科技学院毕业论文2210.2测试总结测试总结在运行游戏的时候发现虚拟器不能正常启动。不过根据调试发现是android sdk 升级所引起的, Android 1.5 运行应用程序的方式与之前版本,即 Android 1.1,不同。在运行之前需要新建一个 avd(Android 虚拟设备) ,avd 制定了模拟器运行的配置信息。 打开命令提示符窗口,执行如下命令: android create avd -n test -t 2 在运行此命令后,命令提示符会问一些问题,直接按 Enter 接受它的默认设置就可以了。苏州科技学院毕业论文23总 结本程序设计实现了基于 android 系统的小游戏的开发,具有一定的可玩性。经过了细心的调试和排错解决了绝大部分的问题。 但是我的水平实在有限,很多专业术语都不能熟悉的利用,在参考了一些前辈们的游戏代码后,写出了自己的代码,但是后面注释的地方很多都没有翻译的好.这款游戏作为我的毕业设计,是本人目前做过的最有意义的程序,在这期间遇到的最主要的问题就是 android sdk 的安装以及 Eclipse 插件安装调试。以及程序能在虚拟器上很好的运行起来。所以,论文中关于这方面的篇幅比较多。通过这次毕业设计,使自己又学会了一种编程软件的使用,以及 android编程语言的简单使用。因为其各个模块间的联系十分紧密,代码重复执行率高,当经过无数次的调试、修改后,能最终看到成品,有无比自豪的心情。苏州科技学院毕业论文24致 谢时间过的真快,为其半年的毕业设计已经基本完成,这是我在大学四年最难忘的一次设计训练。在设计的各个阶段,得到了老师,同学和朋友们的关心和帮助,在大学的最后几个月的时间里,我能够完成此次毕业设计,除了我自己的努力外,离不开那些帮助过我的老师同学们,给我帮助的人太多太多,令我感动的时刻数不胜数,谢谢大家。首先,我要衷心的感谢我的指导老师,周中臣老师对我论文设计的支持勉励,在写论文的半年时间里面,周老师在我的毕业设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新兴的技术。然后我要感谢和我一起做毕业设计的同学,虽然大家课题不同,但是遇到疑难,大家都会一起讨论,商量,你们的意见给了我很大的帮助。最后我要感谢 android 群里面的朋友们,在你们的帮助下,我从不知道什么是 android 到慢慢的学会了 android,完成了毕业设计。谢谢你们大家。王祯2009 年 6 月 7 日苏州科技学院毕业论文25参 考 文 献1:JAVA 2 游戏编程 清华大学出版社 ISBN 7-302-11293-2 Thomas Petchel (著) 晏利斌 孙淑敏 绍荣 (翻译)2:JAVA 编程思想 机械工业出版社 ISBN 7-111-10441-2 Bruce Eckel (著) 侯捷 (翻译)3:游戏设计原理与实践 电子工业出版社 ISBN 7-5053-9212-3 Richard Rouse (著) 尤晓东 (翻译)4:JAVA 游戏高级编程 清华大学出版社 ISBN 7-302-11083-2 David Wallace Croft ( 著 ) 彭晖 ( 翻译 )5:J2ME 应用教程 清华大学出版社 ISBN 978-7-81082-898-7陈旭东, 徐保民, 张宏勋编著6:android 官方网站 :http:/ 中文网:http:/ 中文论坛:http:/www.chinaup.org/bbs/9: http:/ 开发社区 :http:/ A snake 代码import android.app.Activity;import android.os.Bundle;import android.view.Window;import android.widget.TextView;/* * *这个一个每个人都喜欢的简单的小游戏 Snake 是游戏的实现类,通过控制*小蛇在花园中游走寻找苹果,注意,每吃掉一个苹果,小蛇身体不但会变*的更长,还会移动的更敏捷,一旦撞上四周的墙或是碰到自己就会结束这*次游戏。 */public class Snake extends Activity private SnakeView mSnakeView; private static String ICICLE_KEY = snake-view; /* * 当活动第一次创建时响应. 关闭标题栏, 创建 * 条件满足, 启动 SnakeView. * */ Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);苏州科技学院毕业论文27 / No Title bar requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.snake_layout); mSnakeView = (SnakeView) findViewById(R.id.snake); mSnakeView.setTextView(TextView) findViewById(R.id.text); if (savedInstanceState = null) / 我们刚刚运行 创建一个新的游戏 mSnakeView.setMode(SnakeView.READY); else /我们已经重建 Bundle map = savedInstanceState.getBundle(ICICLE_KEY); if (map != null) mSnakeView.restoreState(map); else mSnakeView.setMode(SnakeView.PAUSE); Override protected void onPause() super.onPause(); / 暂停游戏的动作 mSnakeView.setMode(SnakeView.PAUSE);苏州科技学院毕业论文28 Override public void onSaveInstanceState(Bundle outState) /存储游戏状态 outState.putBundle(ICICLE_KEY, mSnakeView.saveState(); 苏州科技学院毕业论文29附录 B SnakeView 代码package com.example.android.snake;import java.util.ArrayList;import java.util.Random;import android.content.Context;import android.content.res.Resources;import android.os.Handler;import android.os.Message;import android.util.AttributeSet;import android.os.Bundle;import android.util.Log;import android.view.KeyEvent;import android.view.View;import android.widget.TextView;/* * SnakeView: 执行一个简单的贪吃蛇游戏 * * */public class SnakeView extends TileView private static final String TAG = SnakeView; /* * 现在的模式: 准备运行, 运行中, 或者你已经准备好 * lost. static 最终决定用来代替一个关于性能的类型 * 推断.苏州科技学院毕业论文30 */ private int mMode = READY; public static final int PAUSE = 0; public static final int READY = 1; public static final int RUNNING = 2; public static final int LOSE = 3; /* * 蛇面对的当前方向 */ private int mDirection = NORTH; private int mNextDirection = NORTH; private static final int NORTH = 1; private static final int SOUTH = 2; private static final int EAST = 3; private static final int WEST = 4; /* *将要装进 TileView class 的 drawables 的标签 */ private static final int RED_STAR = 1; private static final int YELLOW_STAR = 2; private static final int GREEN_STAR = 3; /* *计分:用来计算蛇运动过程中吃的苹果: 绘制 * 随着蛇运动吃苹果越来越多,他运动的速度也越来越快. *占领. */苏州科技学院毕业论文31 private long mScore = 0; private long mMoveDelay = 600; /* * 最后移动: 蛇最后移动的具体时间, 使用它 * 确定是否在 mMoveDelay 上移动一步. */ private long mLastMove; /* * mStatusText: 显示一些运行状态给用户 */ private TextView mStatusText; /* * mSnakeTrail: 一系列坐标用来形成蛇的身体 * mAppleList:蛇贪吃的美味苹果刷新在一些秘密的地方. */ private ArrayList mSnakeTrail = new ArrayList(); private ArrayList mAppleList = new ArrayList(); /* * 在蛇运动过程中随即刷出苹果 */ private static final Random RNG = new Random(); /* *做一些简单的处理让动画发生动作苏州科技学院毕业论文32 *为我们定下目标,我们可以使用 sleep() *在稍后的数据更新/作废的功能. */ private RefreshHandler mRedrawHandler = new RefreshHandler(); class RefreshHandler extends Handler Override public void handleMessage(Message msg) SnakeView.this.update(); SnakeView.this.invalidate(); public void sleep(long delayMillis) this.removeMessages(0); sendMessageDelayed(obtainMessage(0), delayMillis); ; /* *在膨胀的基础上在 XML 构造一个 SnakeView * * param 环境 * param 装饰 */ public SnakeView(Context context, AttributeSet attrs) super(context, attrs); initSnakeView();苏州科技学院毕业论文33 public SnakeView(Context context, AttributeSet attrs, 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); loadTile(GREEN_STAR, r.getDrawable(R.drawable.greenstar); private void initNewGame() mSnakeTrail.clear(); mAppleList.clear(); / 现在我们要加载一条向东行驶正好转向北边的小蛇 mSnakeTrail.add(new Coordinate(7, 7);苏州科技学院毕业论文34 mSnakeTrail.add(new Coordinate(6, 7); mSnakeTrail.add(new Coordinate(5, 7); mSnakeTrail.add(new Coordinate(4, 7); mSnakeTrail.add(new Coordinate(3, 7); mSnakeTrail.add(new Coordinate(2, 7); mNextDirection = NORTH; / 刷出两个苹果 addRandomApple(); addRandomApple(); mMoveDelay = 600; mScore = 0; /* *根据 ArrayList 中的坐标,我们在拉平它们,纳入一系列数据之前,我们可以到地图的平坦和储存。 * param cvec :一个数组的坐标 * return : 一个简单的数组包含的 X / Y 坐标值 * 比如 x1,y1,x2,y2,x3,y3. */ private int coordArrayListToArray(ArrayList cvec) int count = cvec.size(); int rawArray = new intcount * 2; for (int index = 0; index count; index+) Coordinate c = cvec.get(index);苏州科技学院毕业论文35 rawArray2 * index = c.x; rawArray2 * index + 1 = c.y; return rawArray; /* * 保存游戏数据,以便当游戏处于后台,比赛过程中玩家被杀害,用户不会丢失数据 * return 一个关于视图状态的数据包 */ public Bundle saveState() Bundle map = new Bundle(); map.putIntArray(mAppleList, coordArrayListToArray(mAppleList); map.putInt(mDirection, Integer.valueOf(mDirection); map.putInt(mNextDirection, Integer.valueOf(mNextDirection); map.putLong(mMoveDelay, Long.valueOf(mMoveDelay); map.putLong(mScore, Long.valueOf(mScore); map.putIntArray(mSnakeTrail, coordArrayListToArray(mSnakeTrail); return map; /* * 鉴于一系列被拉平的坐标组.我们重建他们。放入一个矩阵的坐标苏州科技学院毕业论文36 * * param rawArray : x1,y1,x2,y2,. * return a ArrayList of Coordinates */ private ArrayList coordArrayToArrayList(int rawArray) ArrayList coordArrayList = new ArrayList(); int coordCount = rawArray.length; for (int index = 0; index coordCount; index += 2) Coordinate c = new Coordinate(rawArrayindex, rawArrayindex + 1); coordArrayList.add(c); return coordArrayList; /* *恢复比赛状态,如果我们的进程正在重新启动 * param 储存一个关于游戏的数据包 */ public void restoreState(Bundle icicle) setMode(PAUSE); mAppleList = coordArrayToArrayList(icicle.getIntArray(mAppleList); mDirection = icicle.getInt(mDirection); mNextDirection = icicle.getInt(mNextDirection);苏州科技学院毕业论文37 mMoveDelay = icicle.getLong(mMoveDelay); mScore = icicle.getLong(mScore); mSnakeTrail = coordArrayToArrayList(icicle.getIntArray(mSnakeTrail); /* * 处理游戏中的按键事件.在 DPAD 上提供最新的贪吃蛇运动方向。 忽略蛇立即回头的事件 * * (non-Javadoc) * * see android.view.View#onKeyDown(int, android.os.KeyEvent) */ Override public boolean onKeyDown(int keyCode, KeyEvent msg) if (keyCode = KeyEvent.KEYCODE_DPAD_UP) if (mMode = READY | mMode = LOSE) /* *在游戏开始的时候, 或者在以前游戏结束的时候,我们必须开始一个新的游戏 */ initNewGame(); setMode(RUNNING); update(); return (true); 苏州科技学院毕业论文38 if (mMode = PAUSE) /* *如果游戏只是暂停了下,我们在暂停的时候继续开始 */ setMode(RUNNING); update(); return (true); if (mDirection != SOUTH) mNextDirection = NORTH; return (true); if (keyCode = KeyEvent.KEYCODE_DPAD_DOWN) if (mDirection != NORTH) mNextDirection = SOUTH; return (true); if (keyCode = KeyEvent.KEYCODE_DPAD_LEFT) if (mDirection != EAST) mNextDirection = WEST; return (true); 苏州科技学院毕业论文39 if (keyCode = KeyEvent.KEYCODE_DPAD_RIGHT) if (mDirection != WEST) mNextDirection = EAST; return (true); return super.onKeyDown(keyCode, msg); /* * 设置文本视图用于提供游戏信息给用户 (例如 Game Over. * * param newView */ public void setTextView(TextView newView) mStatusText = newView; /* * 更新游戏现在的状态(运行,暂停,或者类似的情况)用清晰的文本显示 * * param newMode */ public void setMode(int newMode) int ol
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业管理 > 营销创新


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!