《连连看毕业设计论文.doc》由会员分享,可在线阅读,更多相关《连连看毕业设计论文.doc(42页珍藏版)》请在三一办公上搜索。
1、摘要现如今,不管在哪个小游戏网站上,“连连看”游戏总是受广大玩家所喜爱。不分男女老少,适合大众的集体休闲、趣味、益智和娱乐于一体的经典小游戏。其老少皆宜的特点使得该款小游戏常常在游戏排名的前几位。本游戏实现了主菜单和界面的显示、时间限制功能、能够根据规则消除相同棋子、游戏升级功能、消除提示功能、棋子换盘功能、英雄榜的更新并且支持背景音乐播放功能。每消去一对棋子,游戏限制时间自动延长。当时间全部消耗完的时候,游戏结束。在有限的时间内,消除全部棋子,自动升级,并重新开始新一个等级的游戏。每升一个等级,游戏的时间消耗就会变得更快。简洁美观的外表,加上引人入胜的功能,使得这款小游戏的可玩性、娱乐性大大
2、增加。关键字:连连看;娱乐;升级;棋子;可玩性ABSTRACT Nowadays Link Game is preferred by game players as its seen on almost every mini-game website. Link Game is a classic game with the combination of relaxation, intelligence, entertainment and fun. And its very popular among people at all ages, which is why it ranks bef
3、ore many other mini games. The main menu of the game is just on the corner of the viewing screen which makes it easy to operate the whole picture. And it has functions of time limit, game upgrading, the removal of hint, the change of images and the update of hero rank. It also has background music.
4、Every time a pair of images which have the same picture is eliminated, it adds some time accordingly. When time is up, the game is over. If all the images are eliminated within the game time, it upgrades automatically and it goes into another level of the game. Every step forward the time become les
5、s. The concision of the game and its ingenious functions make it a successful mini game which more playable and more entertaining.Keyword:linking game; entertainment; upgrade; pawn;operability目录1 绪论11.1 开发背景11.2 目的和要求11.3 国内外研究现状21.4 可行性分析31.5 分析结论41.6 方案论证42 开发技术及开发环境62.1 Visual Studio 6.0简介62.2 Vi
6、sual C+开发工具的特点62.3 运行环境73 系统需求分析及设计83.1 系统功能需求83.2 概要设计103.2.1 总体设计103.2.2 游戏菜单结构的设计113.3 连连看游戏的详细设计113.3.1 游戏各功能的设计描述113.4 相关技术与重点难点133.4.1 相关技术133.4.2 系统的重点难点143.5 游戏各功能流程图153.6 主对话框的设计与实现193.6.1 主对话框的设计193.6.2 主对话框的实现193.7 棋子类的设计与实现203.7.1 棋子类的设计203.7.2 棋子类的实现213.8 人机界面设计234 连连看游戏的调试254.1 主界面和界面显
7、示功能调试254.2 消除相同棋子的功能调试264.3 游戏升级功能的调试274.4 消除提示功能调试284.5 棋子换盘功能的调试294.6 消除提示功能的调试30结论31致谢33参考文献34附录 A 英语原文35附录B 汉语翻译371 绪论1.1 开发背景连连看的主要游戏规则来源于“四川麻将”,是给一堆图案中的相同图案进行配对的简单游戏。网络小游戏制作的目的是满足了人们休闲的需要,在紧张工作之余休闲类的小游戏能够给人带来最大程度的放松,也可以增进人们之间的交流,沟通,通过游戏还可以认识更多的朋友,也可以到达跨省、跨市,甚至跨国间人们互相娱乐的目的。通过此次课题的设计,学习和掌握如何制作一款
8、游戏软件,熟悉游戏软件制作的步骤,为以后的学习和工作打下基础。1.2 目的和要求连连看游戏主要是鼠标两次点击的图片能否消去的问题。当前,前提是点击两张相同的图片,若点击的是同一张图片或者两张不同的图片,则不予处理。在两张想同图片所能连通的所有路径中,如果存在一条转弯点不多于两个的路径,就可以消去;如果没有,则不予处理。此程序的课题内容及目标如下: 设计一款适合大众的充满集合娱乐、休闲、趣味益智和娱乐于一体的单机小游戏。功能完善,可玩性高,界面美观,操作简单。(1) 能实现主菜单和界面的显示(2) 随机生成游戏界面,具有时间限制功能。(3) 方块选中后图片要有突出显示。(4) 选择两个图案相同的
9、方块,并以不超过两个转弯的连线将它们连接起来,便可以消除这对方块,每一局里玩家需要在规定的时间内消除所有的方块,当完成任务后,才能进入下一关卡。(5) 当出现无解的局面时,可以重新换牌,当时间为0时游戏结束。(6) 选择提示功能时,游戏自动突出显示两个可以消除的方块,并且提示次数减少一次。(7) 英雄榜的更新,当玩家当前的记录高于先前的记录,在游戏结束时,自动更新英雄榜。(8) 支持背景音乐播放功能。1.3 国内外研究现状电脑游戏在我国起步虽晚,发展却并不为慢。作为后来者,国内业界同行们的信心、勇气和紧迫感曾经着实令玩家们欣慰。让我们记住这些在国产游戏事业上曾经洒过汗水的年轻人,正是他们的创新
10、精神和勇气,才使得国产游戏在并不宽松的环境下蓬勃发展至今。与单机游戏日渐衰落正相反的是,网络游戏方兴未艾,遍地开花。但是,与此同时, 我们也看到了,在繁荣的背后,潜在的危机, 一是来自国内游戏制作者在游戏制作理念上的不足和困乏,另外就是资金问题,这两方面与欧美游戏制作差距很大。在美国,集中了许多计算机软件的设计人才,他们工作之余,时常喜爱编一种能与人斗智的“游戏”,以此来锻炼编程的能力。这种“游戏”花样繁多,但其特点都是利用计算机软件事先设计好的“分析”、“判断”能力反过来与人较量。由于不断修改更新,使计算机的“智力”水平与人难分高低。 连连看这款游戏来源于中国,现在已风靡全世界。连连看游戏从
11、出现到现在已经更新了好多版本,比较知名的有蔬果连连看、水晶连连看、阿达连连看和宠物连连看等不同版本,现在已经有FLASH版本,游戏起来更加方便,无需安装,打开网页即可游戏,最近更是出现网络版本,QQ连连看就是这样一款连连看游戏的网络版本,可以通过网络与其他玩家一起进行游戏,而且地图更为繁多,道具更为丰富,极大地增强了游戏的乐趣。今天,当我们回顾电子游戏最初为什么能吸引人,我们不难悟出这样的道理:电子游戏满足了人们对竞争和对抗的渴望,它总是给予竞争者以新的难题。同时,它还能为胜利者提供崭新的画面和音乐享受。1.4 可行性分析可行性分析(feasibility study ),世界上普遍采用的一种
12、研究工程项目是否可行的科学。目的:它通过各种有效的方法,对工程项目进行分析,从技术、经济、财务等方面加以评价,最终给投资决策者提供是否选择该项目进行投资的依据。可行性分析的焦点是:要站在咨询的立场上;要有多种替代方案;对各种方案作经济比较;决定最佳投资时间和投资规模;提出可能实施的具体措施;着眼于资源的有效利用;站在中立客观立场上得出结论。经济可行性:开发本程序首先需要计算机一台,奔腾3以上CPU,256MB以上内存,40G以上硬盘即可以,大约五千元左右。软件方面,正版Microsoft Visual C+ 6.0光盘价格为五千二百元,正版操作系统Windows XP 简体中文专业版价格大约在
13、两千元左右,购买书籍二百元,开发此程序需要的时间大约需要三个月左右的时间,其中所消耗的人工费每月一千元,共计三千元,所以开发此游戏程序的成本共计一万五千元四百元左右。开发出的产品倘若在因特网下载,一个注册码费用为十元,只需下载一千五百四十次即可收回成本。在高速发展的信息时代,一千五百四十次的下载不成问题。所以,从经济角度来讲,开发本程序是可行的。 技术可行性:设计连连看游戏程序需要通过菜单和鼠标对游戏进行操控,游戏的界面需要大量的绘图机制,以达到操作简单、界面美观的目的。Visual C+6.0为用户提供了一个可视化、通用的应用程序集成开发环境Developer Studio(也俗称Visua
14、l Studio)。Developer Studio包含了一个文本编辑器、资源编辑器、工程编译工具、一个增量连接器、源代码浏览器、集成调试工具以及一套联机文档(MSDN)。通过Developer Studio,开发人员可以完成项目工程的创建、程序的编辑、修改、运行和调试等各种操作。Developer Studio采用标准的多窗口用户界面,提供了大量实用工具以支持可视化编辑的特性,包括项目工作区、AppWizard(应用程序向导)、Class(类向导)、WizardBar(向导工具条)、ComponentGallery(组建画廊)等。在ComponentGallery(组建画廊)中,Visual
15、 C+6.0为用户提供了一组常用的应用程序组件,分为两类,分别是Developer Studio Components和Register ActiveX Controls。其中Developer Studio Components包含了经常使用的一些标准的Windows应用程序特性,例如,弹出菜单、剪贴板、对话条、启动画面、定制状态条、日积月累对话框等,所以,可以通过ComponentGallery实现菜单制作、鼠标操控等功能,而绘图功能也可以通过Visual C+6.0为用户提供的GDI库完全实现。对于菜单的制作通过默认的框架结构即可实现,然后通过框架改造达到要求的条件。鼠标交互功能的实现可
16、以通过对鼠标左键被按下时触发的命令消息进行拦截,并重新写该消息的处理函数实现。并且不会的地方可以问问老师或者同学,此外开发该游戏的难度不大。因此,技术上是可行的。使用可行性:连连看游戏 ,只要将相同图案的两张方块用三根以内的直线连在一起就可以消除,规则简单容易上手。 游戏速度节奏快,画面清晰可爱,适合不同年龄的玩家。丰富的道具加入,增强游戏的竞争性。多样式的地图,使玩家在各个游戏水平都可以寻找到挑战的目标,长期地保持游戏的新鲜感。使用新颖的连击积分规则,两秒内连击次数越多得分越高,并且有提示和重列次数的奖励,使游戏玩家在体会连击的快感后,同时对自己的游戏速度,更有挑战性和追求极速的欲望。对于用
17、户交互方式,这里选择鼠标交互方式。下面简单描述一下通过实现的功能。鼠标选取两个图案方块后,程序将自动判断所选定的两个方块是否能进行抵消操作,能进行则抵消。在游戏过程中,我们不断重复上面描述的功能,直到游戏的胜利结束。可以说,对于玩家操作起来很容易上手,即使是年龄大的玩家,也会通过很短时间的适应而熟悉连连看游戏的操作。 所以,从操作可行性角度分析开发此程序是可行的。硬件方面:具备操作系统windows2000版本以上。内存要求512M以上,硬盘10G以上,CPU 200MHZ以上,显卡缓存128M以上的pc机。1.5 分析结论以上对于开发此程序分别从技术角度、经济角度和操作性角度进行了全面的分析
18、,技术上使用Microsoft Visual C+ 6.0进行开发,通过网络下载回收成本,游戏画面美观、操作性强,适合所有人不同年龄段的玩家进行娱乐。纵上所述,以Microsoft Visual C+ 6.0为工具开发连连看游戏的方案是可行的。1.6 方案论证在分析设计阶段,有两种方案可供选择: 使用Win32应用程序框架。Win32 是Windows的一个子系统,也是最重要的一个。(还有POSIX子系统和OS/2子系统)Win32子系统为应用程序提供了使用系统资源的接口Win32 API,Win32 API是Windows用户态下应用程序编程的基础。因此所有在Win32API基础上的应用程序
19、都是Win32应用程序。 使用MFC应用程序框架。MFC(Microsoft Foundation Classes)微软基础类库。这个类库不光封装了大多数的GUI系统对象和数据结构,还为开发者提供了开发框架,使原本复杂繁琐的Windows开发(尤其使界面开发)变得非常简单。MFC是对API的封装,因此它能实现的功能只是API的子集。对于追求系统底层相关而且效率高的程序而言,MFC不够灵活而且开销也大。但对于图形界面开发,如果没有MFC而使用API的话那么开发起来非常困难。 在游戏的编写中需要大量的图形界面开发,所以我们放弃第一种方案的设计思想,参考网络上流行的连连看的游戏规则,采用第二种方案设
20、计。2 开发技术及开发环境2.1 Visual Studio 6.0简介在全世界,Windows操作系统被广泛使用,Windows平台下的软件开发也成为软件开发人员的必备技能。Visual Studio系列开发系统一直是在Windows操作系统下进行软件开发的一套非常实用的工具集。其可以用来开发多种Windows下的软件项目,包括Windows应用程序、动态链接库、Windows服务、office集成开发、数据库项目开发等。Visual C+ 6.0是微软公司开发的面向Windows程序设计的一整套开发环境Visual Studio中的一种开发工具。同时也是微软公司向Windows操作系统(包
21、括Windows NT、Windows2000、Windows XP等)出品的可视化的快速开发工具的产品。Visual C+是以可视化技术为基础,以C+为主要编程语言,集成众多工具的开发利器。其操作简单,界面和功能设计符合程序员的开发习惯,同时配合使用微软官方开发的帮助文档MSDN,可以给设计和开发工作带来更大的便利。在一般的游戏设计中,Visual C+也是非常好的开发工具。2.2 Visual C+开发工具的特点Visual C+提供的MFC类库,是一个很大的、扩展了的C+类层次结构,其能使开发Windows应用程序变得更加容易。而且MFC在整个Windows家族中都是兼容的,也就是说,无
22、论是Windows98还是WindowsXP,所使用的MFC是兼容的。每当新的Windows版本出现时,MFC也会得到修改以便使旧的编译器和代码能在新的系统中工作。MFC也会得到扩展,添加新的特性、变得更加容易建立应用程序。使用MFC的最大优点是其做了所有最难做的事。MFC中包含了成千上万行正确的、优化和功能强大的Windows代码。其调用的很多成员函数可以帮助你完成自己可能很难完成的工作。一般性的界面开发工作也可以全部交给其来完成,用户就只需在这些基础上做出自己想要实现的功能即可。与其他开发工具相比,Visual C+完成Windows图形界面的程序所花费的时间要少得多。由于MFC编程方法充
23、分利用了面向对象技术的优点,使得我们编程时极少需要关心对象方法实现的细节,同时类库中的各种对象的强大功能足以完成程序中绝大部分所需的功能,这使得应用程序中程序员所需编写的代码大为减少,有力地保证了程序的良好性和可调试性。近几年经过微软公司不断地完善,Visual C+在开发速度、程序执行效率、程序文件大小与系统的集成性方面都有极大的提高,这使得其不但适应开发一般的应用软件,还可以开发数据库应用软件,同时更适合图形图像和文件压缩等算法编程。另外由于其是微软公司推出的,因此也能够较好地与Windows平台接合,深入操作系统的内部和底层,实现高级程序设计要求,提高程序的运行效率。2.3 运行环境运行
24、环境首先需要操作系统的支持,开发本程序使用Microsoft Windows XP操作系统,为使开发连连看游戏程序能稳定运行,在硬件上至少需要奔腾3CPU做保证,内存不低于64MB,40G硬盘空间,对显卡要求不高,都能满足显卡需求,还有音响用于播放音乐。保证了以上的配置,就能保证使用Microsoft Visual C+ 6.0在Microsoft Windows XP系统中开发连连看游戏程序环境的可行性。3 系统需求分析及设计需求分析就是描述系统的需求,通过定义系统的关键域来建立模型,分析的根本目的是在开发者和提出需求的人之间建立的一种理解和沟通机制。3.1 系统功能需求开发一款单机版的休闲
25、类连连看游戏,该游戏具备的功能如下:(一)能够显示主菜单和界面 游戏需要提供主菜单让玩家进行游戏设置,同时能够显示剩余时间、当前游戏等级等相关信息到界面上。(二) 能够实现时间限制功能能够根据游戏状态自动增加或者减少当前时间限制长短。(三) 能够根据规则消除相同棋子游戏以鼠标进行操作,第一次点击棋盘中的棋子,该棋子此时为“被选中”状态,以特殊方式显示出来;再次单击其他棋子,若该棋子与被选中的棋子图案相同,且把第一个棋子到第二个棋子连起来,中间的直线不超过3根,则消掉这一对棋子。并且当前的时间限制长短增加,否则第一个棋子恢复成违背选中状态,而第二个棋子变成被选中状态。当游戏时间全部消耗完时,则游
26、戏结束。(四) 游戏升级功能 当游戏中的棋子全部消除完毕时,游戏等级上升一个等级。游戏等级没增加一个等级,时间限制长度如表3.1所示。表3.1 游戏等级与时间限制游戏等级时间限制长度游戏等级时间限制长度1120秒670秒2110秒760秒3100秒850秒490秒940秒580秒1030秒 (五) 消除提示功能 在游戏中,如果玩家觉得自己无法找到一对消除棋子时,可以使用快捷键(f5)调出游戏中的提示功能,来提醒当前可消除的棋子。最多可使用3次。(六) 棋子换盘功能如果玩家觉得自己无法全部消除时,可以使用快捷键(f6)调用棋子换盘功能,重新把旗子随机排列来继续游戏,该功能最多可以使用3次。(七)
27、 英雄榜的更新当有玩家得到的等级超过当前记录等级,在游戏结束时要求玩家把名字输入并保存下来。游戏初始时记录分数线为1级。例如,第一个玩家的等级为2级,游戏结束时,那么这个玩家的等级将被保存下来作为最高游戏等级记录。直到有玩家的等级超过2级,才能更新当前记录等级并在退出游戏等级时保存玩家名字及游戏等级。(八) 游戏支持背景音乐功能通过主菜单,在游戏开始后,可以选择播放或者禁止播放背景音乐。默认为禁止播放。(九) 游戏提供帮助说明文档在游戏菜单中,提供一个使用说明项,以方便对游戏不了解的玩家对游戏操作和使用。对于资源的需求,图片资源必不可少,游戏中的小方块是一组图片资源,选用两组图案和排列完全相同
28、但是背景色不同的两组图片作为小方块的初始状态和选定状态。为了使游戏更具娱乐性,背景音乐及音效的添加也是必不可少的,所以此游戏程序也加入了的音乐文件资源3.2 概要设计3.2.1 总体设计 本程序共分为六个模块,即主界面显示模块、棋子操作模块、游戏升级模块、播放音乐模块、英雄榜模块、帮助功能模块。 连连看游戏的功能架构(如图3.1所示)连连看 播放音乐功能游戏升级功能棋子操作功能主界面显示功能帮助功能英雄榜功能棋子操作功能更新记录显示菜单棋子显示棋子连接提示棋子换盘 图3.1连连看功能架构3.2.2 游戏菜单结构的设计连连看游戏菜单结构的设计如图 3.2所示。连连看游戏英雄榜ngb游戏帮助游戏设
29、置关于帮助开始结束背景音乐 图3.2 游戏菜单结构设计 当用户进入游戏界面,点击游戏菜单里的“游戏”选项中的“开始”后,游戏正式开始。点击菜单“游戏设置”里的背景音乐可以播放节奏感强烈的背景音乐。系统默认设置为禁止播放背景音乐。当玩家在游戏过程中遇到不能消除的棋子情况下,可以点击菜单里的游戏帮助选项。英雄榜记录了玩家游戏的最好记录以及玩家的名字。3.3 连连看游戏的详细设计3.3.1 游戏各功能的设计描述 在连连看游戏中,大致可以分为8个功能模块。1.时间限制模块的算法设计 时间限制模块的算法主要分为以下几个步骤:(1) 在游戏开始时,设置当前时间(nOverTime)为60秒。(2) 设定一
30、个时间定时器TIMER1,时间间隔为1000毫秒。(3) 每当第一次时间间隔到时,就把当前限制时间减少1秒。(4) 如果游戏中有一对棋子消除时,就把限制时间增加3秒。例如,当前限制时间为40秒,这时有棋子被消除,那么限制时间变为43秒。(5) 如果限制时间变成0秒,说明游戏结束,弹出结束提示对话框。如果当前游戏等级超过记录等级,还有弹出英雄榜对话框对话。2. 消除相同棋子模块的算法设计消除相同棋子模块的算法主要分为以下几个步骤:(1) 当鼠标点击棋子时,保存到棋子坐标及类型到“第一次选中变量”中。(2) 得到鼠标第二次选中的棋子坐标及类型。(3) 比较两次棋子类型,如果相同,转步骤(4)。如果
31、不相同,转步骤(5)。(4) 画一条连接线,并消除这对棋子,退出等待下一次鼠标选择。(5) 把鼠标第二次选中的棋子坐标及类型赋值给“第一次选中变量”。 3.游戏升级模块的算法设计游戏升级模块的算法主要分为以下几个步骤:(1) 保存当前游戏等级和限制时间初始值。(2) 当游戏中的棋子全部被消除完毕时,就把当前游戏等级增加一级。(3) 把限制时间的初始值减少10秒。(4) 调用重新开始游戏接口函数。 4.消除提示模块的算法设计消除提示模块的算法主要分为以下几个步骤:(1) 判断提示次数变量的值,如果等于0,结束。(2) 查找当前棋盘中相同的棋子。(3) 在相同棋子中,查找可以消除的棋子。(4) 给
32、出提示连线,提示次数变量减少1. 5.棋子换盘模块的算法设计棋子换盘模块的算法主要分为以下几个步骤:(1) 保存当前棋盘数组中的数据到临时数组中。(2) 循环地从临时数组中,随机取出数据保存到棋盘数组中。 6.英雄榜模块的算法设计英雄榜模块的算法主要分为以下几个步骤:(1) 在读取配置文件(setup.ini),得到并显示当前最高等级和大名。(2) 在玩家结束游戏时,比较当前用户等级和最高等级。如果高于配置文件中的最高等级,就弹出“英雄榜”对话框,要求输入玩家的名字,并连同玩家的等级保存到配置文件中。 7.音乐播放模块和的算法设计音乐播放模块比较简单,只需要在用户选择音乐播放时,把音乐资源载入
33、程序并播放。 8.帮助类模块的算法设计帮助类模块的算法也比较简单,只要把相应的对话框资源显示出来就可以了。3.4 相关技术与重点难点3.4.1 相关技术GDI(Graphics Device Interface,图形设备接口)主要负责在显示屏幕和打印设备等方面输出图像信息,是一组通过C+类实现的应用程序编写接口。作为一个设备接口,它可以使得开发人员在将信息输出于屏幕或打印机之时无需考虑具体的目标输出的硬件特性,只需调用GDI库的一些方法进行操作即可,而具体的绘图工作由特定的设备驱动来完成,从而使开发人员能轻松地在不同的硬件中做图像绘制输出。绘图方案设计采用内存位图映射的方式,先将整个游戏区域的
34、图象绘制到内存位图中去,然后再一次性地将它加载到屏幕上予以显示。先在内存创建两个内存位图,并对它们的图象进行载入。在需要使用的时候,则可以从这些内存位图中直接去拷贝,并绘制到游戏区域内存位图中去。对框架位图及人物位图分别创建相应的设备环境,并且为它们分配了关联的内存位图变量。而对于游戏区域的绘制,亦为它创建了一个内存设备环境以及关联的内存位图。完成以上工作后,需要在程序开始运行的时候,一次性地对它们进行适当的初始化。此游戏程序的关键在于游戏的绘图方案,是此程序的难点,在此程序中的绘图方案通过GDI技术实现。3.4.2 系统的重点难点此程序的重点是鼠标的交互功能。通过ClassWizard对鼠标
35、左键被按下时触发的命令消息进行拦截技术来实现。因为游戏的全部过程需要依靠鼠标操作,所以鼠标交互功能的设计是否人性化就成了此连连看游戏程序的重点。此程序的难点是连连看游戏程序的连接线功能。首先编写一个创建路径的类,通过这个类使游戏中消除小方块时能够找到一条可以连接的路径进行连线,然后通过一个画线的类进行连接。3.5 游戏各功能流程图(1)消除及时间限制功能流程图。如图3.3游戏开始初始化棋盘 限制时间是否为0游戏结束接收玩家输入 是否选中相同棋子消除棋子 N限制时间增加图3.3 消除及限制时间功能流程图(2) 游戏升级及英雄榜更新流程图,如图3.4所示。 游戏开始 初始化棋盘时间限制是否为0是当
36、前记录是否高过历史记录 否接收玩家输入否是否消除完毕是保存新的记录并且录入玩家姓名结束游戏 是 游戏增加一级图3.4 游戏升级及英雄榜更新功能流程图(3) 消除提示模块流程图,如图3.5所示。 游戏开始初始化棋盘 限制时间是否为0游戏结束接收玩家输入消除提示次数是否 为0 是消除棋子 否 消除提示次数减少一次图 3.5 消除提示模块功能流程图(4) 棋子换盘模块功能流程图,如图3.6所示。 游戏开始初始化棋盘 限制时间是否为0游戏结束 接收玩家输入换盘次数是否为0 是消除棋子 否 换盘次数减少一次 图 3.6 棋子换盘模块功能流程图3.6 主对话框的设计与实现3.6.1 主对话框的设计连连看的
37、主对话框类,主要负责显示游戏界面、等级、时间显示、及快捷键调用等内容。其主要有如下几个处理模块。1. 主菜单处理模块主菜单处理模块比较简单,只需要创建一个菜单对象,并在对话框初始化函数进行加载相应资源并设置到对话框中。2. 连接提示处理模块 连接提示模块,主要调用棋子类中的查找有效连接接口函数,通过返回的两个图标相同棋子位置来设置两个棋子的状态为按下。3. 换盘处理模块换盘处理模块,主要是把棋盘数组中的数据重新进行随机排列。4. 初始化棋盘数据模块初始化棋盘数据模块,利用随机数,随机地选择在棋盘数组中插入棋子数据。每一类棋子生成2组4个相同的数据。5. 游戏信息处理模块游戏信息处理模块,主要利
38、用设置定时器,每一秒进行更新显示区域。在这些区域中,以绘图方式进行输出。3.6.2 主对话框的实现 实现主对话框类CLIKDIg需要如下个步骤:(1) 声明主对话框类CLIKDIg类,其中包含链接提示、显示棋盘、换盘、初始化游戏及棋盘数据函数。(2) 添加主对话框类CLIKDIg的实现,其中包含基本的初始化对话框函数、游戏开始处理函数、及背景音乐播放功能函数。(3) 给主对话框类添加显示函数、分数和游戏等级信息更新函数及接收玩家键盘输入处理函数。(4) 游戏中要求实现限制时间和最高纪录处理功能,所以必须在主对话框类中再添加定时器处理和最高纪录处理功能函数。在定时器响应函数中,根据当前时间剩余数
39、判断,如果小于0则说明时间已到,提示用户游戏结束,并接收用户是否重新开始的选择,然后根据选择重新开始游戏或者结束游戏。如果是结束游戏,还需要调用超记录对话框。(5)实现主对话框类中的棋盘换盘、棋子连接提示及棋盘初始化功能函数。 调用换盘函数进行棋盘的重新排列,其中使用了循环语句来判断,因为棋子全部是随机排列,有可能还是无法消除的棋子,所以必须判断有棋子可以消除时才能换盘成功。 CLlkDlg:CallHint()是显示连接提示函数,其主要是调用配对函数Hint(),得到当前棋盘中可以连接的两个棋子,并将其设置为按下状态,这样就实现了提示。CLlkDlg:Exchange(int mapMAXY
40、)是换盘函数,该函数主要是将整个棋盘数据保存到临时数组中,然后利用随机数重新排列棋盘数组中的数据,实现换盘。CLlkDlg:RefreshMap()是跟新棋盘函数,主要思想是遍历整个棋盘数组,然后将其中为空或者消除后的区域加入到刷新范围内进行刷新,不进行全界面刷新以防闪烁。CLlkDlg:InitMap(int mapMAXY)是初始化棋盘数组,主要是随机将相同类型的4个棋子放到棋盘数组不同的位置中。3.7 棋子类的设计与实现3.7.1 棋子类的设计棋子类,包含如下几个功能函数。1. 游戏胜负的判断处理游戏胜负的处理步骤如下:(1) 等待玩家的鼠标输入信息。(2) 在定时器中,每次扣除游戏限制
41、时间1秒。(3) 当游戏时间为0时,弹出游戏失败结束提示,并根据玩家选择重新开始游戏或者结束游戏。(4) 在玩家消除一对棋子后,就对当前棋盘数组进行遍历。如果是空,说明玩家已经全部消除完毕,然后调用升级处理。如果不是空,则返回步骤(1)。2.游戏升级处理游戏升级处理步骤如下:(1) 当游戏中的棋子全部被消除完后,弹出升级提示对话框。(2) 当玩家选择继续时,就调用主对话框类的重新开始游戏接口函数。但要把当前游戏等级增加1级。(3) 当玩家选择不继续时,直接调用退出函数。 3.查找处理查找处理实现步骤如下:(1) 遍历整个棋盘数组。(2) 查找一根直线可以连接的一对棋子,如果没有则转下一步;如果
42、有则转至步骤(6)。(3) 查找有一个拐角,即两根直线以连接的一对棋子,如果没有则转下一步;如果有则转至步骤(6)。(4) 查找有两个拐角的,即三根直线以连接的一对棋子,如果没有则转下一步;如果有则转至步骤(6)。(5) 如果返回假,表示查找失败。(6) 如果返回真,表示查找成功,并把棋子的位置在输出参数中返回。4.提示处理提示处理是通过调用查找函数,把其中可以连接的一对棋子的位置通过输入参数返回给上层调用者,由调用者设置相关棋子为选中状态。3.7.2 棋子类的实现 棋子类CChessMan的实现,分为如下几个步骤:(1) 声明棋子类CChessMan,其中包含两个构造函数、查找接口函数、判断
43、棋子为空函数以及鼠标响应函数。(2) 添加棋子类的实现,其中包含基本的构造函数、析构函数、鼠标响应函数等。其中,if(parent-m_p=NULL) | (parent-m_p-m_id!=m_id)|(parent-m_p-m_pos.x=m_pos.x)&(parent-m_p-m_pos.y=m_pos.y)是用来判断当前是否按下了棋子,并且是否是同一个棋子,如果是两个不同的棋子,则调用find()函数查找之间是否可以消除。棋子的消除,主要是将两个棋子设置为0进行隐藏,并跟新棋子数组及信息区。调用IsEmpty()函数判断棋子是否全部消除完毕,当全部消除完毕时,就给出提示窗口,让玩家选
44、择是否继续下一关,玩家选择继续则增加等级数,同时调用start()函数重新开始;玩家选择结束的话,则进行最高等级判断以及清除窗口工作。调用Hint()函数查找棋盘中是否有可以匹配的棋子,如果有,则不做任何操作;否则自动调用换盘函数进行换盘,并增加换盘数。(3) 棋子类的查找接口、棋盘判空功能函数的实现。前一个查找函数的实现,主要利用输入两个棋子坐标来查找有无连线。后面一个查找函数,是在前一个查找函数的基础上增加了棋子间有连接就要把棋子的拐角位置输出。(4) 实现棋子类的配对接口函数分为两种:一种是判断当前棋盘上有无配对棋子;另一种是在前一种的基础上添加输出配对棋子坐标的功能。前一种判断当前棋盘上有没有可以配对的棋子的函数,主要是遍历全部