学生姓名班级学号专业计算机科学与技术课程设计题目基于Android的数独游戏设计评语组长签字:成绩日期2014年月日课程设计任务书学院信息科学与工程学院专业计算机科学与技术学生姓名班级学号课程设计题目基于Android的数独游戏设计实践教学要求与任务:能够运用Java语言设计数独游戏,实现基本游戏效果。会搭建Android的开发环境,并学会运用Eclipse开发工具相关Android程序进行开发;深入了解Android项目生成的文件之间的关系和它们的作用。工作计划与进度安排:第一阶段:20学时。设计阶段。学生根据所选题目,查阅有关资料,综合所学的理论知识,完成整体设计及具体设计。第二阶段:8学时。调试测试阶段。上机调试测试,要求学生务必认真,思想高度集中,调试成功后,整理、编写设计资料及实验报告。第三阶段:4学时。验收答辩。指导教师:2014年月日专业负责人:2014年月日学院教学副院长:2014年月日摘要移动互联网时代的到来极大的改变了我们的生活,而Android是一种以Linux为基础的开放源码操作系统迅速占领了智能机操作系统,所以在android环境下开发显得尤为必要。Android是开放性体系架构,不仅具有非常好的开发、调试环境,而且还支持各种可扩展的用户体验,包括丰富的图形组件、多媒体支持功能以及强大的浏览器。因此,对于软件从业人员来说,Android平台具有无限的吸引力。本文就在分析讨论Android手机软件开发技术原理的基础上,为用户开发出基于Android平台的数独游戏的软件。通过对Android系统架构和应用开发进行初步研究,设计一款数独游戏。在对系统进行详细需求分析的基础上,确定了系统的功能和性能要求,对游戏的开机动画,菜单界面、屏幕绘制、时间控制、布局算法等进行了设计。本文详细介绍了在Android平台上以Java为语言编写游戏的过程,最终实现了一个界面友好、操作简单的手机益智游戏。关键词:Android数独智能机目录1、开发工具与环境..................................................................................52、系统分析与设计..................................................................................92.1数独游戏背景................................................................................92.2游戏功能简介...............................................................................93、系统详细设计....................................................................................123.1欢迎界面的设计和实现............................................................123.2游戏界面相关类的实现............................................................173.3数独算法类的实现....................................................................193.4游戏的测试和运行....................................................................234、总结.....................................................................................................28参考文献...................................................................................................291、开发工具与环境Android是谷歌公司发布的手机操作系统,它是基于Linux平台的开源手机操作系统,谷歌公司将要把其打造为基于移动终端的真正开放的移动软件平台,不仅拥有移动电话所需要的工作软件,,而且在专利权方面能够不侵犯他人权利去推动移动互联网的创新。谷歌公司为了开发Android,与开放手机联盟进行了合作,手机开放联盟由全球30多家移动开发和手机应用的领先企业组成。谷歌公司不仅仅和运营商达成了合作关系、而且与设备制造商以及开发商保持长期合作,目的就在于利用其优势建立移动软件平台,其特点是标准化、开放式的。Android是谷歌公司未来企业战略的一部分,其目的是为了在任何时候任何地点能够提供信息。Android应用程序与其他很多计算机平台的应用程序不同,他们没有唯一的启动入口,一个Android应用程序是由多个不同组件组合而成,组件间通过Intent实现通信。Android系统的基本组件包括Activity、Service、BroadcastReceiver和ContentProvider等,要实现组件间通信,还需要Intent消息组件。并不是每个Android应用程序都必须具备这四个组件,很多时候只需要这四种中的某几种就可以了。除此之外,应用程序的所有组件还都必须在AndroidManifest.xml中声明[8]。这是一个XML配置文件,这个配置文件用于定义应用程序的组件、组件的功能及必要条件等。这个配置文件是任何一个Android应用程序所必需的。1.1ActivityActivity可以说是开发人员最常用的组件,同时也属于Android最基本的组成部分之一。Android程序中,一般一个Activity代表手机屏幕上的一屏。举例来说,如果将手机比作一个浏览器,那么一个Activity就相当于一个网页。在Activity中,可以添加多个视图,然后为这些视图添加一些事件处理。这些视图可以是按钮、文本框、列表等。可以看到,Activity的概念和网页的概念相当类似。一般一个Android应用是由多个Activity组成,同时这些Activity相互之间可以进行跳转,例如,按下某个Activity中的Button按钮后,可能会跳转到一个其他的Activity。不过和网页跳转稍有不同,Activity之间的跳转可以有返回值,例如,在ActivityA跳转到ActivityB后,那么当ActivityB运行结束时,可能会返回给ActivityA一个值。在多个Activity交流的过程中,这种返回机制是相当实用的。当用户进入一个新的屏幕时,之前的屏幕会转入暂停状态,并且保存在历史堆栈中。正是由于历史堆栈的存在,用户可以通过返回操作,返回到之前打开过的所有屏幕。Android默认的是将应用程序从开始到当前的每一个屏幕都保存到堆栈中,不过与此同时,Android还提供了很方便的机制,让开发人员自定义某个屏幕是否需要保存到历史堆栈。Activity的跳转实现,必须借助于Intent类。因此Intent在Android应用中占据的地位是极其重要的。简单来说,一个Intent就是对一个将要执行的操作请求的抽象描述。Intent的描述,主要包含有两个数据结构:动作(action)和动作对应的数据(data)。动作有很多种,系统中最常见的动作类型有:MAIN(表明该Activity是应用程序的入口)、VIEW、PICK、EDIT等等;而动作对应的数据一般以URI的形式表示,例如:要查看某一个网页,则需要创建Intent,它的动作类型为VIEW,对应的数据应该是该网页的网址。值得一提的是,有一个类叫IntentFilter,它是Intent的相关类。如果说Intent是一个有效的操作请求,那么一个IntentFiler则用于描述一个Activity(或者IntentReceiver等)能够接收哪些Intent的请求。比如系统浏览器的Activity用于查看某一个网页,那么它用于接收Intent的IntentFilter,要定义类型为VIEW的动作并且能够过滤表示一个网页网址的URI。通常IntentFilter要被注册在AndroidManifest.xml文件中。Activity之间的跳转正是通过解析各种Intent来实现的。例如一个Activity调用startActivity(intent)方法,希望跳转到其他的Activity时,会触发系统的Intent解析过程,在所有安装的应用程序中已注册的IntentFilter中查找,并最终挑选出能够匹配Intent的Activity。然后这个新的Activity因为接收到Intent的请求而开始运行,完成Activity的跳转。这种跳转机制提供了两个关键好处:(1)操作请求被Intent封装起来,方便Activity重复利用。(2)相互跳转的多个Activity之间实现了松耦合。只要IntentFilier保持不变,一个ctivity可以随意修改,而不用担心其他Activity找不到它。1.2BroadcastReceiver应用程序可以通过BroadcastReceiver监听一个外部的事件,并做出响应。例如,当应用程序需要对电话呼入这个外部事件做出反应时,可以利用BroadcastReceiver进行处理。再如,当一个后台下载任务成功的事件发生时,需要提示用户下载完成,仍然可以利用BroadcastReceiver来进行处理。BroadcastReceiver不能生成UI,也就是说对于用户来说是透明的,用户是看不到的。BroadcastReceiver只能通过NotificationManager来通知用户这些事件发生了。BroadcastReceiver既可以在AndroidManifest.xml中注册,也可以在运行时的代码中使用Context.registerReceiver()进行注册。注册完成之后,当事件来临的时候,即使程序没有启动,系统依然可以根据定义,自动启动程序。各种应用也可以通过使用Context.sendBroadcast()将它们自己的IntentBroadcast广播给其他应用程序。1.3ServiceService是一种程序,它可以运行很长时间,但是它却没有用户界面,不可交互,而且不能自己运行。它需要通过某一个Activity或者其他的Context对象来调用[12]。最常见的例子,比如说用户正在运行一个音乐播放器的程序,此时如果想浏览网页,那么,在用户导航到Android的浏览器以后,虽然进入了浏览器屏幕,但是歌曲的播放并没有停止,而是在后台继续播放着。其实播放的动作正是由播放音乐的Service执行着。当然,如果需要的话,Service也是可以停止。通过startService(Intentservice)可以启动一个Service,通过Context.bindService()可以绑定一个Service。1.4ContentProvider对于数据存储,Android与其他的操作系统有一点不太一样,即数据在Android程序中都是私有的,这些数据包括文件类型和数据库类型以及其他类型的数据。这样系统和应用程序的数据就各自独立起来,以避免受到某些不正常程序或是病毒的影响。不过这并不代表各应用程序之间就因此而无法进行数据交换了。当某个应用程序希望与其它的应用共享其数据时,Android提供的ContentProvider就可以发挥作用了。在实现ContentProvider的抽象接口以后,程序便可以将自己的数据暴露出去,其他程序只要有权限,就可以通过这一套标准而统一的接口,读取或是删除该程