基于MFC和VC++6.0的连连看系统设计论文.doc_第1页
基于MFC和VC++6.0的连连看系统设计论文.doc_第2页
基于MFC和VC++6.0的连连看系统设计论文.doc_第3页
基于MFC和VC++6.0的连连看系统设计论文.doc_第4页
基于MFC和VC++6.0的连连看系统设计论文.doc_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘 要从2001年开始,游戏作为一种产业已经渐渐地为中国大众接受,它所带来的经济效益和社会效益更是人们之前所没有估计到的,当游戏作为一种很重要的娱乐手段被大众接受时,游戏产业就已经注定会带来巨大的经济效益。连连看游戏是一款经典小游戏,操作简单,适合所有玩家。连连看游戏软件在Windows环境下用VC+6.0工具,基于MFC框架设计开发,可以实现初始化界面,用户使用鼠标点击两张相同图案的小方块进行消除,并有多种地图样式和道具选择,丰富了游戏的娱乐性。此连连看游戏程序界面美观,操作简单,具有一定的趣味性,是一款老少皆宜的休闲佳品。本文通过需求分析与方案论证,首先对开发连连看游戏程序进行初步的分析,然后通过总体设计和详细设计论述了系统的开发和实现过程。关键词:连连看;单机游戏;游戏开发I沈阳航空工业学院北方科技学院毕业设计(论文)AbstractStarted from 2001, the game took one industry already gradually to accept for the Chinese populace, it brought before the economic efficiency and the social efficiency were people, has not estimated that when played takes one very important entertainment method is accepted by the populace, the game industry already was doomed to be able to bring the huge economic efficiency. Looked again and again the game is a section of classics small game, the simplicity of operator, suits all plays the family. Looked again and again the game software under the Windows environment with the VC+6.0 tool, based on the MFC frame design development, may realize the initialization contact surface, the user use mouse clicks on two same designs the dice to carry on eliminates, and has many kinds of map styles and the stage prop choice, has enriched games entertainment. This looked again and again the game procedure contact surface is artistic, the simplicity of operator, has certain interest, is section of good for both young and old leisure high quality goods. This article through the demand analysis and the project concept demonstration, first to develops looked again and again the game procedure carries on the preliminary analysis, then elaborated systems performance history through the system design and the detailed design as well as realizes the process.Keywords:Lianliankan ;Stand-alone game;Game-DevelopmentII目 录第1章 绪 论11.1 课题背景11.2 课题意义11.3 国内外发展情况11.4 课题内容及目标2第2章 需求分析与方案论证42.1可行性分析42.1.1技术可行性分析42.1.2经济可行性分析52.1.3 操作可行性分析52.1.4 分析结论52.2方案论证62.3需求分析6第3章 总体设计83.1开发工具和运行环境83.1.1开发工具83.1.2运行环境93.2功能模块设计93.3算法设计103.3.1游戏地图数据的设计103.3.2图案方块连接判断的设计113.3.3游戏胜利判断算法设计113.3.4游戏道具算法设计123.4相关技术与重点难点123.4.1相关技术123.4.2系统的重点难点13第4章 详细设计144.1功能模块设计与实现144.1.1游戏模块设计与实现144.1.2选项模块设计与实现144.1.3帮助模块设计与实现174.1.4游戏地图数据的设计与实现174.1.5图案方块的判断连接的设计与实现184.1.6游戏结束判断功能的设计与实现204.1.7鼠标交互功能的设计与实现204.2人机界面设计22第5章 系统调试与测试255.1系统调试255.2系统测试26第6章 结 论27结束语28致 谢29参考文献3032第1章 绪 论1.1 课题背景连连看是一款风靡很久的单机版游戏,对于玩家并不陌生,游戏规则非常简单,只要选择一对相同图案的卡片连接起来,连接路径若避开其他图片,且不超过两次转弯则消除此对卡片,容易上手。改造成网络游戏增强了该游戏的竞技性,把原先单人在规定时间内完成游戏改变成了玩家间相互制约,相互竞争,可以多人组队合作完成游戏,增强了游戏的技巧性、竞技性、合作性。连连看来源于街机游戏,是给一堆图案中的相同图案进行配对的简单游戏,一位叫做朱俊的网友将这种形式搬到了PC上,立刻成为办公一族的新宠,并迅速传遍了世界各地。饱受工作压力的人们没有太多的时间进行复杂的游戏,而对于这种动动鼠标就能过关的游戏情有独钟。1.2 课题意义开发连连看游戏程序的目的是为了满足人们休闲的需要,在紧张工作之余休闲类的小游戏能够给人带来最大程度的放松,也可以增进人们之间的交流,沟通,通过游戏还可以认识更多的朋友,也可以到达跨省、跨市,甚至跨国间人们互相娱乐的目的,而且小游戏还不会浪费计算机过多的资源,不像大型游戏占资源和牵扯精力,可谓工作娱乐两不误。通过此次课题的设计,掌握如何制作一个游戏软件,以及制作游戏软件的整个流程,制作游戏软件的步骤,为以后的就业工作打下基础。1.3 国内外发展情况电脑游戏在我国起步虽晚,发展却并不为慢。作为后来者,国内业界同行们的信心、勇气和紧迫感曾经着实令玩家们欣慰。让我们记住这些在国产游戏事业上曾经洒过汗水的年轻人,正是他们的创新精神和勇气,才使得国产游戏在并不宽松的环境下蓬勃发展至今。与单机游戏日渐衰落正相反的是,网络游戏方兴未艾,遍地开花。但是,与此同时, 我们也看到了,在繁荣的背后,潜在的危机, 一是来自国内游戏制作者在游戏制作理念上的不足和困乏,另外就是资金问题,这两方面与欧美游戏制作差距很大。在美国,集中了许多计算机软件的设计人才,他们工作之余,时常喜爱编一种能与人斗智的“游戏”,以此来锻炼编程的能力。这种“游戏”花样繁多,但其特点都是利用计算机软件事先设计好的“分析”、“判断”能力反过来与人较量。由于不断修改更新,使计算机的“智力”水平与人难分高低。 连连看这款游戏来源于中国,现在已风靡全世界。连连看游戏从出现到现在已经更新了好多版本,比较知名的有蔬果连连看、水晶连连看、阿达连连看和宠物连连看等不同版本,现在已经有FLASH版本,游戏起来更加方便,无需安装,打开网页即可游戏,最近更是出现网络版本,QQ连连看就是这样一款连连看游戏的网络版本,可以通过网络与其他玩家一起进行游戏,而且地图更为繁多,道具更为丰富,极大地增强了游戏的乐趣。今天,当我们回顾电子游戏最初为什么能吸引人,我们不难悟出这样的道理:电子游戏满足了人们对竞争和对抗的渴望,它总是给予竞争者以新的难题。同时,它还能为胜利者提供崭新的画面和音乐享受。1.4 课题内容及目标连连看游戏主要是鼠标两次点击的图片能否消去的问题。当前,前提是点击两张相同的图片,若点击的是同一张图片或者两张不同的图片,则不予处理。在两张想同图片所能连通的所有路径中,如果存在一条转弯点不多于两个的路径,就可以消去;如果没有,则不予处理。此程序的课题内容及目标如下。 有关卡选择,根据方块和图案的多少设置难度。 随机生成游戏界面。 方块选中后图片要有突出显示。 选择两个图案相同的方块,并以不超过两个转弯的连线将它们连接起来,便可以消除这对方块,每一局里玩家需要在规定的时间内消除所有的方块,当完成任务后,才能进入下一关卡。 当出现无解的局面时,游戏会自动扣掉一点生命点数,并且重新换牌,当生命点数为0时游戏结束。 选择提示功能时,游戏自动突出显示两个可以消除的方块,并且提示点数扣掉一点。 每过一关时,生命点数、提示点数都会增加,游戏自动统计玩家成绩。 游戏设置高手榜,破记录时予以记载。通过对以上功能的实现,达到界面美观,操作简单,增加游戏的娱乐性、趣味性,使玩家对此游戏产生兴趣。第2章 需求分析与方案论证2.1可行性分析可行性分析(feasibility study ),世界上普遍采用的一种研究工程项目是否可行的科学。它通过各种有效的方法,对工程项目进行分析,从技术、经济、财务等方面加以评价,最终给投资决策者提供是否选择该项目进行投资的依据。可行性分析的焦点是:要站在咨询的立场上;要有多种替代方案;对各种方案作经济比较;决定最佳投资时间和投资规模;提出可能实施的具体措施;着眼于资源的有效利用;站在中立客观立场上得出结论。2.1.1技术可行性分析设计连连看游戏程序需要通过菜单和鼠标对游戏进行操控,游戏的界面需要大量的绘图机制,以达到操作简单、界面美观的目的。Visual C+6.0为用户提供了一个可视化、通用的应用程序集成开发环境Developer Studio(也俗称Visual Studio)。Developer Studio包含了一个文本编辑器、资源编辑器、工程编译工具、一个增量连接器、源代码浏览器、集成调试工具以及一套联机文档(MSDN)。通过Developer Studio,开发人员可以完成项目工程的创建、程序的编辑、修改、运行和调试等各种操作。Developer Studio采用标准的多窗口用户界面,提供了大量实用工具以支持可视化编辑的特性,包括项目工作区、AppWizard(应用程序向导)、Class(类向导)、WizardBar(向导工具条)、ComponentGallery(组建画廊)等。在ComponentGallery(组建画廊)中,Visual C+6.0为用户提供了一组常用的应用程序组件,分为两类,分别是Developer Studio Components和Register ActiveX Controls。其中Developer Studio Components包含了经常使用的一些标准的Windows应用程序特性,例如,弹出菜单、剪贴板、对话条、启动画面、定制状态条、日积月累对话框等,所以,可以通过ComponentGallery实现菜单制作、鼠标操控等功能,而绘图功能也可以通过Visual C+6.0为用户提供的GDI库完全实现。对于菜单的制作通过默认的框架结构即可实现,然后通过框架改造达到要求的条件。鼠标交互功能的实现可以通过对鼠标左键被按下时触发的命令消息进行拦截,并重新写该消息的处理函数实现。综上所述,对于在技术上使用VC+6.0编写连连看游戏是可行的。2.1.2经济可行性分析开发本程序首先需要计算机一台,奔腾3以上CPU,256MB以上内存,40G以上硬盘即可以,大约五千元左右。软件方面,正版Microsoft Visual C+ 6.0光盘价格为五千二百元,正版操作系统Windows XP 简体中文专业版价格大约在两千元左右,购买书籍二百元,开发此程序需要的时间大约需要三个月左右的时间,其中所消耗的人工费每月一千元,共计三千元,所以开发此游戏程序的成本共计一万五千元四百元左右。开发出的产品倘若在因特网下载,一个注册码费用为十元,只需下载一千五百四十次即可收回成本。在高速发展的信息时代,一千五百四十次的下载不成问题。所以,从经济角度来讲,开发本程序是可行的。2.1.3 操作可行性分析连连看游戏 ,只要将相同图案的两张方块用三根以内的直线连在一起就可以消除,规则简单容易上手。 游戏速度节奏快,画面清晰可爱,适合不同年龄的玩家。丰富的道具加入,增强游戏的竞争性。多样式的地图,使玩家在各个游戏水平都可以寻找到挑战的目标,长期地保持游戏的新鲜感。使用新颖的连击积分规则,两秒内连击次数越多得分越高,并且有提示和重列次数的奖励,使游戏玩家在体会连击的快感后,同时对自己的游戏速度,更有挑战性和追求极速的欲望。对于用户交互方式,这里选择鼠标交互方式。下面简单描述一下通过实现的功能。鼠标选取两个图案方块后,程序将自动判断所选定的两个方块是否能进行抵消操作,能进行则抵消。在游戏过程中,我们不断重复上面描述的功能,直到游戏的胜利结束。可以说,对于玩家操作起来很容易上手,即使是年龄大的玩家,也会通过很短时间的适应而熟悉连连看游戏的操作。所以,从操作可行性角度分析开发此程序是可行的。2.1.4 分析结论以上对于开发此程序分别从技术角度、经济角度和操作性角度进行了全面的分析,技术上使用Microsoft Visual C+ 6.0进行开发,通过网络下载回收成本,游戏画面美观、操作性强,适合所有人不同年龄段的玩家进行娱乐。纵上所述,以Microsoft Visual C+ 6.0为工具开发连连看游戏的方案是可行的。2.2方案论证在分析设计阶段,有两种方案可供选择: 使用Win32应用程序框架。Win32 是Windows的一个子系统,也是最重要的一个。(还有POSIX子系统和OS/2子系统)Win32子系统为应用程序提供了使用系统资源的接口Win32 API,Win32 API是Windows用户态下应用程序编程的基础。因此所有在Win32API基础上的应用程序都是Win32应用程序。 使用MFC应用程序框架。MFC(Microsoft Foundation Classes)微软基础类库。这个类库不光封装了大多数的GUI系统对象和数据结构,还为开发者提供了开发框架,使原本复杂繁琐的Windows开发(尤其使界面开发)变得非常简单。MFC是对API的封装,因此它能实现的功能只是API的子集。对于追求系统底层相关而且效率高的程序而言,MFC不够灵活而且开销也大。但对于图形界面开发,如果没有MFC而使用API的话那么开发起来非常困难。 在游戏的编写中需要大量的图形界面开发,所以我们放弃第一种方案的设计思想,参考网络上流行的连连看的游戏规则,采用第二种方案设计。2.3需求分析关于连连看的功能描述如下:运行游戏并自动进行初始化工作,将游戏区域上方作为信息显示区域,并且通过菜单功能进行操控,菜单功能包括初级、中级和高级可供选择,暂停和退出游戏功能,提示和重列功能以及积分榜功能。游戏区域中心区域作为小方块的地图,由多种人物图案组成分布在不同位置,界面设有关卡、提示次数、重列次数、进度条以及积分的显示。玩家可以通过选取相同的两个物件来对他们进行消除操作,直到将游戏区域中的所有方块对都被消除后为胜利,并且给予破记录后的提示功能。对于资源的需求,图片资源必不可少,游戏中的小方块是一组图片资源,选用两组图案和排列完全相同但是背景色不同的两组图片作为小方块的初始状态和选定状态,每张图片共20个人物。为了使游戏更具娱乐性,背景音乐及音效的添加也是必不可少的,所以此游戏程序也加入了的音乐文件资源。第3章 总体设计3.1开发工具和运行环境3.1.1开发工具本程序采用Microsoft Visual C+ 6.0作为开发工具。Visual C+是一个功能强大的可视化软件开发工具。自1993年Microsoft公司推出Visual C+1.0后,随着其新版本的不断问世,Visual C+已成为专业程序员进行软件开发的首选工具。虽然微软公司推出了Visual C+.NET(Visual C+7.0),但它的应用的很大的局限性,只适用于Windows 2000,Windows XP和Windows NT4.0。所以实际中,更多的是以Visual C+6.0为平台。Visual C+6.0不仅是一个C+编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrated development environment,IDE)。Visual C+6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。 这些组件通过一个名为Developer Studio的组件集成为和谐的开发环境。Visual C+6.0它大概可以分成三个主要的部分: Developer Studio,这是一个集成开发环境,我们日常工作的99%都是在它上面完成的,再加上它的标题赫然写着“Microsoft Visual C+”,所以很多人理所当然的认为,那就是Visual C+了。其实不然,虽然Developer Studio提供了一个很好的编辑器和很多Wizard,但实际上它没有任何编译和链接程序的功能,真正完成这些工作的幕后英雄后面会介绍。我们也知道,Developer Studio并不是专门用于VC的,它也同样用于VB,VJ,VID等Visual Studio家族的其他同胞兄弟。所以不要把Developer Studio当成Visual C+, 它充其量只是Visual C+的一个壳子而已。这一点请切记! MFC。从理论上来讲,MFC也不是专用于Visual C+,Borland C+,C+Builder和Symantec C+同样可以处理MFC。同时,用Visual C+编写代码也并不意味着一定要用MFC,只要愿意,用Visual C+来编写SDK程序,或者使用STL,ATL,一样没有限制。不过,Visual C+本来就是为MFC打造的,Visual C+中的许多特征和语言扩展也是为MFC而设计的,所以用Visual C+而不用MFC就等于抛弃了Visual C+中很大的一部分功能。但是,Visual C+也不等于MFC。 Platform SDK。这才是Visual C+和整个Visual Studio的精华和灵魂,虽然我们很少能直接接触到它。大致说来,Platform SDK是以Microsoft C/C+编译器为核心(不是Visual C+,看清楚了),配合MASM,辅以其他一些工具和文档资料。上面说到Developer Studio没有编译程序的功能,那么这项工作是由谁来完成的呢?是CL,是NMAKE,和其他许许多多命令行程序,这些我们看不到的程序才是构成Visual Studio的基石。3.1.2运行环境运行环境首先需要操作系统的支持,开发本程序使用Microsoft Windows XP操作系统,为使开发连连看游戏程序能稳定运行,在硬件上至少需要奔腾3CPU做保证,内存不低于64MB,40G硬盘空间,对显卡要求不高,都能满足显卡需求,还有音响用于播放音乐。保证了以上的配置,就能保证使用Microsoft Visual C+ 6.0在Microsoft Windows XP系统中开发连连看游戏程序环境的可行性。3.2功能模块设计本程序共分为三个模块,即游戏模块、选项模块和帮助模块。在游戏模块中下分为初级子模块、中级子模块、高级子模块、停止子模块和退出子模块。对于初级子模块、中级子模块和高级子模块通过图片种类以及方块数量的不同加以区分。退出子模块用于退出游戏程序。选项模块中下分为提示子模块、重列子模块、暂停子模块、音乐子模块、音效子模块以及积分榜子模块。提示子模块和重列子模块作为游戏的特殊功能,增加游戏的趣味性。暂停子模块可以暂停游戏。音乐子模块和音效子模块可以相互切换,用以清晰的显示音乐和音效的效果。积分榜子模块用于记录游戏的积分信息,并且对于破记录给予提示。帮助模块中下分为关于连连看子模块和帮助子模块。关于连连看子模块主要介绍一下连连看的游戏方法。帮助子模块用于介绍本游戏的一些特殊功能的使用方法。连连看主程序游戏选项帮助初级中级高级停止退出重列提示暂停音乐音效积分榜关于帮助 图3.1 功能模块图3.3算法设计3.3.1游戏地图数据的设计对于整个游戏区域,可以把它看作一个是由信息显示区域和图案方块游戏区域组成的地图。信息显示区域可以通过使用铅笔工具修改属性直接在需要的位置上画出即可实现。图案方块游戏区域由图案小方块零散地分布在地图的不同位置区域,并且每一个图案小方块都有与其对应的完全一样的另外一个小方块。图案方块游戏区域被抽象成一个有坐标位置属性的平面,平面上零散的地分布着若干个小方块,并且这些小方块的人物图案起码是成对出现的,可以把游戏区域地图用一个数组llk_mapij来表示,llk_mapij是把地图设计成一个动态分配的int整型一维数组,对地图中的行列数的表达,用一个转换法即可。在游戏开始前,需要对游戏的地图进行初始化。设计一个初始化的类,信息的显示直接调用绘图类即可。对于方块地图游戏区域的初始,设计初级为89大小的区域,中级为910大小的区域,高级设计为1210大小的区域。人物的种类共计20个图案,首先通过srand ()设定随机数发生,然后通过rand()函数进行图片种类数量的选择。至此,游戏地图的设计完毕。 3.3.2图案方块连接判断的设计对于选中的两个方块的销毁,它们必须符合以下三个条件: 选中的两个图案相同。 选中的两个方块之间在没有障碍物的情况下,可以用若干垂直的直线线段连起来。 这些将它们连接起来的直线线段的折点不超过两个。同种物件的连接方式大致可以分成以下3种: 直连方式。在直连方式中,必须要求所选定的两个方块在同一水平直线上,并且两个方块之间没有任何其它的图案方块。在3种连接方式中,直连方式是最简单的。 有一个折点的垂直线段连接。所选定的两个方块如果通过折点的方式连接,那么对于折点来说,每个折点必定有且至少有一个坐标是和其一个目标点是相同的,即折点必定在两个目标点所在的X方向或Y方向的直线上。此外,对于一个折点连接的情况,折点应该为第一个选中方块的横向现或纵向线与第二个选中方块的纵向线或横向线相交而得出。还需说明的是,是这些所有可能连接的交线经过的每一个图案方块区域,它们都不允许被障碍物所阻挡。 有两个折点的垂直线段连接。这种方式的两个折点所连成的直线与两物件的直接连线可以构成平行线,因此可以根据这个规律,将这条水平线在游戏区域允许的条件上下移动,然后通过判断整条带垂直折点的曲线之间有无障碍物方式来确定是否可以联通。经过上面较为详细的分析后,对选定的方块是否可以作抵消操作可以这样去设计,首先,对简单的直连情况进行判断,看其是否符合条件,假如不能,再加深一个级别的复杂度,对一个折点的情况进行判断,如果不符合条件,再对两个折点的情况进行判断。3.3.3游戏胜利判断算法设计与前面的两个选定方块能否抵消的判断功能相比,它的实现显得相当简单,只需对图案方块游戏区域所有方块进行判断就可以了,只要检测到地图中还有一个图案方块还没有被抵消,并且游戏的级别不是高级,则证明游戏还没有结束,完成判断。如果时间耗尽,或者在没有生命点数时出现死局,则终止游戏。如果通过初级、中级后进入高级,并且地图中的所有小方块都被消除,则证明游戏已经胜利,如果打破记录,会弹出提示。3.3.4游戏道具算法设计在此游戏中的道具有重排和提示两种,在游戏进行的过程中,如果玩家暂时找不到可解的小方块,就可以使用道具功能。重排功能是在原小方块位置不变的情况下,重新排列图案的顺序,以找到可解的小方块。提示功能用于提示玩家一组可解的小方块,便于玩家可以继续进行游戏。对于重排功能的实现,首先将所有小方块的位置编号暂时保存到内存中,然后随机地分布在有小方块的位置上,通过随机函数实现此功能。对于提示功能,首先编写一个检查连接的类,判断选中的两个小方块是否可以进行消除操作,这个类可以被提示功能函数调用,也可以在检查是否有解时被调用。在提示功能中,首先调用检查连接的类查找到一个可以连接的小方块,并且标记,然后更改其为选中状态,即改变颜色以达到醒目,用来提示玩家。3.4相关技术与重点难点3.4.1相关技术GDI(Graphics Device Interface,图形设备接口)主要负责在显示屏幕和打印设备等方面输出图像信息,是一组通过C+类实现的应用程序编写接口。作为一个设备接口,它可以使得开发人员在将信息输出于屏幕或打印机之时无需考虑具体的目标输出的硬件特性,只需调用GDI库的一些方法进行操作即可,而具体的绘图工作由特定的设备驱动来完成,从而使开发人员能轻松地在不同的硬件中做图像绘制输出。绘图方案设计采用内存位图映射的方式,先将整个游戏区域的图象绘制到内存位图中去,然后再一次性地将它加载到屏幕上予以显示。先在内存创建两个内存位图,并对它们的图象进行载入。在需要使用的时候,则可以从这些内存位图中直接去拷贝,并绘制到游戏区域内存位图中去。对框架位图及人物位图分别创建相应的设备环境,并且为它们分配了关联的内存位图变量。而对于游戏区域的绘制,亦为它创建了一个内存设备环境以及关联的内存位图。完成以上工作后,需要在程序开始运行的时候,一次性地对它们进行适当的初始化。此游戏程序的关键在于游戏的绘图方案,是此程序的难点,在此程序中的绘图方案通过GDI技术实现。3.4.2系统的重点难点此程序的重点是鼠标的交互功能。通过ClassWizard对鼠标左键被按下时触发的命令消息进行拦截技术来实现。因为游戏的全部过程需要依靠鼠标操作,所以鼠标交互功能的设计是否人性化就成了此连连看游戏程序的重点。此程序的难点是连连看游戏程序的连接线功能。首先编写一个创建路径的类,通过这个类使游戏中消除小方块时能够找到一条可以连接的路径进行连线,然后通过一个画线的类进行连接。第4章 详细设计4.1功能模块设计与实现此连连看游戏程序根据模块的性质分为以下几大类:基本功能模块,主要通过游戏的菜单显示出来,分为游戏模块、选项模块以及帮助模块。游戏绘图模块,包括小方块图案的载入以及游戏地图背景的绘制。游戏交互模块,主要是快捷键和鼠标交互功能的实现。游戏算法模块,包括游戏的连接判断算法以及游戏胜利判断的算法。4.1.1游戏模块设计与实现游戏模块中下分为初级子模块、中级子模块、高级子模块、停止子模块和退出子模块。对于这三个不同的级别分别设置三个不同大小的地图,初级设为89的地图,即横向为八个小方块,纵向为九个小方块。同理,中级设为910的地图,高级设为1210的地图。人物种类共有20种,对于初级来说,由于地图的大小为八行九列共72个小方块,每个种类的人物设定出现6次为偶数,这样就可以实现成对的出现了,在游戏中可以完成配对。这样以来,共72个小方块且每个人物出现6次,也就是说,共有12个人物。同理,对于中级,共90个小方块且每个人物出现6次,也就是说,共有15个人物。对于高级,共120个小方块且每个人物出现6次,共有20个人物。这样,初级、中级和高级就可区分开来了。初级、中级和高级不可同时处于可选状态,即初级正在游戏的时候,打开菜单,初级的选项是不可选的,而中级和高级应为可选状态,通过pCmdUI-Enable()将初级、中级和高级设置成可以切换的菜单,然后分别在初级、中级和高级各自的初始化中设置其可选或者是不可选的状态即可实现。游戏模块中的停止子模块设定好停止的状态即可,首先停止进度条的运行,游戏地图区域以及信息显示区域不做绘图即可。游戏模块中的退出子模块调用程序退出语句PostQuitMessage(0)即可,比较容易实现。4.1.2选项模块设计与实现选项模块中分为提示子模块、重列子模块、暂停子模块、音乐子模块、音效子模块以及积分榜子模块。对于提示子模块和重列子模块,将这两种算法各封存在一个类当中,作为道具可以随时进行调用,并且有次数记录,当记录次数到达零以下,立即给出提示。对于提示模块,采用遍历的方法进行查找,首先遍历同一种图块中出现在不同坐标位置的图案小方块,以此模拟第一次点击,然后遍历同一种图块的剩余的不同坐标图案小方块的出现,以此模拟第二次点击,判断前后2次模拟点击选中的不同位置的同种图块能否连通,能连通则高亮显示这2个图块,提示完成;否则,继续检测连通情况直至找到为止。对于重列模块,首先通过遍历的方法,依次读取各个位置的图片,增加到临时的图片列表中,然后再随机的循环依次在原来有图片的地方添加图片,从图片列表中删除用过的图片,不删除就会有可能重复了,最后进行刷新即可。流程图如图4.1和图4.2所示。开始读取各个图片坐标保存到临时列表中在临时列表读取一个图片在原有位置添加图片临时地图是否读取完毕 否重列数量减少一点 是结束 图4.1 重列功能判断流程图开始找到一个图案方块图案是否遍历完成 否模拟第一次点击 是遍历这种图案的剩余方块模拟第二次点击图案是否能够消除 否 无可提示的连接 是对方块进行消除 提示数量减少一点结束 图4.2 提示功能判断流程图对于暂停子模块,首先停止计数器运行,即停止进度条的运行,并且弹出对话框,实现暂停功能,点击确定后可以继续进行游戏。音乐和音效功能子模块设置为缺省关系,即音效激活状态下音乐功能不可用,反之亦然,通过pCmdUI-SetCheck()语句实现缺省功能,音乐音效的播放通过PlaySound功能即可实现。PlaySound函数的声明为BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound); 参数pszSound是指定了要播放声音的字符串,该参数可以是WAVE文件的名字,或是WAV资源的名字,或是内存中声音数据的指针,或是在系统注册表WIN.INI中定义的系统事件声音。如果该参数为NULL则停止正在播放的声音。参数hmod是应用程序的实例句柄,当播放WAV资源时要用到该参数,否则它必须为NULL。参数fdwSound是标志的组合,如下表所示。若成功则函数返回TRUE,否则返回FALSE。对于积分榜子模块,首先在游戏结束后弹出对话框提示输入姓名,游戏的关卡数、积分自动进行统计,然后保存到文档中。对于破记录的提示问题,在一个游戏结束时,会弹出CAddDlg看得到的分数,这个对话框弹出来时,从数据文件读取出来,然后排序,比较一下当前的分数,当前分数大于那个链表中最大值,就提示破记录了,但是在调出积分榜时,首先要进行一下排序,然后在表格中显示出来。4.1.3帮助模块设计与实现帮助模块的设计比较简单,其下属子菜单功能相同,只是弹出对话框进行提示,通过AfxMessageBox实现,将必要的说明和提示信息写入即可实现。4.1.4游戏地图数据的设计与实现整个游戏地图分为信息显示区域和游戏区域。信息显示区域部分分布在整个地图的上方,左侧为关卡、重列和提示信息,通过使用铅笔工具直接在相应的位置上直接描绘出来。中间为进度条,通过move to和link to绘制一个边框,然后通过计数器进行控制,每隔固定时间内在进度条当前时间位置进行加1操作,即在固定时间内绘制固定的进度。在信息显示区域的右侧,绘制积分的显示,同样通过使用铅笔工具进行绘制即可,比较容易实现。对于游戏区域,被抽象成一个有坐标位置属性平面,平面上零散地分布着若干小方块,在绘制地图的类中添加地图数据成员变量,用于记录动态分配出来的一维数组地图空间的首地址,对于地图中的某个小方块的类型,可以用一个整型的ID来进行识别。地图的数据结构设计完毕。在游戏开始前,先要进行初始化,为了保证小方块能成对地出现,不应该仅仅对人物图案做简单地随机抽取,然后将随机选取出来的小方块放到地图中去就了事,而是需要成对的选取人物小方块,就是说地图中的小方块必须是偶数个才行。把地图设置成动态分配的方式,目的是让其空间可以根据行列数的需求动态地获取,而对于实际大小不同的地图空间即可。对于图案的布局,依旧是采用常用的机制,先用srand()函数对时间函数布下随机种子,然后调用rand()函数对具体的图案方块的种类进行随机的获取。对于图片资源的,可以先在内存创建两个内存位图,并对它们的图像进行载入。在需要使用的时候,则可以从这些内存位图中直接去拷贝,并绘制到游戏区域内存位图中去。首先,对方块的两种状态所对应的图片分别创建相应的设备环境,并且为它们分配关联的内存位图变量。而对于游戏区域的绘制,则通过设备环境中的图形物件群的调用进行直接绘制。4.1.5图案方块的判断连接的设计与实现设计思路是: 假设目标点 p1 , p2 ,如果有两个折点分别为z1 , z2 那么,所要进行的是: 如果验证p1,p2 直线连线,则连接成立。 对于一个折点和两个折点的情况下。搜索以p1,p2的x,y方向四条直线(可能某两条直线会重合)上的有限点,每次取两点作为z1,z2 ,验证p1到z1/z1到z2/z2到p2 是否都能直线相连,是则连接成立,这是两个折点的情况。对于一个折点,即z1=z2,对判断没影响,每次取一点作为z1或z2 ,验证p1到z1/z1或z2/z2到p2 是否都能直线相连,是则连接成立。开始一个折点连接方式判断成功成功直连方式判断成功结束两个折点连接方式判断成功成功消除所选的两个图案恢复所选的图案的原始状态 是 否 是 否 是 否 否 图4.3 连接判断流程图根据流程图的实现中,先是对直连方式中的X方向直连,以及Y方向直连这两种方式作出判断,如果尚未取得结果,再调用一个折点的情况进行判断,或者调用两个折点的情况进行判断。把直连方式分成直通、左通和右通三种情况,简单介绍一下。直通就是在选定的两个方块的直连线中,没有被任何方块所阻碍。左通就是选定的两个方块的连线之间有其它方块阻碍,但是通过它的左侧可以将它们无障碍的连通,从而不构成垂直折点的效果,而两个折点了连通方式中的其中一个类似的情况是,线的连通起码要偏移一个方块的距离来形成连通。右通形式与左通形式相同。对于如何判断选定两个图案是否可以连通抵消,是通过一个接口函数CheckConnection来实现的。首先,通过方块的不同状态确定所选位置是否有图案,通过一个变量PicIndex进行记录,如果有图案则记录位置,如果没有则不进行操作,然后选择第二个位置,如果此前所选位置有图案的话,那么首先判断第二次所选的小方块是不是第一次所选的小方块,通过坐标进行记录和判断,如果是就恢复原始状态,如果不是就进行判断了。先对人物图案是否相同进行判断,通过llk_mapytempindexxtempindex.PicIndex =llk_mapyindexxindex.PicIndex语句实现,如果不同则恢复原始状态,如果相同就进行路径的判断了,在这里就需要用到前面所说的CheckConnection函数进行判断了,判断通过就进行消除,对于图片的消除,先更改图片状态,然后进行绘图,并且加上音效的播放代码,就可以实现预期的效果了。4.1.6游戏结束判断功能的设计与实现在游戏程序中,游戏结束的判断往往是非常重要的,它表示着进行一次游戏的最终结果。对于本游戏程序对游戏结束的判断,自然是先检查游戏区域中的小方块是否都消除,由于某个位置是否由小方块采用不同的数值进行记录,所以只需判断各个小方块位置的状态就可以了。其次,由于本游戏程序的设计是按照连贯性进行设计的,倘若在初级或者是中级进行游戏时,当地图中的小方块都被消除时,应自动进行下一级,这里可以通过if和else进行判断,如果是在高级中将游戏区域中的小方块都消除完,那么游戏将结束,并给予游戏结束的提示。还有一种情况就是当游戏没有进行完的情况,当时间都消耗尽或者已无生命点数时出现死局时,即游戏地图中没有一组可以消除的方块,则游戏结束,都应给予提示游戏结束的原因,在计数器中添加相应的数值进行跟踪,当计数器也就是进度条到达底线时,在游戏结束函数中采用触发模式对游戏进行终止,对无生命点数的判断也采用相同的原理来实现。4.1.7鼠标交互功能的设计与实现鼠标选取两个图案方快后,程序将自动判断所选的两个方块是否能进行抵消操作。下面按照预先设计出的鼠标事件处理流程,对整个功能模块的具体协调与实现过程进行简单地描述。 首先,利用鼠标的当前坐标位置point对每个小单元方块的宽度和高度分别取模,获取当前鼠标落点所在游戏区域的具体行列数; 判断出该行列数是否符合条件。保证运算出来的行数和列数在预定义区域最大行数和列数内,并且点击的区域状态不是空白方块区域。 对于判断此次鼠标事件的选取是否与第一个方块的选取一样,只需通过用于记录第一个被选中的方块的行列数的成员变量是否有效即可。 对于本次选中的方块为第一个选中的情况,先对选中的方块添加一个红色的矩形外边框,用以提示用户当前的第一个方块选中所在的位置。 对该选定方块作一些判断,以便更高效地处理。判断选中的方块与前一方块是否为同一方块,并且不与上一次选定的方块为同一方块,然后才跳到下一步对两个选定的方块是否可以抵消的流程中去。 调用前面已经实现的大功能函数CheckConnection来判断所选两个图案是否可以相互抵消。 如果可以抵消,对选中的两个方块在内部核心地图对应的数据状态作适当的修改,将它们的状态记作已经被销毁的空方块状态。 完成第二个图案的选取工作与相关的功能操作后,需要对前面已经选取的第一个方块位置的记录做清理工作,以便下一个新方块组的选择。 最后,判断此次的鼠标操作是否已经胜利结束,如果是则给予用户提示,然后重新开始新的一关。开始鼠标点击位置的确定判断是否点击在图案方块 否 是判断是否已选定一个方块 否选定第一个方块 是选定第二个方块 判断是否可以抵消方块 否 是抵消方块清除选定方块记录结束 图4.4 鼠标交互流程图4.2人机界面设计人机交互技术(Human-Computer Interaction Techniques)是指通过计算机输入、输出设备,以有效地方式实现人与计算机对话的技术。它包括机器通过输出或显示设备给人提供大量有关信息及提示请示等,人通过输入设备给机器输入有关信息及提示请示等,人通过输入设备给机器输入有关信息,回答问题等。人机交互技术是计算机用户界面设计中的重要内容之一。它与认知学、人机工程学、心理学等学科领域

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论