为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

连连看游戏

2017-08-31 50页 doc 271KB 58阅读

用户头像

is_594886

暂无简介

举报
连连看游戏连连看游戏 +++++++++++++ 本科生毕业设计(论文) 学院(系): 软件学院 专 业 : 软件工程 学 生 : 周+++ 指导教师 : +++++++ 完成日期 + 年 4 月 连连看游戏 +学院本科生毕业设计(论文) 连连看游戏 Lianliankan Game 总 计: 35页 表 格 : 1 个 插 图 : 12幅 + 学 院 本 科 毕 业 设 计(论文) 连连看游戏 连连看游戏 Lianliankan Game 学 院(系): 软件学院 专 业: 软件工程 学 生 姓 名:...
连连看游戏
连连看游戏 +++++++++++++ 本科生毕业(论文) 学院(系): 软件学院 专 业 : 软件 学 生 : 周+++ 指导教师 : +++++++ 完成日期 + 年 4 月 连连看游戏 +学院本科生毕业设计(论文) 连连看游戏 Lianliankan Game 总 计: 35页 表 格 : 1 个 插 图 : 12幅 + 学 院 本 科 毕 业 设 计(论文) 连连看游戏 连连看游戏 Lianliankan Game 学 院(系): 软件学院 专 业: 软件工程 学 生 姓 名: ++++++ 学 号: +++4 指 导 教 师(职称): 王+(讲师) 评 阅 教 师: 完 成 日 期: 2+4月 ++++ ++++++++++++ 连连看游戏 连连看游戏 软件工程专业 ++ ,摘 要,最近几年,智能移动终端发展迅速,涌现出一批优秀的智能操作系 统。苹果工司的iPhone系统平台,以简介的操作风格,友好的用户界面,丰富的第三 方软件和强大的系统功能,在众多移动设备中独领风骚。游戏“连连看”规则简单, 很容易上手。紧张好玩又不失趣味性,深受各年龄层玩家的喜爱。本游戏是一款针对 iPhone手机平台设计,在MacOS系统下,利用Objective-C语言,采用XCode开发工 具进行开发的。游戏结合了iPhone具有的触控功能,在计分模式上有所创新。加入了 在游戏进行时重新初始化并自动开始的功能,让玩家觉得游戏更具娱乐性。 ,关键词,游戏;连连看;iPhone;XCode;Objective-C Lianliankan Game Software Engineering Major Zhou Shao-liang Abstract: In recent years, the rapid development of smart mobile devices, and a number of outstanding intelligence operating system.Engineering Division Apple iPhone platform to profile the operation style, user-friendly interface, rich and powerful third-party software system functions, in many mobile devices dominate.Game "Lianliankan" rules simple and very easy to use.Fun fun yet intense, deeply loved players of all ages.This game is a platform for the iPhone, the MacOS system, use of Objective-C language, using XCode development tools for development.IPhone games have the touch with a feature on the scoring model innovation.Joined in the game and automatically start to re-initialize the function, allowing the player feel the game is more entertaining. Key words: Game; Lianliankan; iPhone; XCode; Objective-C 连连看游戏 目 录 1 绪论 ...................................................................................................................................................................................... 1 1.1 游戏平台简介 ...................................................................................................................................................... 1 1.2 游戏发展简介 ...................................................................................................................................................... 2 1.3 游戏开发意义 ...................................................................................................................................................... 2 1.4 主要难点................................................................................................................................................................. 2 2 关键技术 .............................................................................................................................................................. 3 2.1 Objective-C语言............................................................................................................................................. 3 2.1.1 Objective-C语言原理 .................................................................................................................................... 3 2.1.2 Objective-C语言优点缺点分析 .................................................................................................. 3 2.2 Cocoa Toch类库 ............................................................................................................................................... 3 2.3 iPhone应用开发工具简介 .......................................................................................................................... 4 2.3.1 XCode开发环境 ....................................................................................................................................... 4 2.3.2 Interface Builder设计工具 ....................................................................................................... 4 2.3.3 iOS模拟器 .................................................................................................................................................. 4 3 需求分析 ........................................................................................................................................................................... 5 3.1 界面需求................................................................................................................................................................. 5 3.2功能和性能需求 .................................................................................................................................................. 5 3.2.1 视图切换需求 ........................................................................................................................................... 5 3.2.2 游戏实现需求 ........................................................................................................................................... 6 3.2.3 得分的保存与查看................................................................................................................................. 6 3.3 系统数据需求 ...................................................................................................................................................... 7 4 系统框架设计................................................................................................................................................................. 8 4.1系统框架的组成 .................................................................................................................................................. 8 4.2 视图之间的层次结构 ...................................................................................................................................... 8 4.3 主菜单页面的设计 ........................................................................................................................................... 9 5 系统详细实现................................................................................................................................................................. 9 5.1 游戏界面的设计与实现................................................................................................................................. 9 5.1.1 游戏界面的布局 ...................................................................................................................................... 9 5.1.2 游戏界面的初始化.............................................................................................................................. 10 5.1.3 游戏过程的实现 ................................................................................................................................... 12 5.1.4 游戏结果的判断 ................................................................................................................................... 13 5.2 背景音乐的播放与调节.............................................................................................................................. 15 5.2.1背景音乐的播放 .................................................................................................................................... 15 连连看游戏 5.2.2 背景音乐的调节 ................................................................................................................................... 16 5.3 数据库的连接与操作 ................................................................................................................................... 18 5.3.1 数据库的连接 ........................................................................................................................................ 18 5.3.2 数据的读取.............................................................................................................................................. 19 5.3.3 数据的写入.............................................................................................................................................. 19 5.4 得分记录的保存与显示.............................................................................................................................. 20 5.4.1得分记录的保存 .................................................................................................................................... 20 5.4.2 得分记录的显示 ................................................................................................................................... 22 5.5 更改背景图片 ................................................................................................................................................... 23 5.6 视图间的切换及动画效果 ........................................................................................................................ 24 5.6.1游戏界面的进入与返回 .................................................................................................................... 24 5.6.2 音效设置视图的进入与返回 ........................................................................................................ 25 5.6.3 背景设置视图的进入与返回 ........................................................................................................ 26 5.6.4 排行榜视图的进入与返回.............................................................................................................. 26 5.6.5 简介视图的进入与返回 ................................................................................................................... 26 总结 ........................................................................................................................................................................................ 27 参考文献.............................................................................................................................................................................. 27 致谢 ........................................................................................................................................................................................ 28 连连看游戏 1 绪论 随着科技的发展,现在手机的功能也越来越多,越来越强大。手机游戏市场已经成为资本市场最抢眼的蛋糕,随着2009年3G牌照发放、3G技术的推广,移动娱乐业务将成为移动互联网业务增长的重要推动力量作为手机娱乐服务的重要内容之一, [1]手机游戏前景非常光明。 1.1 游戏平台简介 iPhone由苹果公司首席执行官史蒂夫?乔布斯在2007年1月9日举行的Macworld宣布推出,2007年6月29日在美国上市,将创新的移动电话、可触摸宽 屏iPod以及具有桌面级电子邮件、网页浏览、搜索和地图功能的突破性因特网通信设备这三种产品完美地融为一体。iPhone引入了基于大型多触点显示屏 和领先性新软件的全新用户界面,让用户用手指即可控制iPhone。iPhone还开创了移动设备软件尖端 [2]功能的新纪元,重新定义了移动电话的功能。 iPhone是结合照相手机、个人数码助理、媒体播放器以及无线通信设备的掌上设备,iPhone是一部4频段的 GSM制式手机,支持EDGE和802.11b/g无线上网(iPhone3G/3Gs/4支持WCDMA上网,iPhone4支持802.11n),支持电子邮件、移动通话、短信、网络浏览以及其他的无线通信服务。iPhone没有键盘,而是创新地引入了多点触摸(Multi-touch)触摸屏界面,在操作性上与其他品牌的手机相比占有领先地位。iPhone包括了iPod的媒体播放功能,和为了行动设备修改后的Mac OS X操作系统(iOS,本名iPhone OS,自4.0版本起改名为iOS),以及200万像素的摄像头。(一代、二代为200万,3Gs为320万,支持自动对焦,4代提升到500万 )此外,设备内置有感应器(即所谓的重力感应),能依照用户水平或垂直的持用方式,自动调整屏幕显示方向。并且内置了光感器,支持根据当前光线强度调整屏 幕亮度。还内置了距离感应器,防止在接打电话时,误触屏幕引起的操作。iPhone(4代)使用1GHz Apple A4处理器。 移动电话、宽屏 iPod 和上网装置 ? iPhone 将三大功能集于一身,通过多点触摸( Multi-Touch) 技术,手指轻点就能拨打电话、应用程序之间也易如反掌。还可以直接从网站拷贝粘贴文字和图片。短信和彩信通过短信和彩信直接发送文字、照片、音频、视频和联系人信息。还可以转发整段对话或其中的重要部分,Spotlight Search 可以让你在同一个地方搜遍 iPhone 中的各种不同内容,包括联系人、电子邮件、日历以及备忘录等等。用语音备忘录随时随地记录并分享你的灵感、备忘事宜、会议记录或任何录音。至2011年1月,苹果公司全球累计售出9000万部iPhone,iPhone手机 [3]成为全球手机厂商竞相模仿的对象。 1 连连看游戏 1.2 游戏发展简介 连连看来源于街机游戏《四川麻将》和《中国龙》,是给一堆图案中的相同图案进行配对的简单游戏,凭借操作简单,娱乐性强的特点,一经推出,很快风靡全球,深受各年龄层玩家的喜爱。游戏规则十分简单,只要将相同的两张牌用三根以内的直线连在一起就可以消除。游戏速度节奏快,画面清新可爱,适合细心的玩家。丰富的道具和公共模式的加入,增强游戏的竞争性。多样式的地图,使玩家在各个游戏水平都可以寻找到挑战的目标,长期地保持游戏的新鲜感。游戏“连连看”是源自台湾的桌面小游戏,也吸引众多程序员开发出多种版本的“连连看”。先后有“宠物连连看”、“LOGO连连看”、“QQ连连看”、“水晶连连看”等一系列优秀的游戏。 1.3 游戏开发意义 本游戏基于目前最为流行的iPhone手机平台,结合触控功能,使用手指点击操作。目前iPhone平台也有许多各种版本的连连看游戏,种类繁多,鱼龙混杂。使用户在选择的使用哪个游戏时相当头疼。本游戏有极强的针对性,专门为九岁以下儿童设计。游戏图片都是好看的水果图片,可以刺激玩家的食欲,更加具有吸引力。家长在教孩子玩游戏的同时还可以教小孩认识不同的水果类型,可谓一举两得。 本游戏在娱乐性上,较以往版本有很大的创新和加强。游戏的背景图片可以切换,玩家可以选择自己喜爱的图片作为游戏的背景。游戏的背景音乐可以调节音量大小和选择是否开启。游戏的记分方法独具创新,采用消除图片得分与剩余时间得分相结合的方法。玩家每一次消除图片都能看到自己的得分增加,增加玩家玩游戏时的乐趣。游戏在设计时,还考虑到了,玩家年龄层偏低,智力水平有限,复杂度路径计算对玩家来说相对困难,取消了路径判断的功能,只需判断图片是否相同,如果相同即可消除图片。同时,还能可以让游戏的界面铺满屏幕,使iPhone屏幕较小的瓶颈有所缓解。 1.4 主要难点 开始制作游戏时,主要要解决的问有以下几个方面: (1) 如何初始化游戏界面,使每种图片的数量相等,并且都是偶数。 (2) 管理各个视图之间的关系,使每一次视图切换都有相对应的动画效果。并且处理好视图的逻辑层次,使背景图片的视图可以切换并且不影响其他视图的显示。 (3)需要使用数据库对最高成绩进行保存和管理。对数据的存取、保存和显示,也是难点之一。 2 连连看游戏 2 关键技术分析 2.1 Objective-C语言 2.1.1 Objective-C语言原理 Objective-C是C语言的一个扩展集,以C语言为基础,任何原始的C语言程序都可以通过Objective-C编译器而不需修改,也允许在Objective-C内使用任何原始的C语言代码。Objective-C形容自己为覆盖于C语言上的一层薄纱,这是因为Objective-C的原意就是在原始C语言主体上加入面向对象的特性。Objective-C的面向对象语法源于Smalltalk消息传递风格。所有其他非面向对象的语法,包括变量类型,前处理器(preprocessing),流程控制,函数声明与调用皆与C语言完全一致[4]。 2.1.2 Objective-C语言优点缺点分析 优点:Objective-C是非常“实际”的语言。它使用一个用C写成、很小的运行库,只会令应用程序的大小增加很小,和大部分面向对象语言系统使用极大的虚拟机执行时间会取代了整个系统的运作相反。Objective-C写成的程序通常不会比其原始码大 [5]很多。 缺点:Objective-C 2.0已经支持垃圾回收机制。但是考虑到手机的内存仍然较小,本系统还是使用手工分配和释放内存的方式。和C++不同,Objective-C不支援运算子多载(它不支持ad-hoc多型)。亦与C++不同,但和Java相同,Objective-C只容许对象继承一个类别(不设多重继承)。Categories和protocols不但可以提供很 [5]多多重继承的好处,而且没有很多缺点,例如额外执行时间过重和二进制不兼容。 2.2 Cocoa Toch类库 iOS 应用程序的基础 Cocoa Touch 框架重用了许多 Mac 系统的成熟模式,但是它更多地专注于触摸的接口和优化。UIKit提供了在 iOS 上实现图形,事件驱动程序的基本工具,其建立在和 Mac OS X 中一样的 Foundation 框架上,包括文件处理,网络,字符串操作等。Cocoa Touch 具有和 iPhone 用户接口一致的特殊设计。有了 UIKit,可以使 iOS 上的独特的图形接口控件,按钮,以及全屏视图的功能,还可以使用加速仪和用 多点触摸手势来控制您的应用。大部分 Cocoa Touch 的功能是用 Objective-C 实现的。Objective,C 是一种面向对象的语言,它编译运行的速度令人难以置信。更值得一提的是采用了真正的动态运行时系统,从而增添了难能可贵的灵活性。由于 Objective-C 是 [6]C 的超集,因而可以很容易地将 C 甚至 C++ 代码添加到您的 Cocoa Touch 程序里。 当应用程序运行时,Objective-C 运行时系统按照执行逻辑对对象进行实例化—而且不仅仅是按照编译时的定义。例如,一个运行中的 Objective-C 应用程序能够加载一 3 连连看游戏 个界面(一个由 Interface Builder 创建的 nib 文件),将界面中的 Cocoa 对象连接至您的程序代码,然后,一旦UI中的某个按钮被按下,程序便能够执行对应的方法。上述过程无需重新编译。除了 UIKit 外,Cocoa Touch 包含了创建世界一流 iOS 应用程序需要的所有框架,从三维图形,到专业音效,甚至提供设备访问 API 以控制摄像头,或通过 GPS 获知当前位置。Cocoa Touch 既包含只需要几行代码就可以完成全部任务的强大的 Objective-C 框架,也在需要时提供基础的 C 语言 API 来直接访问系统。这些框架包括:通过 Core Animation,就可以通过一个基于组合独立图层的简单的编程模型来创建丰富的用户体验。Core Audio 是播放,处理和录制音频的专业技术,能够轻松为您的应用程序添加强大的音频功能。提供了一个面向对象的数据管理解决,它易 [6]。 于使用和理解,甚至可处理任何应用或大或小的数据模型 2.3 iPhone应用开发工具简介 2.3.1 XCode开发环境 Xcode IDE 在设计伊始就充分利用苹果公司的最新技术,并对您开发过程需要的工具进行集成。所有的工具都在一个窗口里,您可以代码编辑、调试,甚至用户界面设计之间流畅切换。只需把所有的注意力集中在 Xcode 工作区。在输入代码的时候,只要代码出现错误, Live Issues 就会立即提醒,并在代码边上显示一个消息泡泡,提供进一步的信息。点击 Run 按钮就可以启动 Mac 应用程序,或把程序上载到测试设备,或立即开始调试。把鼠标指针放到变量上面,就可以在运行时查看变量值,并可通过 [7]鼠标指针任意改变光标在编辑器中的位置。 通过与开发者苹果官方网站密切协作, Xcode为新的 iOS 设备提供一键完成功能,只需要一次点击,就可以安全的签名打包 Mac 或 iOS 应用程序,同样,只要一次 [7]点击,就可以直接将应用程序提交到 App Store。 2.3.2 Interface Builder设计工具 Interface Builder 是一个易于使用的图形编辑器,用于设计 iPhone 或 Mac 程序的图形用户接口。Interface Builder 将您的用户接口设计作为接口对象的集合和它们的关系保存在一个或多个资源文件中。您在接口中所做的改动将自动与 Xcode 同步。同时 Interface Builder 能够让您轻松地加入您自己的特效,包括 Quartz [8]Composer 动画。 2.3.3 iOS模拟器 在运行应用程序的时候,iOS 模拟器会最大程度地模拟实际 iOS 设备的运行方式。由于iOS模拟器启动和调试都很快,因此它非常适合用来测试用户界面是否符合预 4 连连看游戏 期,网络调用是否正确,电话旋转的时候视图变化是否正确。 您甚至可以使用鼠标模 [9]。 拟触摸手势。iOS 模拟器能为您的开发工作节约大量的时间 3 需求分析 3.1 界面需求 本系统提供了游戏菜单选择页面、游戏页面、更改背景图片页面、调节背景音乐页面和查看最高分排名页面。 主菜单页面 背景背景最高系统游戏 音乐 图片分排介绍界面 设置设置行查界面 界面 界面 看界 面 图3-1 系统模块 3.2功能和性能需求 3.2.1 视图切换需求 视图程序运行后首先进入主菜单页面,主菜单页面包含游戏名称、背景图片和五个按钮。点击其中任意一个按钮,视图切换进入按钮相对应的页面,分别是:游戏页面、背景图片设置页面、背景音乐设置页面、最高分排行榜页面和游戏简介页面。每一个页面的左上角都有一个返回按钮,点击可以返回到主菜单页面。这与iPhone的操作习惯保持一致。系统还有一个隐含页面,即保存姓名页面。当用户在游戏页面完成游戏,并且需要保存记录是进入,保存之后返回到主菜单页面。 5 连连看游戏 得分保存页面 游戏页面 背景图片设置页面 主菜单页面 用户 排行榜页面 游戏简介页面 图 3-2 页面切换图 3.2.2 游戏实现需求 初始化:玩家点击“开始游戏”,进入游戏视图,需要随机初始化所有水果图片。使所有图片都随机分布,每种图片出现次数均为偶数。此外还需要初始化游戏时间、游戏得分和消除对数。玩家在游戏页面点击“重置”按钮,调用相同的初始化方法。 消除图片:游戏开始后,当用户点击一个水果图片,图片被做出标记。用户再点击下一张图片,比较两次点击的图片是否相同,并且两次不能点的是同一张图片。如果相同,从视图上清除这两张图片。当所有水果图片被清除,则游戏完成。 3.2.3 得分的保存与查看 保存得分:本游戏保存得分最高的五条记录。游戏被初始化后,游戏计时开始,得分初始值为零,玩家每消除一对图片,得分加20。在规定时间内完成游戏,则为胜利,最终得分等于游戏得分加上剩余时间得分。如果最终得分大于数据库中保存五条记录的最低分,则需要保存记录。在用户输入姓名后,将这条记录插入数据库,并且将原来的最低得分记录删除。 查看得分:在主菜单界面点击“排行榜”按钮,进入查看最高分页面。需要从数据库读取五条记录,按得分降序排列。将这五条记录在表格视图中显示。 6 连连看游戏 游戏胜 利 显示得分 是否需要保 存得分 是 输入姓名 是保存 姓名是否为空 否 否 返回保存得分记 录 返回主菜单页面 图 3-3 得分保存流程图 3.3 系统数据需求 系统需要保存得分记录,使用的数据库是广泛应用于嵌入式设备的SQLite3。 表结构如下图: 列名 数据类型 字段长度 name text 50 date text 50 score int 6 7 连连看游戏 表3-1 数据库表结构 4 系统框架设计 4.1系统框架的组成 系统框架设计的核心是处理好各个视图之间的关系。本系统采用单视图控制器——多视图结构。用一个主视图控制器来控制所有的视图。视图根据不同的作用分为两类:Interface Builder(以下简称IB)初始化视图和代码初始化视图。前者偏重于界面设计,后者则偏重于功能实现。主视图控制器中所有视图的接口代码如下: @interface HomeViewController : UIViewController { UIImageView *backImage; UIView *menuView; UIView *gameView; InfoView *infoView; BackgroundView *backgroundView; RankView *rankView; SaveView *saveView; SetViewController *setViewController; UIProgressView *prograssView; UILabel *timeLabel; NSTimer *timer; Scoring *lastScore; UIAlertView *winAlert; } 如代码所示,背景图片视图、主菜单视图和游戏视图,为IB初始化视图。需要特别说明的是背景音量视图,它是一个视图控制器。由于需要实现播放和控制背景音量,为了初始化方便,所以使用视图控制器,但程序的逻辑结构里是和视图同等对待的。另外设置背景图片视图、排行榜视图、显示信息视图和保存记录视图都是使用代码初始化的视图,其中保存记录的视图只有在需要时才会显示。 4.2 视图之间的层次结构 背景图片视图总是放在所显示视图的后面,当其他视图在背景图片视图上面显示的时候要设为半透明,并且设置色度,以显示朦胧的背景效果。其中主菜单菜单的背景颜色代码如下: self.menuView.backgroundColor = [UIColor colorWithRed:0.831 green:0.831 blue:0.831 alpha:0.4]; 背景图片视图的位置是一直不变的,其他视图在显示的时候,要添加到主视图控制器的根视图上,当时图切换时,先把原有的视图从根视图上删除,再把新的视图添 8 连连看游戏 加成为根视图的子视图。 4.3 主菜单页面的设计 进入游戏后,首先显示的是主菜单页面,玩家通过点击按钮进入相应的页面。这个页面界面简单,控件类型较少,仅有五个按钮,在IB中完成设计,再把每个按钮关联到相应的事件上。当按钮被按下时,通过TouchUpInside 触发事件。然后视图切换,进入到相应的界面。 界面效果如下图: 图4-1 主菜单界面 5 系统详细实现 5.1 游戏界面的设计与实现 5.1.1 游戏界面的布局 游戏界面的布局设计在IB中完成。界面控件较多,是所有视图中最复杂的。其中时间进度条和计分标签使用IBOutlet 与XCode中的实例对象关联。返回按钮和重置按 9 连连看游戏 [10]钮分别关联相应的IBAction事件。 游戏中的水果图片都是按钮的背景图片,一共八行,每行八个。这六十四各按钮都IB中创建,尺寸都是40*40像素,类型均为Custom类型。和其他控件一起刚好铺满屏幕。这些按钮的tag值也是手工设定。从1到64,以便之后操纵它们使用。 图5-1 游戏初始化界面 5.1.2 游戏界面的初始化 初始化方法会在主菜单上单击开始游戏时和在游戏界面单击重置按钮时被执行。需要重新随即六十四个按钮的背景图片。把得分、时间和消除个数设为初值。 背景图片的初始化需要每次都有不同的图片分布结果。需要使用srand()函数对时间进行移位,每次得到不同的时间,再用时间去取得随机数。采用双循环嵌套方法,第一层循环里定义一个水果图片,在第二层里随机一个按钮,把这个按钮的背景图片设为上一层里定义的水果图片。代码如下: 10 连连看游戏 -(IBAction) setGame:(id)sender{ srand(time(NULL) << 2); for (int i = 1; i<9; i++) { UIImage *fruitImage = [UIImage imageNamed:[NSString stringWithFormat:@"q%d.png",i]]; for (int j = 0; j < 8; j++) { int tager = rand() % 64 +1; while ([(UIButton *)[gameView viewWithTag:tager] backgroundImageForState:UIControlStateNormal] != nil) { tager++; if (tager == 65) { tager = 1; } } [(UIButton *)[gameView viewWithTag:tager] setBackgroundImage:fruitImage forState:UIControlStateNormal]; [(UIButton *)[gameView viewWithTag:tager] setUserInteractionEnabled:YES]; } } } 在游戏的初始化需要前,先把所有按钮的背景图片都清理掉,并且把透明度恢复 为1,再调用按钮背景图片的初始化方法。此外还要把相关数据设为初值,添加一个 NSTimer,对游戏时间进行管理。代码如下: -(IBAction) resetGame:(id)sender{ for (int i = 1; i <= 64; i++) { [(UIButton *)[gameView viewWithTag:i] setBackgroundImage:nil forState:UIControlStateNormal]; UIButton *buttonA = (UIButton *)[gameView viewWithTag:i]; buttonA.alpha = 1; } [self setGame:nil]; residualTime = 1000; gameScore = 0; clearCount = 0; timeLabel.text = @"您的得分:0"; isSaveScore = 0; if (![timer isValid]){ timer = [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(UpdateTime) userInfo:nil repeats:YES]; } } 11 连连看游戏 5.1.3 游戏过程的实现 在主菜单页面,点击“开始游戏”按钮,进入游戏页面,游戏自动开始,计时器开始计时。游戏总时间为100秒,时间进度条随时间变化而较少。 -(void) UpdateTime{ residualTime -= 2; prograssView.progress = (float)residualTime/998; if (!residualTime) { [timer invalidate]; timer = nil; UIAlertView *lossAlert = [[[UIAlertView alloc] initWithTitle:@"时间到!" message:@"GAME OVE" delegate:self cancelButtonTitle:@"返回" otherButtonTitles:nil] autorelease]; [lossAlert show]; } } 点击一个水果图片后,把图片的alpha值设为0.7,图片变成半透明,并记录下按钮的tag值。第二次点击图片后,判断两次点击的按钮背景图片是否相同,并且两次点的不能是同一个按钮。如果图片不同,将上次的图片恢复为不透明,即把alpha恢复为1;如果图片相同,就把两个按钮设为透明,并且更新得分,将记录消除对数的变量加一。代码如下: // 更新时间方法 -(void) UpdateTime{ residualTime -= 2; prograssView.progress = (float)residualTime/998; if (!residualTime) { [timer invalidate]; timer = nil; UIAlertView *lossAlert = [[[UIAlertView alloc] initWithTitle:@"时间到!" message:@"GAME OVE" delegate:self cancelButtonTitle:@"返回" otherButtonTitles:nil] autorelease]; [lossAlert show]; } } 12 连连看游戏 图5-2 游戏进行中 5.1.4 游戏结果的判断 每消去一对图片,清除计数器clearCount会加一,当时间进度条减为0时,图片没有被消完,弹出警告框,提示游戏结束,过关失败。点击警告框上的“返回”按钮,返回主菜单界面。 // 在UIAlertView 中,通过代理的方式,返回到主菜单界面 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ [self goHome:nil]; } 13 连连看游戏 图5-3 游戏过关失败 如果在进度条的时间走完之前,就清除了所有的水果图片,弹出恭喜你过关的警告框。并计算最终得分,消除图片的得分加上剩余时间的得分。当消除图片对数等于32,并且时间还有剩余时,调用下面的方法。 -(void) didWin{ if ([timer isValid]) { [timer invalidate]; timer = nil; } lastScore = [[Scoring lowScore] retain]; int winScore = gameScore + residualTime; if (winScore > [lastScore score]) { isSaveScore = winScore; } winAlert = [[[UIAlertView alloc] initWithTitle:@"恭喜!" message:[NSString stringWithFormat:@"最终得分:640 + 剩余时间的分:%d 14 连连看游戏 = %d",residualTime,winScore] delegate:self cancelButtonTitle:@"返回" otherButtonTitles:nil] autorelease]; [winAlert show]; } 图5-4 游戏成功过关 5.2 背景音乐的播放与调节 5.2.1背景音乐的播放 程序打开以后,背景音乐会被自动播放。在主视图控制器的viewDidLoad方法 15 连连看游戏 中,调用音量视图控制器的方法playSound。 在设置背景音量的视图控制器里,有一个播放音频的类,被调用后,重复播放背景音乐。实现代码如下: SetViewController.h AVAudioPlayer *player; SetViewController.m -(void) playSound{ NSString *path = [[NSBundle mainBundle] pathForResource:@"Love" ofType:@"mp3"]; NSURL *url = [[NSURL alloc] initFileURLWithPath:path]; NSError *error; self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; if (!error) { NSLog(@"%@",[error localizedDescription]); } [url release]; [self.player prepareToPlay]; self.player.volume = 0.5; [self.player setNumberOfLoops:999999]; [self.player play]; } 5.2.2 背景音乐的调节 在控制音量的视图控制器里,有两个控件来调节音量。一个是控制背景音乐开关的switch控件,另一个是调节音量大小的slider控件。效果图如下: 16 连连看游戏 图4-6 背景音乐设置 当switch控件为开时,可通过下面的音量控制条调节音量。当switch控件为关 时,背景音乐关闭,音量调节的滑动条为不可操作。 //通过滑动条控制音量大小 -(IBAction) setVolume:(id)sender{ NSLog(@"%s",__FUNCTION__); //self.volumeSlider = (UISlider *)sender; [player setVolume:volumeSlider.value]; } //通过switch控制音乐开关 -(IBAction) offVolume:(id)sender{ NSLog(@"%s",__FUNCTION__); 17 连连看游戏 //self.volumeSwitch = (UISwitch *)sender; if ([self.volumeSwitch isOn]) { self.volumeSlider.alpha = 1.0; self.volumeSlider.userInteractionEnabled = YES; player.volume = volumeSlider.value; [player play]; }else { self.volumeSlider.alpha = 0.5; self.volumeSlider.userInteractionEnabled = NO; [player stop]; } } 5.3 数据库的连接与操作 5.3.1 数据库的连接 程序中使用到的数据库是SQLite3,通过SQLiteManager 创建数据库,然后倒导入 到程序中。在程序中,引入libsqlite3.dylib 框架。专门创建了一个类,用来打开和关 闭数据库。 //打开数据库的方法 static sqlite3 *dbPointer; +(sqlite3 *)dbSetup{ if (dbPointer) { return dbPointer; } NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSLog(@"%@",documentPath); NSString *realPath = [documentPath stringByAppendingPathComponent:@"rankDB.sqlite"]; NSString *srcPath = [[NSBundle mainBundle] pathForResource:@"rankDB" ofType:@"sqlite"]; NSFileManager *fileManager = [NSFileManager defaultManager]; NSError *error; if (![fileManager fileExistsAtPath:realPath]) { if (![fileManager copyItemAtPath:srcPath toPath:realPath error:&error]) { NSLog(@"%@",[error localizedDescription]); } } int result = sqlite3_open([realPath UTF8String], &dbPointer); NSLog(@"%d",result); return dbPointer; } //关闭数据库的方法 +(void) close{ 18 连连看游戏 if (dbPointer) { sqlite3_close(dbPointer); dbPointer = NULL; } } 5.3.2 数据的读取 数据库打开以后就可以对里面的数据进行操作了。根据程序的需要,创建了一个分数类,里面保存每条数据信息的内容。分数类还包含了三个类方法,分别可以读取数据库全部信息、插入一条数据和读取最低分数。其中,读取全部信息的方法如下: +(NSArray *)findAll{ sqlite3 *db = [DB dbSetup]; sqlite3_stmt *stmt; int result = sqlite3_prepare_v2(db, "select * from rank order by score desc limit 5;", -1, &stmt, NULL); if (result == SQLITE_OK) { NSMutableArray *ranks = [NSMutableArray array]; while (SQLITE_ROW == sqlite3_step(stmt)) { const unsigned char *_name = sqlite3_column_text(stmt, 0); int _score = sqlite3_column_int(stmt, 1); const unsigned char *_dateTime = sqlite3_column_text(stmt, 2); Scoring *aScore = [[Scoring alloc] initWithName:[NSString stringWithUTF8String:(const char *)_name] Score:_score DateTime:[NSString stringWithUTF8String:(const char *)_dateTime]]; [ranks addObject:aScore]; [aScore release]; } sqlite3_finalize(stmt); return ranks; } sqlite3_finalize(stmt); return nil; } 5.3.3 数据的写入 根据程序需要,当玩家的得分记录需要保存时,要往数据库里插入一个得分记录,并且需要把原来的最低得分记录删除。在一个方法里,分别执行两天SQL语句。先执行一条删除语句,根据最低得分记录的日期,将这条记录从数据库中删除。再把新的得分记录插入到数据库中。具体方法如下: 19 连连看游戏 +(void) insertName:(NSString *)aName Scroe:(int)aScroe DeleteDate:(NSString *) deleteDate{ sqlite3 *db = [DB dbSetup]; sqlite3_stmt *stmt1; int result1 = sqlite3_prepare_v2(db, "delete from rank where date = ?", -1, &stmt1, NULL); if (result1 == SQLITE_OK){ //sqlite3_bind_int(stmt1, 1, ID); sqlite3_bind_text(stmt1, 1, [deleteDate UTF8String], -1, NULL); sqlite3_step(stmt1); }else { NSLog(@"%d",result1); } sqlite3_finalize(stmt1); NSDate *date = [NSDate date]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateStyle:NSDateFormatterMediumStyle]; [dateFormatter setTimeStyle:NSDateFormatterShortStyle]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSString *dateString = [dateFormatter stringFromDate:date]; [dateFormatter release]; sqlite3_stmt *stmt; int result = sqlite3_prepare_v2(db, "insert into rank (name,score,date) values(?,?,?)", -1, &stmt, NULL); if (result == SQLITE_OK) { sqlite3_bind_text(stmt, 1, [aName UTF8String], -1, NULL); sqlite3_bind_int(stmt, 2, aScroe); sqlite3_bind_text(stmt, 3, [dateString UTF8String], -1, NULL); sqlite3_step(stmt); }else { NSLog(@"%d",result); } sqlite3_finalize(stmt); } 5.4 得分记录的保存与显示 5.4.1得分记录的保存 本游戏保存得分最高的五条记录,当游戏过关之后,从数据库里获取以保存的五 条得分记录里最低的得分。拿最低的得分与游戏得分比较,如果游戏得分大于最低 20 连连看游戏 分,则需要将得分保存。 //从数据库获取最低分 +(Scoring *) lowScore{ NSArray *tempArray = [self findAll]; return [tempArray objectAtIndex:4]; } if (winScore > [lastScore score]) { isSaveScore = winScore; } } 输入姓名的视图被加载,用户可以在此输入姓名。输入完成,点击保存,数据库自动更新数据,返回到主菜单界面。用户也可以点击返回按钮,直接返回,不保存得分记录。 图5-6 保存用户名视图 如果用户没有输入姓名而点击保存会弹出警告框,提示输入姓名。 21 连连看游戏 5.4.2 得分记录的显示 在主界面上点击排行榜按钮,切换进入排行榜视图。视图以表格视图的形式显示 数据。在程序中实现了tableView dataSource代理协议。通过重写协议的两个方法, 实现向表格视图中填充数据。 #pragma mark - #pragma mark tableView dataSource - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ NSLog(@"%s",__FUNCTION__); return 5; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ NSLog(@"%s",__FUNCTION__); static NSString *identifier = @"aaa"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; if (!cell) { cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:identifier] autorelease]; } Scoring *aScore = [source objectAtIndex:indexPath.row]; cell.textLabel.font = [UIFont systemFontOfSize:12]; cell.textLabel.text = [NSString stringWithFormat:@"%d, 姓名: %@ 分数:%d 日 期:%@",indexPath.row + 1, [aScore name], [aScore score] ,[[aScore dateTime] substringWithRange:NSMakeRange(0, 10)]]; return cell; } 22 连连看游戏 图5-7 得分排行榜 5.5 更改背景图片 只需更改背景图片视图的图片即可。在主菜单界面,单击背景图片按钮视图切换 至更改背景图片视图。 23 连连看游戏 图5-8背景图片设置 视图的下部,是一个滑动视图,所有背景图片的缩略图都在滑动视图上,可以通过视图进行浏览。每个图片都是一个类型为Custom 的按钮,缩略图是按钮的背景图片。所有的按钮都关联到同一个IBAction事件,通过sender 确定是哪个按钮被点击,再通过按钮的tag值找到相应的背景图片。 5.6 视图间的切换及动画效果 本系统所有视图均由主视图控制器负责管理。视图之间的切换都是由相应的动画效果连接。每次视图切换与返回,动画效果都是成对使用。所有的动画效果都是不同的,不会重复使用。 5.6.1游戏界面的进入与返回 进入动画效果是从下至上,游戏视图推动主菜单视图。主菜单视图被突出屏幕。 24 连连看游戏 返回的动画效果是从上之下,主菜单视图推出游戏视图。由CATransition实现,需要 [11]框架。 导入QuartzCore.framework //进入游戏时的动画效果实现代码: -(IBAction) doNewGame:(id)sender{ NSLog(@"%s",__FUNCTION__); CATransition *animation = [CATransition animation]; animation.delegate = self; animation.duration = 0.6f; animation.timingFunction = UIViewAnimationCurveEaseInOut; animation.type = kCATransitionPush; animation.subtype = kCATransitionFromTop; [menuView removeFromSuperview]; [self.view addSubview:gameView]; [[self.view layer] addAnimation:animation forKey:@"animation"]; [self resetGame:nil]; } //退出游戏时的动画效果实现代码: -(IBAction) goHome:(id)sender{ if ([timer isValid]) { [timer invalidate]; timer = nil; } CATransition *animation = [CATransition animation]; animation.delegate = self; animation.duration = 0.6f; animation.timingFunction = UIViewAnimationCurveEaseInOut; animation.type = kCATransitionPush; animation.subtype = kCATransitionFromBottom; [gameView removeFromSuperview]; [self.view addSubview:menuView]; [[self.view layer] addAnimation:animation forKey:@"animation"]; } 5.6.2 音效设置视图的进入与返回 音效设置视图是一个控制器,动画效果不同与其他视图。进入时的动画效果是从 下至上覆盖原视图,是由主视图控制器提交模视图完成。返回主菜单页面的动画效果 是从上至下新视图移出,原视图出现,由音效设置视图撤销模式图实现。 25 连连看游戏 //进入音效设置视图的动画效果实现 -(IBAction) doSet:(id)sender{ NSLog(@"%s",__FUNCTION__); [self presentModalViewController:setViewController animated:YES]; } //退出音效设置视图时的动画效果实现代码: -(IBAction) goBack:(id) sender{ [self dismissModalViewControllerAnimated:YES]; } 5.6.3 背景设置视图的进入与返回 进入和返回的动画效果都是由UIView的类方法实现,进入时动画效果是从右向左做翻转,用背景设置视图代替主菜单视图。返回的动画效果是从左向右做翻转,隐藏背景设置视图,显示主菜单视图。 //进入背景设置视图的动画效果实现 -(IBAction) doBackground:(id)sender{ NSLog(@"%s",__FUNCTION__); if(!backgroundView){ backgroundView = [[BackgroundView alloc] initWithFrame:self.view.bounds]; backgroundView.backImage1 = self.backImage; } [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:1.0]; [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES]; if (![backgroundView superview]) { [self.view addSubview:backgroundView]; }else { [self.view bringSubviewToFront:backgroundView]; } [UIView commitAnimations]; } 5.6.4 排行榜视图的进入与返回 进入和返回的动画效果也是由UIView的类方法实现,进入时动画效果是从右向左做翻转,用排行榜视图代替主菜单视图。返回的动画效果是从左向右做翻转,隐藏排行榜视图,显示主菜单视图。方法与背景设置视图的进入与返回类似。 5.6.5 简介视图的进入与返回 进入的动画效果是用从下向上翻页的方式显示简介视图,返回的动画效果是主菜 26 连连看游戏 单视图从上向下翻页覆盖简介视图。同样是有UIView的类方法实现。 总结 经过两个半月紧张的毕业设计,连连看游戏以基本完成。系统功能已经实现,测试运行也完全正常。该系统完成了游戏主菜单选择功能、游戏界面随即初始化、计分与计时功能,还实现了查看最高分、更改背景图片和调节背景音乐功能。通过手指触摸来操作游戏,是游戏更易控制。还提供了有好的用户界面,给玩家带来良好的用户体验。 在毕业设计的初级阶段,主要学习了与本课题相关的理论知识,包括:Objective-C语言、苹果公司的Cocoa Touch 框架结构,还有XCode 集成开发环境和Interface Builder界面设计工具。由于要使用到数据库系统,又学习SQLite数据库的使用。正是通过这些工具和技术,完成我的毕业设计。 通过这次毕业设计,感受到了移动开发的力量。虽然目前移动开发还是比较的前卫的,但是移动生活离我们也并不遥远。虽然设计的只是一个小游戏,之前在PC机上也已经存在类似的东西,但是这次能让它能在手机上运行还是令我兴奋不已。因此,做了一个大胆的预测,在不久的将来,移动设备将主导人们的生活。我这是完全可以的,现在3G网络已经覆盖全国,移动网络的带宽甚至已经超过了一些宽带网络。4G 网络技术已经成熟,不久也会被推广。届时网速将不再成为移动技术发展的制约因素。自从苹果公司推出iPhone手机以来,引发了一场移动设备的变革,手机在用户交互性、智能性和高性能性上发展迅速。近期,以iPhone4 为代表的新型智能手机性能更是强大,拥有1G主频的处理器,512M的内存,性能也不再成为移动发展的瓶颈。在未来移动互联网将真正走进每个人的生活,人们的生活、学习、交流甚至是日常工作都会依赖它。赖至程度要远强于现在对传统互联网的依赖程度。移动技术将彻底改变人们的生活方式。 参考文献 [1] Erica Sadun [美](iPhone开发秘籍(第2版)(人民邮电出版社2010.11 [2] Mark Dalrymple & Scott Knaster(Objective-C基础教程(人民邮电出版社2009.8 27 连连看游戏 [3] Christopher Allen & Shannon Appelcine [美]. iPhone开发实战. 人民邮电出版社 2009.10 [4] Dave Mark & PJ Cabrera [美]. iPhone游戏编程实例. 人民邮电出版社 2010.8 [5] 许署宏. 玩到极致——用iPhone几乎可以做任何事. 人民邮电出版社 2011.1 [6] developer.apple.com/iphone/ [7] John Ray & Sean Johnson [美]. iPhone开发入门经典. 人民邮电出版社 2010.8 [8] Gary Bennett 、Wolfgang Ante 、Mike Ash 等 [美]. 精彩iPhone炫酷开发. 人民邮电出版社 2010.10 [9] 张英锋、刘超. iPhone应用程序开发指南(基础篇). 山东科学技术出版社 2010.4 [10] Aaron Hillegass [美]. 苹果开发之COCOA编程. 电子工业出版社 2009.8 [11] 王彬、孙玲延、张永等. 玩转我的iPhone4. 机械工业出版社 2011.1 致谢 在本文结束之际,首先向我的导师王老师致以崇高的敬意和衷心的感谢。王老师在专业课程的学习、素材的收集、课题的确立、资料的查阅都给以热忱的关怀和细心的指导。感谢我的家人,正是你们对我关怀,使我能够克服一切困难和艰辛。感谢和我在一起培训的同学们,这段时间在外学习,我们大家生活上互相帮助,学习上共同进步。这一切都是我完成毕业设计的动力和资本。 还要感谢软件学院各位老师,大学四年时间里,老师们深厚的学术功底、旺盛的工作热情和平 28 连连看游戏 易近人的态度使我受益匪浅。 最后,祝愿老师们:身体健康,工作顺利~祝愿同学们:事业有成~祝我的母校南阳理工学院 桃李满天下~ 29
/
本文档为【连连看游戏】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
热门搜索

历史搜索

    清空历史搜索