开心消消乐游戏的设计开发与实现毕业论文.pdf
摘要本设计主要是基于C+开发的开心消消乐游戏设计开发与实现,包括其中很多核心内容原理的思路与解析,该游戏较于世面上的同类 型游戏的话,更加的简单,然后内容也更加的充满趣味性,而且由于 我们是使用Cocos2d-x这款引擎编写的,Cocos2d-x是MIT许可证下 发布的一款功能强大的开源游戏引擎,他允许开发人员使用C+、JavaScript及Lua三种语言来进行游戏开发。这款引擎支持所有的常 见平台发布与打包。关键词:C+;Cocos2d-X;开心消消乐游戏This document is produced by trial version of Print2Flash.Visit for more information目录引言.1一系统开发主要技术.21.1 C+简介.21.2 Cocos 2d x 弓擎.2二游戏需求分析架构设计.32.1游戏要求.32.2游戏功能.32.3运行环境.3三游戏详细设计.43.1游戏框架设计.43.2登陆界面设计.53.3游戏内容设计.73.4游戏其它功能的实现.9四系统实现.124.1登陆界面.124.2游戏界面.134.3游戏胜负界面.13五系统测试.155.1代码检测.15This document is produced by trial version of Print2Flash.Visit for more information5.2游戏测试.155.3用户体验测试.15六总结.17致谢.18参考文献.19This document is produced by trial version of Print2Flash.Visit for more information引言在科技日益发展的今日,智能手机已经成为了我们生活中必不可 少的一部分,无论是上班,休息。我们都会时时刻刻离不开手机,而 且伴随着手机的性能越来越好,手机游戏也成了当下一个非常热门的 一个赚钱项目。手机游戏他不但有着十分广阔的发展前景和市场。而 且还隐藏着无穷潜力等待着我们这辈人去探索。而手机游戏又分为单 机游戏跟网络游戏这两大类别,而其中无疑网络游戏蕴含的商机更为 巨大,因为是网络游戏则可以推出更多的社交性的,带有趣味性的产 品与id eao但是单机游戏也是我们无法忽视的一个大蛋糕,而且单机 游戏的门槛更低,所以这些年来,致力于开发手机单机游戏的互联网 公司如雨后春笋一般连绵不断,正是证明单机游戏这个蛋糕的巨大和 他无穷无尽的潜力。而网络游戏开发相较于单机游戏开发门槛无疑拔 高了一个档次,因为你不但要开发这款游戏,你还要具备强大的物力 以及人力去宣传,维护,及时的更新更多新的内容来留住客户。但即 便如此,还是有很多很多人投向了手游的海洋,这也正是证明了在中 国这个全球最大的通信市场,手游拥有着无穷无尽的商机。This document is produced by trial version of Print2Flash.Visit for more information一系统开发主要技术1.1 C+简介简介1.1.1C+的概念C+是一种使用起来十分广泛的计算机编程语言。C+是一种静态 数据类型检查的,支持多重编程范式的通用程序设计语言,他支持过 程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程 序设计等多种程序设计风格。1.2 Cocos2d-x 引擎引擎这次游戏的制作我们会使用到Cocos2d-X这款引擎,因为这款引 擎拥有完善的游戏功能支持,包含精灵、动作、动画、粒子特效、场 景转换、事件、文件10、数据持久化、骨骼动画等等非常优秀的功能。同时他还可以在PC端进行游戏的测试,然后再发布到移动端,这样 大大减少了游戏开发时间。This document is produced by trial version of Print2Flash.Visit for more information二游戏需求分析架构设计2.1游戏要求游戏要求1.游戏能满足人们在任何时候任何地点都能随时上手,并且整个 游戏是不产生任何消费。2.游戏采用分模块编写方式,这样可以很快捷的更改游戏内容及 某一特定功能,以及以后的发布的活动都只需要更改相应模块的代 码。2.2游戏功能游戏功能软件主要实现了:关卡选择功能、单人游戏功能、三消算法逻辑 等。2.3运行环境运行环境硬件接口:支持所有常见平台。并且能够包容市面上常见的机型 运行,不存在造成任何游戏卡顿等现象。This document is produced by trial version of Print2Flash.Visit for more information三游戏详细设计3.1游戏框架设计游戏框架设计3.1.1编写游戏框架使用Cocos新建一个项目,然后我们将项目名字命名为Happy eliminate,引擎类型修改为预编译库,这样可以减少内存的负担,项 目语言我们选择C+,如下图3-1所示,最后我们点击完成就可以了。图3-13-1创建Happy eliminateHappy eliminate的向导界面1 1然后再在Cocos Stud io的主菜单中,选择项目主菜单,点击发布 与打包。这样我们一个新的Cocos项目就创建好了。然后我们使用 Cocos打开我们新创建的项目。找到AppDelegate.cpp文件,修改好我 们需要的屏幕尺寸,因为消消乐是一款竖屏风格的益智小游戏,所以 我给他设置的界面尺寸是960X680,这也是现阶段主流的屏幕尺寸大This document is produced by trial version of Print2Flash.Visit for more infbnnation 小。3.1.2搭建游戏主要框架这款游戏在我的设计里我给它设计了四个场景,开始游戏场景,选择关卡场景,游戏场景,胜负结算场景。接下来就是四个场景的搭 建,我们需要找到$rc文件夹,然后创建三个Cpp,因为我准备把选 择关卡放在层上添加到我们的游戏场景里面,所以这里我们不必要再 重新创建一个新的场景来加载我们的选择关卡。效果如下图3-2所示。A-引用A 眉1 resou rrcmPP曰a曰曰 mmJeJeooE-teN 苔苔苔苔苔苔J2n图3-23-2搭建游戏主要框架3.2登陆界面设计登陆界面设计框架搭建好了,现在我们需要来实现我们每个场景里面的功能与 图片的摆放。首先我们要获取到整个界面的大小。这一点我们可以通This document is produced by trial version of Print2Flash.Visit for more infbnnation 过Director导演来获取到当前界面getVisibeSize();当我们获取到他的Size之后就可以开始我们界面搭建了,首先我 们要创建一个Sprite类的一个图片当作背景。我们首先将这个精灵的 AnchorPoint锚点位置设置为中心,然后我们就可以开始设置他的 Position坐标了,因为我们前面已经知道了这个界面的wid th宽和 height高了,我们就可以直接把他的X跟Y的坐标设置成wid th和 height的一半,也就是当前界面的正中心位置。背景创建好了之后我们就要来创建背景上面的Button按钮及 LOGO的摆放。Cocos2d-X里面Button的创建需要传递两张图片,一 张代表点击前的状态,一张是点击后的状态。如果你只传了一个图片 的话,他的点击状态都会默认为是这个不会改变。我们需要在开始界 面创建两个Button精灵,一个代表开始游戏BtStart,一个代表结束 游戏BtEnd o当我们需要的两个按钮创建好了之后。我们就需要往这 两个按钮上面添加一个点击事件方法了。Cocos2d里面的按钮点击事 件是ad d ClickEventListener方法。在开始游戏按钮的点击事件里 面,我们需要给它添加上一个点击音效和一个跳转场景的方法。当我 们点击开始游戏按钮之后,界面直接跳转到我们的选择关卡模块,之 前的场景也会在内存池中自动释放掉。然后我们在结束按钮里面也同 样的,先添加一个点击的音效,然后我们给他添加一个方法,当我们 点击到结束按钮之后,我们的程序将会自动退出。同时会删除所有本 地资源。This document is produced by trial version of Print2Flash.Visit for more information3.3游戏内容设计游戏内容设计3.3.1消除的几种类型作为一个传统的三消类游戏,消除的类型基本上分为横竖三消,横竖四消,横竖五消。再扩展一下的话,我们也可以做一些更加具有 趣味性的消除类型,例如当你出现消除五个同样的动物头像时候,我 们可以在消除的位置上生成一个万能动物头像,这个万能动物头像可 以与所有类型的动物头像相匹配,当使用万能动物头像消除成功的时 候,我们会把当前列或者是行上的所有动物头像全部消除。这样设计 可以使得这个游戏更加充满趣味性。3.3.2精灵的随机生成当我们的界面基本搭建完成之后我们就要开始着手实现我们游 戏里面的功能了。首先我们要实现精灵的随机生成。实现精灵随机生 成这个模块我们就要用到C+里面的随机数Rand方法了。他的区间 在0-0.99之间,我们首先使用随机数随机出来一个1-6中间的数来代 表我们这个精灵的Type类型。不过在游戏区域创建之前,我们还需 要创建一个数组来存放我们的精灵种类以及自身的坐标,因为后面我 们的消除判断需要用到这些东西,然后我们就可以在我们的游戏区域 里面创建这些精灵了。这一步的实现我们只需要用到两个for循环去 排列就可以很轻松的实现出来。3.3.3交换精灵位置以及交换数组位置如果我们要交换精灵的位置,首先的一点我们要获取到两个精灵 各自的坐标,这一点我们可以用到触摸监听事件来获取到两个精灵各This document is produced by trial version of Print2Flash.Visit for more information 自的坐标,后面会详细讲到怎么去获取两个精灵的坐标。当我们获取 到两个精灵的坐标时,我们就可以很轻松的交换他们俩个的坐标就可 以了。这样我们交换精灵位置的方法就写好了,只需要在后面调用这 个方法就能够很轻松的执行交换两个坐标的方法了。因为我们创建这 个精灵列组的时候,我们还创建了一个一维数组,所以当我们交换了 他们两个精灵的位置的时候,我们还需要在我们的一维数组之中也对 他们两的位置进行交换,这样我们后面需要调用这个一维数组索引时 候才不会发生位置不对的情况。3.3.4遍历移除数组并删除首先我们先要定义一个nod e节点,因为我们需要用到这个nod e 节点来遍历数组里面所有的指针,然后再来进行我们的移除操作,当 我们要开始移除的时候,首先我们需要对我们这个数组进行遍历,从 第X行遍历到第八行,在遍历里面首先我们要获取到当前要删除的精 灵在数组上面的位置,以及我们还要获取到当前要删除精灵上一行的 那一个精灵的位置。然后我们将第二个精灵的节点移动到我们的 nod e节点位置上,再把我们要删除的精灵节点网上移动80PX像素,最后再把他们在数组里面的位置进行一个交换的操作就好了。我们的 删除方法就可以删除当前数组里面任何的一个位置上的节点。3.3.5消除的判断以及删除因为我们所有动物头像全部是生成在一个数组里,在这个数组里 我们记录了他们的所有位置坐标,以及他们的类型,这个时候我们就 可以创建一个点击监听事件。当我们每次触摸屏幕的时候,我们会获This document is produced by trial version of Print2Flash.Visit for more information 取到第一次点击时的坐标,因为前面我们生成精灵的时候是把他们全 部放在一个数组里,然后数组里是记录了他们每个动物头像的坐标,这样我们就可以很容易的通过遍历整个数组的方法去知道我们当前 第一次点击的坐标对应的头像是哪一个。同样我们第二次点击也可以 很容易知道相对应的动物头像,接下来我们就要进行判断,当然在判 断他们能否交换位置之前我们还需要一个判断。判断我们两次点击的 坐标在数组之中是否是相邻,如果是相邻的我们才能进行接下去的判 断,如果给我们返回一个不相邻的状态,那么我们直接返回return,跳出我们当前的触摸点击事件,同时两次点击的坐标记录也会同时被 加入进内存池里面。如果他们是处于一个相邻的状态,那么我们就可 以进行接下来的判断了,因为我们已经知道了两个动物头像的各自类 型,这样我们就可以遍历整个数组,如果我把他们俩的位置进行一个 交换,是否可以进行一个消除的动作,如果可以消除,则进行两个头 像之间的交换,交换之后会进行我们的一个删除动画效果,然后再在 我们的数组里面将这两个精灵删除掉,同时我们又会生成对应删除数 量的精灵加入到我们当前的这个数组之中,并在游戏界面上面做一个 生成并下坠的动画。如果交换过去并不能触发我们的这个消除事件,这种情况下我们就会触发我们的else判断里面,在else判断里我们 是不发生交换动作。3.4游戏其它功能的实现游戏其它功能的实现3.4.1添加进度条(1)ProgressTimer 布局This document is produced by trial version of Print2Flash.Visit for more informationProgressTimer是Cocos2d的进度条方法,因为我们最后的胜负判 断是判断消除了多少个,所以我计划用进度条来显示剩余消除个数,这样的话可以更加简洁明了。用Label来实现分数当我们进度条添加好了之后,就可以用Label文本来显示我们消 除之后的分数,我们可以为了美观,不使用我们的自带字体,重新设 置卡通字体。这就要设计到我们Cocos2d的另一个API T,LabeIBMfnt,他的作用就是可以让我们在代码里使用各种各样的卡通字体或者是 卡通的FNT类型字母之类,这也是我们会经常用到的一个比较常用的 API组成。3.4.2添加音效完整的应用程序是肯定缺少不了音效的,包括背景音乐,特效点击,消除音效,按钮点击音效等等。如果我们没有音效,这样会大大降低 我们的游戏体验功能,也会使用户对我们的产品提升不了兴趣。好的 音效会让人眼前一亮,我们首先重新创建一个单独的Music类来存放 我们的声音文件,我们选择音乐文件的时候可以尽量不要选择MP3 格式的音乐文件,因为如果我们使用这个格式的文件会造成大量的内 存浪费,最后导致的效果会使得我们的游戏帧率变得很低。当我们创 建好我们的Music类了以后,然后我们在这个类里面定义一个函数方 法,他的作用是用来保存我们的所有音乐文件。我们把他命名为 preload Aud io,这样我们的音乐文件就加载到我们的代码之中了。然 后我们就可以在类里面分类别写方法给特定音效的调用了。我们目前10This document is produced by trial version of Print2Flash.Visit for more information只需要使用到背景音效,点击音效,以及两个消除精灵之后的音效。11This document is produced by trial version of Print2Flash.Visit for more information四系统实现4.1登陆界面登陆界面现在我们的核心算法已经基本上写完了,接下来就是开始组合拼 接各个模块,让他们连在一起成为一个完整的游戏了。首先第一个界 面还是要我们的登陆界面,因为考虑到是单机版,所以我们并没有做 账号密码登陆处理,我们还是采用的传统的按钮登陆。首先我们通过 init方法加载我们的界面出来,因为前面我们也简单讲解过我们登陆 界面的具体布局跟按钮的各自点击效果。登陆页面显示效果如下图 4-1所示。图4-14-1登陆页面显示12This document is produced by trial version of Print2Flash.Visit for more information42游戏界面游戏界面我们的游戏界面,主要是由我们的进度条,分数,剩余步数,以 及我们的游戏面板组合而成,进度条跟分数会直观的显示我们当前的 分数情况。当进度条到达满值百分之百的时候游戏即为胜利。当我们 的剩余步数为0的时候。则表示我们的游戏宣告失败了。游戏主界面 显示效果如下图42所示。43游戏胜负界面游戏胜负界面当我们游戏胜利时,则调用我们的游戏胜利模块,会弹出我们的13This document is produced by trial version of Print2Flash.Visit for more information 胜利界面,反之当我们游戏失败未在规定步数获得胜利,则会弹出我 们的游戏失败界面。如果想选择重新开始游戏,可以点击我们的重新开始按钮就可以继续新的游戏。胜负显示效果如下图4-3所示。图4-34-3游戏胜利界面显示This document is produced by trial version of Print2Flash.Visit for more infbnnation五系统测试5.1代码检测代码检测当我们的一款APP制作接近尾声时,我们就要开始对我们的代码 开始进行检测以及一定必要的优化。因为这样首先可以对内存的占用 再做一个优化,然后可以查漏补缺看我们是否还有测试的代码未删 除,因为如果还有测试代码未删除的情况下,我们是不能打包成 And roid安装包使用的。所以这一步是我们最后测试必不可少的一步,而且我们需要认真对待,仔细检查每一行代码是否规范,以及每一行 代码是否还存在着漏洞之内的事情。当我们代码检测完成之后,就可 以开始我们下一步的检测了。5.2游戏测试游戏测试当我们检查完代码之后就表明我们的代码已经是较为规范并未 存在什么BUG之内的问题,接下来我们就要开始我们系统测试的第 二步,也就是我们的游戏测试了。也简称为内测环节。这一步很有趣 同时也非常枯燥,因为我们要不断的重复使用我们游戏之中的某一个 功能,然后看我们的代码是否会出现内存不足报错,或者是出现无法 解决的问题导致游戏崩溃。不过一般经过第一步测试之后,也就是检 查完我们的代码之后,这个问题也会很少的出现,即使出现之后,因 为我们都是把每个功能分模块完成的,所以我们可以很快的找到我们 的问题根源进行修改。5.3用户体验测试用户体验测试在我们的游戏测试完成之后,就可以进行我们的最后一步测试15This document is produced by trial version of Print2Flash.Visit for more informationT,这一步测试是用户在实际应用环境下所进行的真实数据测试。在我们这个测试环节之中,我们要遵循以下几个原则,首先我们 这个用户体验测试必须覆盖到我们游戏所涉及到的所有年龄阶段,这 样我们才能得到我们用户的真实反映,有助于我们对游戏的更好改进 以及对游戏未来走向的更好把控,其次是我们要第一时间获取到我们 体验用户反馈给我们的信息以及建议,并在可行性大的情况下第一时 间进行升级或者是进行修改。最后,当我们每次修改完我们的内部代 码之后,我们一定要保存自己再进行一遍内部测试然后再进行用户体 验测试,这样使我们的用户拥有更好的游戏体验。当我们用户体验测试完成之后,证明我们这个游戏已经是一个成 熟的游戏了,证明他已经拥有上架商店的资格了。16This document is produced by trial version of Print2Flash.Visit for more information六总结当我们做到这一步的时候,证明我们之前都已经优秀的完成了,已经独立自主开发了一款属于我们的游戏,因为我们这个游戏是用 C+进行编程设计的。所以在性能方面是非常卓越的,并且我们使用 的是Cocos原生引擎进行编写,所以他可以很好的支持我们所有平台 的发布以及打包工作,而且该游戏可以满足用户日常休闲娱乐的需 求,充满趣味性不受时间,地点,人物的限制。而且该游戏还提供了 非常好的游戏交互界面,还拥有着十分强大的跨越年龄代沟的问题。再说道后续升级维护的问题,因为我们所以东西都是分模块完成或者 分类完成,这样的代码具有极强的观赏性。当然也可以更好的便于我 们后台的及时更新以及维护等相关事宜。而且后期我们还可以采用数 据的动态管理存储等多种优势功能,可以大大的降低我们的研发时 间,还可以吸引更多的游戏玩家,并以此来扩大手机休闲游戏的影响 力,为研发者带来更大的经济效益。17This document is produced by trial version of Print2Flash.Visit for more information致谢在我做到这一步的时候,我第一个想到的就是我的指导老师,十 分感谢刘老师对我毕业设计提出的各种建议以及哪些地方需要增删 改换等等。当然在完成的过程中,我的很多同学都给予了我非常大的 帮助,在此我非常感谢,谢谢你们帮我查阅资料,谢谢你们不厌其烦 的为我解决学术上的疑惑以及各种各种千奇百怪的问题。我自己都有 点觉得挺烦人的。你们还是一如既往的帮助我,给予我支持,再次谢 谢你们的帮助,你们这种乐于助人的精神将伴随着我的一生。在此,再次感谢所有关心,帮助支持我的导师和同学们。当然,也非常感谢各位答辩委员会主席,委员老师,这份毕业设 计是我在整个大学期间学习的回报和总结,可能因为我的自身能力以 及时间上的一点点不充裕,毕业设计可能还存在一些问题以及缺陷。在此,希望各位专家老师给予我批评指正,我一定会好好改正。This document is produced by trial version of Print2Flash.Visit for more information参考文献1 张丽娜.基于C+语言的三消类游戏的设计J.微型计算机应用.2017(12)2 王玉山.C+程序设计语言的实践教学建设J.中小企业管理与科 技(上旬刊).2017(01)3 董昌源,刘疆,王仁鹤。浅谈C和C+异同J.艺术科技.2016(29)4 李欣然,赵山林.C+语言程序设计中多态问题分析J.计算机时代.2017(02)5 陈贝,许庆国.基于静态检测的C+内存泄漏分析J.计算机工程与 科学.2016(02)6 何海棠,文万志,丁浩,陈森博.C+课程中思维导图的应用探索J.无限互联科技.2016(22)7 张银霞,耿蕊,李敬有.融合计算思维的“C+程序设计”案例教学 实践J.工业和信息化教育.2016(11)8 徐萍.C+语言中悬挂指针的研究与应用J.电脑知识与技术.2016(23)9 唐爱平,王成杰.基于摒弃法的数独C+的算法与实现J.福建电脑.2016(11)10 朱骏,陈琳琳,朱娴,谢玲,帅辉明.独立学院计算机专业C+课程教学改革与实践J.中国教育技术装备.2017(02)19This document is produced by trial version of Print2Flash.Visit for more information20This document is produced by trial version of Print2Flash.Visit for more information