




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
上海电力学院本科毕业设计(论文) 题目: 基于Android的数独库程序设计 院系: 计算机与信息工程学院 专业年级: 2008电子科学与技术 学生姓名: 黄智勇 学号: 20082642 指导教师: 金一鸣 2012年06月11日基于Android的数独库程序的设计摘要本文主要阐述以面向对象的程序开发语言eclipse为开发工具, 基于智能手机Android之上设计一个数独游戏。论文通过五个大块对android以及数独游戏进行阐述。第一部分大致介绍了设计数独游戏的目的、起源及发展过程。第二部分、第三部分是对android系统的概述,通过对android平台架构及特性、操作系统和开发环境的介绍对android的整体有了大致的了解,有利于下一步的游戏设计。第四部分是对数独库整个项目的设计方法以及算法进行分析对之后的程序界面及逻辑设计打下基础。最后一部分介绍了数独程序的启动界面设计、游戏部分2D图形设计、多媒体设计和存储本地数据设计。通过分块介绍清晰地说明了整个数独程序设计的流程以及所用方法。关键词 android2.1 数独库,游戏逻辑及算法,游戏界面The design and development of Sudoku based on AndroidAbstract This article described the object oriented programming language eclipse for development tools, Based on intelligent mobile phone based on Android design a Sudoku game. This paper through the five large and elaborate on Android Sudoku game. The first part briefly introduces design Sudoku purpose, origin and development. The second part, the third part is on the Android system, based on Android platform architecture and characteristics, operating system and development environment are introduced to the android as a whole have a general understanding, is helpful for the next step of the game design. The fourth part is the logarithm of the base of the entire project design method and algorithm analysis on after the program interface and logic design foundation. The last part introduces Sudoku program interface design, graphic design, multimedia2D game part design and storing local data design. By the block introduction illustrates clearly the entire Sudoku program design process and using method.Key words: Android2.1Sudoku library, the game logic and algorithm, the game interface目录1. 引言11.1 研究背景11.2 课题来源11.3 国内外研究现状22. Android系统概述42.1 Android的平台架构及特性42.1.1 Android平台特性42.1.2 Android平台架构52.2 Android应用组件72.2.1 Activity72.2.2 Service82.2.3 Broadcast Receiver82.2.4 Content Provider82.2.5 View92.2.6 Intent93. Android开发平台103.1 操作系统103.2 开发环境103.3 构建快103.3.1 活动103.3.2 意图103.3.3 服务113.3.4 内容提供者114. 项目需求与结构分析124.1 项目简介及设计方法分析124.1.1 项目简介124.1.2 设计方法124.1.3 算法分析134.2 创建项目及项目结构分析134.2.1 创建项目134.2.2 项目结构分析145. 数独库程序设计155.1 程序设计155.1.1 设计用户界面155.1.2 绘制数独库游戏部分2D图形225.1.3 多媒体设计265.1.4 存储本地数据设计275.2 游戏的测试与优化改进296. 结论30谢辞31参考文献321. 引言1.1 研究背景在生活中有许多的游戏,但是游戏不同,它也会给玩家带来不同的感受和生活理念。游戏是日常生活的一个必不可少的娱乐项目,也带动了游戏相关产业市场的发展。游戏平台是经过从游戏机到电视游戏,然后从到pc游戏,到手机游戏,中间经历了很多的技术的更新和变革。但随着新技术的发展和生活水平质量的提高,手机开始逐渐变为普及,因为手机是非常小巧便捷的,而且方便的特性成为日常生活中必备通讯工具。而基于手机平台的游戏也就拥有的市场空间是巨大的,也因3g的开通和应用,手机游戏必然会迎来新的一轮游戏热潮!11.2 课题来源现在的移动电话是小型的计算机,它的处理能力与台式机的标准处理能力相比很有限,但是足够运行一个小型的游戏。现在的手机的一个特性就是它们还是网络计算机,能够高速发送和接收数字数据。除了语音数据以外,它们还可以发送和接收其它类型的数据。所以这样的网络游戏也可以在手机上实现。短信类游戏就好像“虚拟宠物”那样。短信游戏是通过玩家和游戏服务商通过短信中的文字的内容来交流,达到进行游戏的目的的一种文字游戏。 由于短信游戏的整个游戏过程都是通过文字来表达,造成短信游戏的娱乐性较差。但是短信游戏却是兼容性最好的手机游戏之一。只要您的手机可以发短信,您就可以畅快的享受短信游戏给您带来的快乐了。图形类游戏更接近常说的“电视游戏”,玩家通过动画的形式来发展情节进行游戏。由于游戏采用了更为直观且更为精美的画面直接表现,因此图形类游戏的游戏性和代入感往往较文字类游戏高。因此广受玩家们的欢迎。嵌入式游戏是一种将游戏程序预先固化在手机的芯片中的游戏。由于这种游戏的所有数据都是预先固化在手机芯片中的,因此这种游戏是无法进行任何修改的。也就是说,您不能更换其它游戏的,只能玩您手机中已经存在的娱乐游戏,而且您也不能将它们删除。手机在网络游戏行业在多年的技术经验与运营经验的积累与总结之后,到了2009年迫不及待的需要创新出新的游戏模式和崭新的运营模式来推动手机游戏市场的爆发和发展。其中比较吸引人们的是手机的休闲类的游戏。应该可以说它是与PC网络游戏完全的脱离开了,而且充分发挥了自身的优势手机终端。休闲类的游戏恰巧与之相反,只需要很少的网络流量的网络环境,通过少量多次的游戏形式带给玩家流畅的游戏体验满足玩家瞬间提升的快感,但是同时却很难具有长期的“沉迷”性。本题目是基于Android平台开发的一个小型的程序。其实都差不多,在有JAVA的智能手机上都可以运行。其实手机是生活中不可缺少的工具,这些小游戏可以带给快乐和放松心情。无论什么样手机,想买起来的时候上面就有一些它自带的各种小游戏,其中有一个独特的小游戏也是非常重要的。1.3 国内外研究现状Android 是Google开发的基于Linux平台的开源手机操作系统。它包括操作系统、用户界面和应用程序 移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍。Google与开放手机联盟合作开发了 Android,这个联盟由包括中国移动、摩托罗拉、高通、宏达电和 T-Mobile 在内的 30 多家技术和无线应用的领军企业组成。Google通过与运营商、设备制造商、开发商和其它有关各方结成深层次的合作伙伴关系,希望借助建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统。Android 作为谷歌企业战略的重要组成部分,将进一步推进随时随地为每个人提供信息这一企业目标的实现。发现,全球为数众多的移动电话用户从未使用过任何基于 Android 的电话。谷歌的目标是让(移动通讯)不依赖于设备甚至平台。出于这个目的,Android 将补充,而不会替代谷歌长期以来奉行的移动发展战略:通过与全球各地的手机制造商和移动运营商结成合作伙伴,开发既有用又有吸引力的移动服务,并推广这些产品。、智能手机(Smartphone),具有独立的操作系统,像个人电脑一样支持用户自行安装软件、游戏等第三方服务商提供的程序,并通过此类程序不断对手机的功能进行扩充,同时可通过移动通讯网络来实现无线网络接入。目前,全球多数手机厂商都有智能手机产品,而芬兰诺基亚、美国苹果、加拿大RIM(黑莓)、美国摩托罗拉、中国台湾宏达(htc)更是智能机中的佼佼者。智能手机具有五大特点:1. 具备了无线接入互联网的能力,即要有GSM的支持网络下的GPRS或者是CDMA网络支持下的CDMA 1X或3G网络。2. 人性化,可以根据个人需要扩展机器的功能。3. 它是具有开放性的操作系统,还可以安装非常多的应用程序,使得智能手机的功能可以得到无限的扩展。4. 具有PDA功能,其中包括个人信息管理、日程记事、任务安排、多媒体应用、浏览网页。5.强大的功能,扩展性能强,第三方软件支持多。Android 操作系统版本Android 1.5 “Cupcake” 这是第一个主要版本,发布于 2009 年 5 月.这个升级之后,它的更新给用户带来了新的体验。用户界面得到了极大的改良,并且增添了以下功能。Android 1.6 “Donut” 2009 年 9 月发布。搭载Android 1.6 的 HTC Hero 获得了意想不到的成功。使得原来用许多都没有用过Android的人都对Android非常的关注,并且也让竞争者苹果和微软更加警惕了。Android 2.0/2.1: 2009 年 10 月 26 日,又一个主要版本升级以创纪录的速度放出。这次,大版本升级到了 Android 2.0/2.1 “Eclair.”。Android 2.0.1 SDK 在2009年12月3日发布出来,后来是2010年1月10日发布的2.1 版本。很多围观群众和用户可能会有点奇怪:“Android为什么会被用甜点作为它系统版本的代号?”,其实这个命名方法开始在 Andoird 1.5 发布出来的时候。每一个版本代表的甜点的尺寸就越变越大,然后按照字母的数序:小蛋糕,甜甜圈和松饼。在这之前人们预计 2.2 版本的代号可能是“馅饼”,但这个最终被证明是错误的,“FroYo”(冻酸奶)才是 Android 2.2 这个伴随 Google Nexus One 发布的新版的最新代号。而下一个版本的代号将会是“姜饼”。Android 2.2 “Froyo”: Nexus One 的用户已经开始接受 Android 2.2 “FroYo”的无线更新,其它机型的用户可能会在短时间内获取到这一更新的。这一版本的更新出来会让大量让其它手机用户垂涎三尺。从 Android 的发展旅途中,看到 2003 年 Andy他是一个有远见的人,看到了 2005 年的起步和被 Google 的收购,也看到了系统的进步以及新的机型的快速发布。所有这一切都让人们相信,Android 将会走向世界第一移动操作系统宝座的步伐是势不可挡的。Android 平板电脑也在今年的夏天开始发布以及 Google TV 发布以后(也许还有 Google Music),Android 可能真的会将继续带着人们走向移动设备梦想的彼岸。2. Android系统概述2.1 Android的平台架构及特性Android是一个移动设备的软件平台,是由Linux+Java构成的开源软件,它提供包括SDK、Key Apps、Middleware、Linux Kernel四个部分在内的全套手机软件方案。它开放了基于Linux内核以上的开发工具,从而保证了内容的可移植性和多样性。Android平台为开发应用程序提供了一套很好的框架,可以在这个平台的基础上开发不同的应用程序,也可以开发新的组件供应用程序调用2。Android的系统架构和其它操作系统一样,采用了分层的架构。从架构图看,android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。 Android是以Linux为核心的手机操作平台,作为一款开放式的操作系统,随着Android的快速发展,如今已允许开发者使用多种编程语言来开发Android应用程序,而不再是以前只能使用Java开发Android应用程序的单一局面,因而受到众多开发者的欢迎,成为真正意义上的开放式操作系统。 2.1.1 Android平台特性Android平台有如下特性:应用程序框架支持组建的重建与替换。这在之前的手机操作系统中是很难想象的。这意味着可以把系统中不喜欢的应用程序替换掉,安装自己喜欢的应用程序,例如,打电话应用程序、文件管理器等。Dalvik虚拟机专门为移动设备做了优化。Android应用程序将由Java编写、编译的类文件通过DX工具转换成一种后缀名为.dex的文件来执行。Dalvik虚拟机是基于寄存器的,相对于Java虚拟机速度要快很多内部集成浏览器基于开源的WebKit引擎。有了内置的浏览器,这将意味着WAP应用的时代即将结束,真正的移动互联网时代已经来临,手机是一台“小电脑”可以网上随意遨游。优化的库包括2D和3D图形库,3D图形库基于OpenGL ES1.0.强大的图形库给游戏开发带来福音。3G最为重要的应用莫过于手机上网和手机游戏了。SQLite用作结构化的数据存储。多媒体支持包括常见的音频、视频和静态印象文件格式(如 MPEG4、H.264、MP3、AAC、AMR、JPG、PNG、GIF)。GSM电话(依赖与硬件)。蓝牙(Bluetooth)、EDGE、3G、WiFi(依赖与硬件)。照相机、GPS、指南针和加速计(依赖与硬件)。丰富的开发环境包括设备模拟器、调试工具、内存及性能分析图表和Eclipse集成开发环境插件。Google提供了Android开发包SDK,其中包含了大量的类库和开发工具。并且专门开发了针对Eclipse的可视化开发插件ADT。2.1.2 Android平台架构如图所示的是Android操作系统的体系结构如图中可以看出Android操作系统体系结构分为4层,由上而下依次是应用程序、应用程序框架、核心类库和Linux内核。其中在第三层还包括Android运行时环境。图2-1 Android架构图31. 应用程序Android连同一个核心应用程序包一起发布,该应用程序包包括E-mail客户端、SMS短消息程序、日历、地图、浏览器、联系人管理程序等。所有的应用程序都是用Java编写的。2. 应用程序框架开发者完全可以访问核心应用程序所使用的API框架。该应用程序架构用来建华组件软件的重用,任何一个应用程序都可以发布它的功能块并且任何其他的应用程序都可以使用其发布的功能块(不过得遵循框架的安全性限制)。该应用程序重用机制使得组件可以被用户替换。以下所有的应用程序都有一些列的服务和系统组成,包括:1) 一个可扩展的视图(View)可以用来创建应用程序,包括列表(lists)、网络(grids)、文本框(text boxes)、按钮(buttons),甚至是一个可嵌入的Web浏览器。2)内容管理器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据。3)一个资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串、图形和分层文件(layout files)。4)一个通知管理器(Notification Manager)使得应用程序可以在状态栏中显示客户通知信息。5)一个活动类管理器(Activity Manager)用来管理应用程序生命周期并提供常用的导航回退功能。3. Android程序库Android应用程序框架为开发者提供服务。以下是一些主要的核心库。1)系统C库:一个从BSD继承来的标准C系统函数库(libc),专门为基于Embedded Linux的设备定制。2)媒体库:基于PacketVideo OpenCORE:该哭支持录放,并且可以录制许多流行的音频视频格式,还有静态映像文件包括MPEG4、H.264、MP3、AAC、AMR、JPG、PNG、GIF。3)Surface Manager:对显示子系统的管理,并且为多个应用程序提供2D和3D图层无缝融合。4)LibWebCore:一个最新的Web浏览器引擎,用来支持Android浏览器和一个可嵌入的Web视图。5)SGL:一个内置的2D图形引擎。6)3D libraries:基于OpenGL ES 1.0APIs实现:该哭可以使用硬件3D加速(如果可用)或者使用高度优化的3D软加速。7)FreeType:位图(bitmap)和向量(vectot)字体显示。8)SQLite:一个对于所有应用程序可用、功能强劲的轻型关系型数据库引擎。4. Android运行库Android包括了一个核心库,该核心库提供了Java编程语言核心库的大多数功能。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik是针对同时高效的运行多个VMs来实现。Dalvik虚拟机执行.dex的Dalvik可执行文件,该格式文件针对最小内存使用做了优化。该虚拟机是基于寄存器的,所有的类都经由Java汇编器编译,然后通过SDK中的DX工具转化成.dex格式有虚拟机执行。Dalvik虚拟机依赖于Linux的一些功能,比如线程机制和底层内存管理机制。5. Linux内核Android的核心系统服务依赖于Linux2.6内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型。Linux内核也是同作为硬件和软件堆栈之间的硬件抽象层。2.2 Android应用组件Android应用程序没有统一的入口(例如main()方法),各个应用之间是相互独立的,并且运行在自己的程序当中。根据完成的功能不同,Android划分了四类核心的组件类:Activity、Service、Broadcast Receiver和ContentProvider。相同组件和不同组件之间的导航通过Intent来完成。Android还定义了View类来显示可视化界面,例如菜单、对话框、下来列表等。下面详细介绍各个组件的意义和用法。2.2.1 ActivityActivity是Android组件中最基本也是最为常用的一种组件,在一个Android应用中,一个Activity通常就是一个单独的屏幕。每一个Activity都被实现为一个独立的类,并且继承于Activity这个基类。这个Activity类将会显示由几个Views空间组成的用户接口,并对事件做出响应。大部分的应用都会包含多个屏幕。例如,一个短消息应用程序将会有一个屏幕用于显示联系人列表,第二个屏幕用于写短消息,同时还会有用于浏览旧短消息及进行系统设置的屏幕。每一个这样的屏幕就是一个Activity。通过调用startActivity()方法可以从一个屏幕导航到另一个屏幕,打开Activity的条件被封装在Intent中。当一个新的屏幕打开后,前一个屏幕将会暂停,并保存在堆栈中。用户可以返回到历史堆栈中前一个屏幕。当屏幕不再使用时,还可以从历史堆栈中删除。默认情况下,Android将会保留从主屏幕到每一个应用的运行屏幕。2.2.2 Service一个Service是一种长生命周期的、没有用户界面的程序。比较好的一个例子就是正在从播放列表中播放歌曲的媒体播放器。在一个媒体播放器的应用中,应该会有多个Activity,让使用者可以选择歌曲并播放歌曲。然而,音乐播放这个功能并没有对应的Activity,因为使用者会认为在导航到其它屏幕时音乐应该还在播放。在这个例子中,媒体播放器这个Activity会使用Context.startService()来启动一个Service从而可以在后台保持音乐的播放。同时,系统也将保持这个Service一直执行,直到这个Service运行结束。另外,还可以通过使用Context.bindService()方法连接到一个Service上(如果这个Service还没有运行则将启动它)。当连接到一个Service之后可以进行暂停、重播等操作。2.2.3 Broadcast ReceiverBroadcast Receiver是为了实现系统广播提供的一种组件。例如:可以发出一种广播来检测手机电量的变化,这时候就可以定义一个Broadcast Receiver来接收广播,当手机电量较低时提示用户。2.2.4 Content ProviderAndroid应用程序之间是相互独立的,各个组件运行在不同的进程中,这就意味着数据是不是能共享。通过ContentProvider来实现不同之间数据的共享。Android应用能够将它们的数据保存到文件和SQLite数据库中,甚至是任何有效的设备中。当将应用数据与其它的应用共享时,Content Provider就可以发挥作用了。因为Content Provider类实现了一组标准的方法,能够让其它的应用保存或读取此内容提供器处理的各种数据类型。2.2.5 ViewView是Android中图形用户界面的基类,提供可视化界面的展示。Android的图形展示可分为三层:底层是Activity:Activity上面是Window:Window上面是Views。View又可分为View和ViewGroup。View是基本的控件,例如按钮、单选框、多选框、菜单等;ViewGroup是指布局控制,即用来控制界面中的控件如何布局摆放的。2.2.6 IntentIntent是不同组件之间相互导航的纽带,封装不同组件之间导航查找的条件,在Intent的描述结构中,有两个最重要的不封:动作和动作对应的数据。典型的动作类型有MAIN(Activity的门户)、VIEW、PICK、EDIT等。而动作对应的数据则以URI的进行标示。例如,要查看一个人的联系方式,需要创建一个都工作类型为View的Intent,以及一个表示这个人的URI。3. Android开发平台3.1 操作系统目前只支持XP(32-bit)、Vista(32/64-bit)、Mac OS X 10.4.8或更新版本(x86)、Linux(只在Linux Ubuntu Dapper Drake上面做过测试)。3.2 开发环境Android的上层应用程序是用Java语言开发,同时还需要基于Dalvik虚拟机,所以,Google公司推荐使用主流的Java继承开发环境Eclipse。只有Eclipse还不够,因为是使用Java语言进行开发,还应该有由SUN公司提供的Java SDK(其中包括JRE:Java Runtime Environment)。此外,Android的应用程序开发和Java开发有较大区别的,所以还需要有Google提供的Android SDK。同时,还需要在Eclipse安装ADT,为Android开发提供开发工具的升级或者变更,是Eclipse下开发工具的升级下载的工具。简言之,需要以下软件,才能搭建Android开发环境,从而进行Android应用程序的开发。43.3 构建快在Android SDK中定义的一些对象,其中最为重要的是活动、意图(intent)、服务和内容日供着。下面是对它们的介绍。3.3.1 活动一个活动纪实一个用户界面屏幕。应用程序可以定义一个或多个活动,以处理程序不同阶段中的任务。每个活动都要保存自己的状态,以便以后还原这些状态。3.3.2 意图意图是一种描述具体动作的机制,例如“拍照”、“往家中拨电话”、或“打开仓门” 。在Android中,几乎所有事情都要经历意图这个阶段,所以有很多机会可换或重用很多组件。例如,现在有一个“发送一封电子邮件”的意图。如果应用程序需要发送邮件,就可调用该意图。或者编写一个新的电子邮件应用程序,就可注册一个活动来处理该意图,并用该电子邮件程序替换标准邮件程序。下次尝试发送电子邮件时,会使用新的电子邮件程序,而不是标准的邮件程序。3.3.3 服务服务是在后台运行的任务,无需用户直接与其交互,与UNIX的守护进程类似。例如,假设有一个音乐播放器,可以通过摸个活动来播放因音乐,但是希望即使当用户使用其它程序时,任能继续播放音乐。所以,执行音乐播放的代码应该在某个服务中。之后,另一个活动可能会绑定到该服务上,告诉该服务切换音乐或停止播放。Android内置了许多服务,以及许多可轻松访问这些服务的API。3.3.4 内容提供者内容提供者是封装在自定义API中的一组数据,可以读取该数据和向API中写入数据。这是在应用程序之间共享全局数据的最佳方式。例如,谷歌为联系人程序提供了一个内容提供者。任何要使用联系人信息的应用程序都可共享其中的所有信息,包括姓名、地址、电话号码等。54. 项目需求与结构分析4.1 项目简介及设计方法分析4.1.1 项目简介数独盘面由81个单元格(9行*9列)组成,玩家要试着在这些单元中填入19的数字,使每个数字在每一行,每一列和每一区(3行*3列的部分)中都只出现一次。游戏开始时,部分单元格中已经填入了一些(已知)数字。玩家只需在剩下的单元格中填入数字。一到正确的数独谜题只有唯一的答案。人们通常用纸和笔玩数独游戏,但是计算机玩数独游戏也非常流行。如果用纸和笔玩数独游戏,由于在游戏刚开始时容易出错,所以玩家在出现错误时,必须回退一步或几步并擦除已填入的大部分数字。如果玩Android数独游戏,就可以随时修改单元格中的数字,二不必再清理令人讨厌的橡皮屑。Android数独游戏(如图4-1游戏界面)也会给出一些提示,以减少破解谜题的工作量。一种极端的情况是,Android程序正好给出改密题的答案,但这样对玩家而言就没有任何乐趣了。因此,必须在提示和挑战之间进行析中,让谜题难度适中。图4-1游戏界面4.1.2 设计方法设计用户界面的方法有两种:过程性设计和声明性设计。过程性设计是指用代码设计用户界面。例如,开发一个Swing应用程序时,必须编写Java代码,以创建和操作所用用户界面对象(例如Jframe和JButton)。因此,Swing是过程性。另一方面,声明性设计不涉及任何代码。例如,在设计简单的网页时会使用HTML,HTML是一种基于XML的标记语言,描述期望的网页布局,而不是如何实现该布局。因此,HTML是声明性的。Android同时支持过程性设计和声明性设计,允许开发人员使用任何一风格创建用户界面:即可以几乎全部使用Java代码,也可以几乎全部使用XML描述符。如果查阅任何Android用户界面组件的相关文档,就会看到其中既有java API又有实现同一功能的、相应的声明性XML属性。究竟该使用哪种方法呢?虽然二者都是有效的,但是在做完毕业设计后建议尽可能使用声明性XML语言。与相应的Java代码相比,XML代码往往更加短小易懂,二以后可能开发的Android工具(如GUI设计器)会更好地与XML协作。4.1.3 算法分析通过定义数组,生成随机数字的源数组,随机数字从该数组中产生 。本程序通过使用for语句结合if语句来判断空白处所填入的数字是否符合行、列或宫的要求,使其符合数独库游戏规则,不符合规则则返回错误提示。通过定义变量time使已经尝试过的数字将不会在取到 。主要思想:用二维数组表示数独,将为0的下标用一维数组表示,从小到大依次试探每一个可能的数,填充,若皆不可能,则回退到上一个数从上一个数的可能值+1开始,同时将以后的数重新置为0,特别注意的是,回退后求得解后无需再返回上一层,直接结束即可。4.2 创建项目及项目结构分析4.2.1 创建项目首先使用Eclipse插件创建一个简单的Android程序。在创建新项目时需要输入以下信息:Project name(项目名称): SudokuBuild Target(需要的版本): Android 2.1Application name(应用名称): SudokuPackage name(包名): org.example.sudokuCreate Activity(java项目名称): Sudoku当然,在实际程序中,可以定义自己的名称。其中软件包名称尤为重要。系统中的每个应用程序都必须具有唯一的软件包名。因为在很多地方都会用到软件包名,所以一旦设定好软件包名就不要随意修改它,否则将会引起一些小麻烦。4.2.2 项目结构分析所有包及源文件(.Java)图4-2程序源文件所有的资源(如程序图标drawable,布局文件,常量等)图4-3程序布局文件包含了文件中所有使用的Activity、service、receiver图4-4 activity活动5. 数独库程序设计5.1 程序设计程序设计分为2大板块,一个是启动界面的设计,另一个是数独游戏部分2D绘制。5.1.1 设计用户界面在创建启动界面中,分为5个部分,分别是启动界面整体布局、使用替代资源、实现About对话框、添加菜单以及添加设置.。在实际程序中,可以定义自己的名称。其中软件包名称尤为重要。系统中的每个应用程序都必须具有唯一的软件包名。因为在很多地方都会用到软件包名。由于Android模拟器的执行速度很快,因此让模拟器窗口一直处于打开状态,并在每次修改程序后立即运行程序。如果现已经按照前面的要求创建了sudoku项目并运行sudoku程序就会得到一个空白的界面。完成sudoku程序的第一项工作就是修改游戏界面上面要有允许玩家开始新游戏、继续前一个游戏、获得游戏相关信息以及退出游戏的按钮。那么,通过修改下面的文件才能创建这样的启动界面。Android程序是一个松散的活动集合,其中的每个活动都定义了一个用户界面屏幕。创建sudoku项目时,Android插件会在sudoku.java文件中建立一个活动。Android调用活动的onCreate()方法来初始化该活动,onCreate()方法又调用setContentView()方法,利用一个Android视图部件填充该活动的屏幕区域内容。 当然,也可以按照过程性设计方法是用几行Java代码,以及其它一个或几个类来定义用户界面。但Android插件采用的是声明性设计方法。上面代码中的R.layout.main是一个资源标示符,引用了res/layout目录中的main.xml文。main.xml文件以XML格式声明用户界面,所以正是需要修改的文件。在运行时,Android解析并实例化(解压缩)该文件中以定义的资源,并将其设置为当前活动的视图。R类是由Android Eclipse插件自动管理的,这点尤为重要。无论将一个文件放到res目录中的哪个位置,Android Eclipse插件都会注意到这一点变化并自动在R.java文件中添加资源ID。如果删除或修改了某个资源文件,R.java将保持同步。Android资源管理其使用十六进制整数加载实际数据、字符串以及被编译到软件包中的其它资源。无需关心这资源得值。只要记住这些值是引用数据的句柄,而不是引用包含数据的对象句柄。需要使用对象之前不会解压缩对象。注意:几乎所有的Android程序,包括基础Android框架本身,都拥有一个R类。请参阅android.R的在线文档,了解可用的所有内置资源。6剖析一下原始的main.xml文件中的定义,了解必须要修改哪些地方。在Eclipse中双击main.xml即可打开该文件。查看xml文件。main.xml的第一行如下:所有的Android XML文件开头都是这行代码。这行代码只是告诉编辑器,该文件是XML格式的,采用UTF-8字符集编码。除了包含针对非ASC字符集几乎完全一样。在main.xml中对的引用。布局是存放一个或多个子对象及某种行为的容器,行为描述了如何将这鞋子对象放置在屏幕上欺负对象的矩形区域中。下面列出Android中最常见的几种布局。FrameLayout(框架布局):从屏幕的左上角开始显示子对象,主要用于选项卡视图和图像切换器。LinearLayout(线性布局):以单列或当行的形式显示子对象,这是最常用的布局方式。RelativeLayout(相对布局):以相对于其它子对象或父对象的位置显示子对象,这种布局通常用于表单。TableLayout(表格布局):以多行或多列的方式显示子对象,类似于HTML表格。7定义Android的XML命名空间,该参数只能在main.xml文件中的第一个XML标记处定义一次。声明此布局的高度和宽度与父对象的高度和宽度相同(此处之窗口)。可能的值有fill_parent或wrap_content。标记中有一个如下所示的子对象部件:此处定义一个简单的文本标签。使用不同文本和几个按钮来替换该标签。在编辑器中看到关于缺少语法约束(DTD或XML架构)的警告,尽管忽略这些警告,与将英语文本编码到布局文件中不同,使用string.resid这种与发形式引用res/values/strings.xml文件中的字符串。该文件也可以有其它写法,根据区域设置或其它参数(如屏幕分辨率和屏幕方向)的设置情况,还可以有其它资源文件。打开这个文件,切换到底部的strings.xml选项卡,然后输入声明启动界面中各个标签的定义下列内容:Sudoku Android Sudoku Continue New Game About Exit保存strings.xml,Eclipse将会重新构建项目。再运行程序。虽然该启动界面清晰易读,但还需要进一步美化。让标题文本更大一些并使其居中,让按钮变小并使用不同的背景色。下面是颜色定义,这些定义应放在res/values/colors.xml文件中。在新版本的main.xml文件中,引入了一种新的语法形式+id/resid。与引用在其它地方定义的资源ID不同,这种与发型师将创建一个新的资源ID工其它对象引用。例如:+id/about_button定义了About按钮的ID,以后用户按下该按钮时,将使用这个ID出发某个事件。重新运行该程序的结果,明显发现新的界面在纵向模式时非常美观,但在横向模式时则需要重新美观。用户随时可能切换模式,因此必须考虑横向模式的处理。第二部分是使用替代资源创建一个名为res/layout-land/main.xml(注意-land后缀)的文件, 该文件采用TableLayout布局方式创建两列按钮。现在再次运行该程序即使在横屏模式下,所有按钮也都可以正常显示。Android允许使用资源后缀为任何资源指定替代版本,而不仅仅是布局。例如,可以使用替代资源提供不同语种的本地文本字符串。每个替代资源文件必须使用完全相同的ID集合。Android的屏幕密度与这些后缀密切相关。例如:高密度图像存储在res/draw-able-hdpi中,中密度图像存储在res/drawable-mdpi或res/drawable-nodpi目录中。第三部分是实现About对话框用户选择About按钮时,表明触按屏幕上的该按钮(如果用户使用触摸屏),或者使用D-pad(Directional pad,方向键)或轨迹球指向按钮并按下了选择按钮。此时,希望弹出一个窗口,其中显示一些有关数独游戏的信息。阅读完该对话框上的这些文字后,用户按下Back按钮可关闭该窗口。可以用多种方法实现这个功能:1. 定义一个新的Activity类并启动;2. 使用AlertDialog类并显示;3. 子类化Android的Dialog类并显示。在这个例子中,将定义一个新的活动。与主Sudoku程序的活动一样,About按钮的活动也需要一个布局文件。将该布局文件命名为res/layout/about.xml。只需要该布局文件的一个版本即可,因为该布局在纵向和横向模式下都能够正常显示。将About对画框的标题及对话框包干的文本内容添加到res/values/strings.xml文件中。About活动应该在About.java文件中定义,只需覆写onCreate()方法并调用set-ContentView()方法即可。要在Eclipse中创建一个新类,使用FileNewClass。需要将该活动与Sudoku类中的About按钮关联起。首先,在Sudoku.java中添加一些导入语句:import android.content.Intent;import android.view.View;import android.view.View.OnClickListener;在onCreate()方法中添加代码以调用findViewById()和setOnClickListener()方法,findViewById()方法用于根据资源ID查找Android视图,setOnClickListener()方法则通知Android用户触摸或单击该视图时应出发对象:在此需要对所有按钮进行相同的处理。当Eclipse插件在res/layout/main.xml文件中看到+id/about_button这样的语法形式时,它将自动在R.java文件中创建类似R.id.about_button这样的常量。下面的代码用this作为接收方,因此Sudoku类需要实现OnClickListener接口并定义一个名为onClick()的方法:要想在Android中启动某个活动,首先需要创建Intent类的实例。Android中有两个Intent类实例:public(公用的)的Intent类实例是在系统注册的,可从任何应用程序中调用该实例;private(专用的)的Intent类实例只能在一个应用程序内使用。在这个例子中,只需使用后一种实例。如果在运行改程序并选择About按钮,将会出现错误提示,这是因为漏掉了一个重要的步骤,每个活动需要在AndroidMainfest.xml文件中的声明。为此代开该文件,切换到XML模式,并在第一个活动的结束标记之后添加一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论