题目:安卓版水果连连看系名:计算机科学与技术系专业:软件工程学号:**********学生姓名:***指导教师:李*2012年12月19日1课题概述1.1课题意义目前随着移动设备越来越普及以及移动设备的硬件的提升,移动设备的功能越来越完善,移动设备的系统平台也日渐火热起来。
目前国内最常见的移动开发平台有Symbian,iPhone,Windows Phone以及当下正在逐步兴起的Android。
目前为止国内已经有很多Android系统的用户。
截止2010年第二季度Android系统的国内市场占有率已经过10%,在西欧以及北美智能手机市场占有率也在20%左右。
可见Android系统正在崛起之中。
但是对于Android系统的应用和开发在国内仍然属于起步和探索阶段。
急需要大量的相关技术和人员的投入。
下面首先介绍一下Android系统。
Android是基于Linux内核的软件平台和操作系统,是Google在2007年11月5日公布的手机系统平台,早期由Google 开发,后由(Open Handset Alliance)开发。
它采用了软件堆层(Software stack,又名以软件叠层)的架构,主要分为三部分。
低层以Linux核心工作为基础,只提供基本功能;其他的应用软件则由各公司自行开发,以Java作为编写程式的一部分。
安卓版水果连连看是一款比较常见的安卓版游戏。
游戏主要功能是点击俩个相同的水果,如果中间可以通过小于等于三条直线连接,就可以将俩个水果消除掉。
游戏不同操作具有不的背景音乐。
还有道具。
刷新顺序和提示道具分别三次。
游戏设置不同的关卡,通过时间的不同来控制。
通过该课题,使学生更了解安卓游戏项目的开发。
1.2课题目标随着3G应用的不断开发推广,用户会越来越需要更加个性化、优质化的多媒体数据服务,用户希望能够随时、随地无缝利用3G网络进行办公、网上交易、游戏娱乐、欣赏影视节目、收听和下载音乐等。
根据观察,在不久的将来,移动手机终端将会在以下若干方面具有新的发展。
首先,提供智能提醒服务,手机能够与用户实现密切配合,并监控用户的个性化设置(保持在本地或者云端),当重要时间点或关键事物需要用户注意时,手机会向用户发出“提醒”服务,服务包括日程提醒、交通状况、最佳行车路线、最佳泊位、优惠活动、实时新闻、体育赛事、天气情况、股市行情、好友活动、亲友生日等。
其次,提供虚拟现实体验,手机可以借助传感器、周边设备了解到您的身边环境,并根据收集到的信息,智能的为您提供有用的信息,如在网络世界养的宠物,可以借助音频设备表达叫声,借助马达和位置传感器等传递其跳、跃等行为信息;也可以在用户购物时,提供相关的同类产品价格参考,提醒用户附近的那个卖场更物美价廉;根据实际场景,为用户及时提供正在操控的产品的使用方法提醒。
接着,发挥物联网的优势,借助无处不在的传感器,可以感知并分享到周围世界的海量信息,这些信息将在“云端”得到整合,帮助用户及时、准确的获得气息信息、交通路况。
另外借助物联网,用户间可以方便、快速的分享资源,协助和交互。
如进行端到端的多人游戏、照片分享、书籍分享、音乐分享等。
然后,作为经济工具,在交通或者信息不发达的情况下,帮助用户找到最佳的市场,获得有价值的帮助信息,帮助用户从事的经济活动的收益率。
最后,更加智能、安全的设备,随着智能手机的不断普及和更加智能,手机软件的更新、升级将会变得越发简单,并会为用户提供工具或信息,让用户有能力和权力决策那些内容可以浏览、下载或分享。
在安全性上也将更加出色,能够十分有效的帮助用户进行获取到的内容的管理,保护用户的个人隐私和基于手机的金融活动如电子钱包、在线支付、在线贸易等。
根据近半年来的学习Android平台游戏动画的经验,结合现在已有技术,基于游戏动画设计的基本原理。
设计一个基于Android平台的连连看的游戏。
主要包含游戏的关卡切换,游戏动画的实现。
通过这一课题的研究设计与实现,更加理解面向对象的程序设计思想以及对安卓游戏的研发框架及其实现。
1.3开发环境1、开发工具Eclipse是一个市场占有率很高的Java IDE工具,Android推荐使用Eclipse 来开发Android应用,并为其提供了专门的插件:Android Development Tools (ADT)。
2、系统特点Android的底层建立在Linux系统之上,它采用一种软件叠层的方式进行构建。
这种软件层结构使得层与层之间互相分离,分工明确。
保证了层与层之间的低耦合,当下层的层下或者层内发生改变时,上层应用程序无须做任何改变。
Android系统主要由5部分组成:●应用程序层●应用程序框架●函数库●Android运行时Linux 内核应用程序层为系统的核心应用程序,如电子邮件客户端、地图、浏览器等。
这些程序主要都是Java 编写,玩家主要通过这些应用程序来实现对手机的操作。
应用程序框架提供了大量API 供开发者使用。
开发者自己开发的应用的功能模块,主要遵守了框架的约定,那么其他应用程序也能使用这个功能模块。
函数库包含了一套被不同组件所使用的C/C++库的集合。
一般来说,Android 开发者不能直接调用这套C/C++库集,但可以通过它上面的应用程序框架来调用此库。
Android 操作系统运行时由2个部分组成:Android 核心库和Dalvik 虚拟机。
其中Android 核心库主要为Java 语言提供了大部分的功能,而虚拟机则负责运行Android 应用程序。
[2]Linux 内核系统基于Linux2.6之上搭建的。
在Android 平台上Linux 内核提供了安全性、内存管理、进程管理、网络协议栈和驱动模型等核心系统服务。
并且linux 也是硬件层与软件层之间的抽象层。
2 课题设计2.1 连连看游戏的UI 设计游戏的UI 设计是对游戏中的用户界面的设计。
和游戏的功能按钮的外观设计。
通过网上搜索图片。
从而设计出自己的游戏界面。
开场动画与游戏界面:2.2 游戏框架的搭建首先基于Android 平台特性,把本应用主要划分为三大模块分别为:程序控制界面,游戏逻辑模块,游戏音效模块。
通过对游戏的实现进行分析。
对游戏中的类分析。
Activity 中各个控件的设游戏逻辑模块程序控制界面 Surface ManagerSQLite WebKit …… libc SSL Core Libraries Dalvik Virtual MachineLinux 内核Display Driver Camera Driver Wifi Driver ……游戏逻辑模块 游戏音效 模块判断是否可以 消 除 刷新提示道具的 使 用 点 击 放 大 的 处 理计。
UI布局的设计以及各个控件被点击的动画以及切换页面时的动画设计。
进行框架的搭建。
主界面VIew的设计。
与Dialog的设计。
通过使用MVC的模式搭建项目环境:在com.ling.lianliankan的包里主要是界面的类。
例如Activity以及自定义的Dialog类。
在com.ling.lianliankan.tools的包里分别是游戏中用到的工具类。
在com.ling.lianliankan.view的包里放的是游戏中自定义的view类以及游戏中逻辑以及对界面的控制。
在res中建立一个文件夹。
下面主要放控制的各个动作。
Animation的动画。
主要是XML文件的一些配置。
各个控件的点击动作之后的动画,以及画面切换时的动画效果。
在raw文件夹下主要放置声音文件,方面在游戏中用soundpool 调用。
分别在不同的点击事件发生后播放不同的声音。
具体类的作用:类名具体功能LianliankanActivity 主activity,用户看到的主界面MyDialog 游戏结束时弹出的dialog OnStateChangeListener 状态改变接口OnTimeListener 时间控制接口OnToolsChangeListener 道具使用接口SoundPlay 声音播放类BoardView 游戏主要逻辑控制GameView 游戏水果控制界面的绘制3 课题实现3.1 视图类View类的实现View类是游戏的主要显示区域。
这一块包含了水果图标。
点击事件发生时水果的变化。
俩个水果连接时水果的消失与游戏中连接俩个水果之间的线的绘制。
这个处理需要只要View 有变化必须强制刷新界面。
不然界面不能及时更新。
无法使游戏实现一定的效果。
onDraw ()方法中主要实现水果的绘制,路径的绘制,以及点击事件之后的水果放大的绘制。
该类中实现了游戏中的逻辑,以及视图块的改变。
3.2 主界面Activity 的实现 点击到水果,水果放大 俩个水果可以消除 点击道具强制刷新view 调用GameView.this .invali date();主界面Activity 的实现,主要是SeekBar 与 ImageButton 与View 的显示。
实现难点主要在于SeekBar 与游戏的同步。
需要用到多线程与Handler 的传递参数。
ImageButton 的实现是功能键的实现。
主要难点在于对界面的更新与实现的算法。
主界面的截图:3.3 游戏结束时Dialog 的实现游戏结束时有两种状态:如果在每一关的规定时间内将所有水果消除,那么将会展现的是游戏胜利状态。
由此可以进入下一关继续挑战。
下一关比上一关时间少10秒。
如果在规定时间结束还没有将所有水果消除,那么将会展现的是游戏失败状态。
由此可以重新开始本关或者是进入下一关挑战。
在游戏中通过Handler 传递参数的不同而使界面显示两种不同的Dialog 。
截图如下: handler 规定时间到 水果已经全部消除 Activity 改变外观弹出dialog3.4 游戏主要逻辑的处理加入已选list中点击水果判断是否可以消除判断游戏中的俩个水果是否可以消除是游戏中的重点和难点。
其中涉及到这俩个点是否可以通过小于等于3的线段连通的一个算法。
首先要将视图中的水果转化成程序中的一个int型的MAP[][]数组。
在该数组中存放的是水果种类,用int型进行表示。
如果该位置的水果已经被消除那么该位置的map值为0 。
其余有水果的为水果的种类值。
点击事件发生之后,将第一次点击的水果加入一个List中,标记为已选择的。
第二次点击事件发生之后,进行判断,首先判断否跟第一次点击时的水果的int 值相等。
如果不相等,将list清空,将该点加入list中。
如果int值相等,那么进行是否可以连接的算法进行判断。
是是否可以连通。
第一种情况:横坐标或者纵坐标相等,且中间无水果第二种情况:第三种情况:第一种情况:且该俩点中间的所有int值都为0那么也可以消除。