您好,欢迎访问三七文档
计算机图形学作品设计报告题目:基于MFC和VC++6.0的连连看游戏系统设计小组成员:(第三组)朱丽菊李雪瑶翁科宇二0一五年六月1需求分析游戏作为一种产业已经渐渐地为中国大众接受,它所带来的经济效益和社会效益更是人们之前所没有估计到的,当游戏作为一种很重要的娱乐手段被大众接受时,游戏产业就已经注定会带来巨大的经济效益。连连看游戏是一款经典的小游戏,操作简单,适合所有的玩家。连连看游戏软件在windows环境下用VC++6.0工具,基于MFC框架设计开发,可以实现初始化界面,用户使用鼠标点击两张相同图案的小方块,链接路径若避开其他图片,且不超过两次转弯则消除次对小方块,并有初级、中级、高级的游戏难度选择和时间限制,丰富了游戏的娱乐性。此连连看游戏程序的目的是为了满足人们休闲的需要,在紧张工作之余休闲类的小游戏能够给人带来最大程度的放松,它界面美观,操作简单,具有一定的趣味性,是一款老少皆宜的休闲作品。关于连连看的功能描述如下:运行游戏并自动进行初始化工作,将游戏区域上方作为信息显示区域,并且通过菜单功能进行操控,菜单功能包括初级、中级和高级可供选择,放弃和退出游戏功能,提示和重列功能以及积分榜功能。游戏区域中心区域作为小方块的地图,由多种人物图案组成分布在不同位置,界面设有关卡、提示次数、重列次数、进度条以及积分的显示。玩家可以通过选取相同的两个物件来对他们进行消除操作,直到将游戏区域中的所有方块对都被消除后为胜利,并且给予破记录后的提示功能。对于资源的需求,图片资源必不可少,游戏中的小方块是一组图片资源,选用两组图案和排列完全相同但是背景色不同的两组图片作为小方块的初始状态和选定状态。为了使游戏更具娱乐性,背景音乐及音效的添加也是必不可少的,所以此游戏程序也加入了的音乐文件资源。2总体设计2.1运行环境:运行环境首先需要操作系统的支持,开发本程序使用MicrosoftWindows操作系统,为使开发连连看游戏程序能稳定运行,在硬件上至少需要内存不低于64MB,40G硬盘空间,对显卡要求不高,都能满足显卡需求,还有音响用于播放音乐。保证了以上的配置,就能保证使用MicrosoftVisualC++6.0在MicrosoftWindows系统中开发连连看游戏程序环境的可行性。2.2功能模块设计:本程序共分为三个模块,即游戏模块、选项模块和帮助模块。在游戏模块中下分为初级子模块、中级子模块、高级子模块、放弃子模块和退出子模块。对于初级子模块、中级子模块和高级子模块通过时间限制的长短加以区分,放弃子模块用于退出当前的游戏界面,退出子模块用于退出游戏程序。选项模块中下分为提示子模块、重列子模块、暂停子模块、音乐子模块、音效子模块以及积分榜子模块。提示子模块和重列子模块作为游戏的特殊功能,增加游戏的趣味性。暂停子模块可以暂停游戏。音乐子模块和音效子模块可以相互切换,用以清晰的显示音乐和音效的效果。积分榜子模块用于记录游戏的积分信息,并且对于破记录给予提示。帮助模块中下分为关于连连看子模块和帮助子模块。关于连连看子模块主要介绍一下连连看的游戏方法和作者信息。帮助子模块用于介绍本游戏的一些特殊功能的使用方法。2.3算法设计:2.3.1游戏地图数据的设计对于整个游戏区域,可以把它看作一个是由信息显示区域和图案方块游戏区域组成的地图。信息显示区域可以通过使用铅笔工具修改属性直接在需要的位置上画出即可实现。图案方块游戏区域由图案小方块零散地分布在地图的不同位置区域,并且每一个图案小方块都有与其对应的完全一样的另外一个小方块。图案方块游戏区域被抽象成一个有坐标位置属性的平面,平面上零散的地分布着若干个小方块,并且这些小方块的人物图案起码是成对出现的,可以把游戏区域地图用一个数组llk_map[i][j]来表示,llk_map[i][j]是把地图设计成一个动态分配的int整型一维数组,对地图中的行列数的表达,用一个转换法即可。在游戏开始前,需要对游戏的地图进行初始化。设计一个初始化的类,信息的显示直接调用绘连连看主程序帮助选项游戏初级中级高级放弃退出重列提示暂停音乐音效积分榜帮助关于图类即可。对于方块地图游戏区域的初始,设计初级、中级、高级均为10×9大小的区域,物的种类共计15个图案,首先通过srand()设定随机数发生,然后通过rand()函数进行图片种类数量的选择。至此,游戏地图的设计完毕。2.3.2图案方块连接判断的设计对于选中的两个方块的销毁,它们必须符合以下三个条件:⑵选中的两个图案相同。⑵选中的两个方块之间在没有障碍物的情况下,可以用若干垂直的直线线段连起来。⑶这些将它们连接起来的直线线段的折点不超过两个。同种物件的连接方式大致可以分成以下3种:⑴直连方式。在直连方式中,必须要求所选定的两个方块在同一水平直线上,并且两个方块之间没有任何其它的图案方块。在3种连接方式中,直连方式是最简单的。⑵有一个折点的垂直线段连接。所选定的两个方块如果通过折点的方式连接,那么对于折点来说,每个折点必定有且至少有一个坐标是和其一个目标点是相同的,即折点必定在两个目标点所在的X方向或Y方向的直线上。此外,对于一个折点连接的情况,折点应该为第一个选中方块的横向现或纵向线与第二个选中方块的纵向线或横向线相交而得出。还需说明的是,是这些所有可能连接的交线经过的每一个图案方块区域,它们都不允许被障碍物所阻挡。⑶有两个折点的垂直线段连接。这种方式的两个折点所连成的直线与两物件的直接连线可以构成平行线,因此可以根据这个规律,将这条水平线在游戏区域允许的条件上下移动,然后通过判断整条带垂直折点的曲线之间有无障碍物方式来确定是否可以联通。经过上面较为详细的分析后,对选定的方块是否可以作抵消操作可以这样去设计,首先,对简单的直连情况进行判断,看其是否符合条件,假如不能,再加深一个级别的复杂度,对一个折点的情况进行判断,如果不符合条件,再对两个折点的情况进行判断。2.3.3游戏胜利判断算法设计与前面的两个选定方块能否抵消的判断功能相比,它的实现显得相当简单,只需对图案方块游戏区域所有方块进行判断就可以了,只要检测到地图中还有一个图案方块还没有被抵消,并且游戏的级别不是高级,则证明游戏还没有结束,完成判断。如果时间耗尽,或者在没有生命点数时出现死局,则终止游戏。如果通过初级、中级后,进入高级,并且地图中的所有小方块都被消除,则证明游戏已经胜利,如果打破记录,会弹出提示。2.3.4游戏道具算法设计在此游戏中的道具有重排和提示两种,在游戏进行的过程中,如果玩家暂时找不到可解的小方块,就可以使用道具功能。重排功能是在原小方块位置不变的情况下,重新排列图案的顺序,以找到可解的小方块。提示功能用于提示玩家一组可解的小方块,便于玩家可以继续进行游戏。对于重排功能的实现,首先将所有小方块的位置编号暂时保存到内存中,然后随机地分布在有小方块的位置上,通过随机函数实现此功能。对于提示功能,首先编写一个检查连接的类,判断选中的两个小方块是否可以进行消除操作,这个类可以被提示功能函数调用,也可以在检查是否有解时被调用。在提示功能中,首先调用检查连接的类查找到一个可以连接的小方块,并且标记,然后更改其为选中状态,即改变颜色以达到醒目,用来提示玩家。3详细设计3.1功能模块设计与实现此连连看游戏程序根据模块的性质分为以下几大类:基本功能模块,主要通过游戏的菜单显示出来,分为游戏模块、选项模块以及帮助模块。游戏绘图模块,包括小方块图案的载入以及游戏地图背景的绘制。游戏交互模块,主要是快捷键和鼠标交互功能的实现。游戏算法模块,包括游戏的连接判断算法以及游戏胜利判断的算法。3.1.1游戏模块的设计与实现游戏模块中下分为初级子模块、中级子模块、高级子模块、放弃子模块和退出子模块。设置为10×9的地图,即横向为10个小方块,纵向为9个小方块。由于地图的大小为10行9列共90个小方块,每个种类的人物设定出现6次为偶数,这样就可以实现成对的出现了,在游戏中可以完成配对。这样一来,共90个小方块且每个人物出现6次,也就是说,共有15个人物。初级、中级和高级不可同时处于可选状态,即初级正在游戏的时候,打开菜单,初级的选项是不可选的,而中级和高级应为可选状态,通过pCmdUI-Enable()将初级、中级和高级设置成可以切换的菜单,然后分别在初级、中级和高级各自的初始化中设置其可选或者是不可选的状态即可实现。游戏模块中的放弃子模块设定好放弃的状态即可,游戏模块中的退出子模块调用程序退出语句PostQuitMessage(0)即可,比较容易实现。3.1.2选项模块设计与实现选项模块中分为提示子模块、重列子模块、暂停子模块、音乐子模块、音效子模块以及积分榜子模块。对于提示子模块和重列子模块,将这两种算法各封存在一个类当中,作为道具可以随时进行调用,并且有次数记录,当记录次数到达零以下,立即给出提示。对于提示模块,采用遍历的方法进行查找,首先遍历同一种图块中出现在不同坐标位置的图案小方块,以此模拟第一次点击,然后遍历同一种图块的剩余的不同坐标图案小方块的出现,以此模拟第二次点击,判断前后2次模拟点击选中的不同位置的同种图块能否连通,能连通则高亮显示这2个图块,提示完成;否则,继续检测连通情况直至找到为止。对于重列模块,首先通过遍历的方法,依次读取各个位置的图片,增加到临时的图片列表中,然后再随机的循环依次在原来有图片的地方添加图片,从图片列表中删除用过的图片,不删除就会有可能重复了,最后进行刷新即可。流程图如图3.1和3.2所示。图3.1重列功能判断流程图开始读取各个图片坐标保存到临时列表中在临时列表读取一个图片在原有位置添加图片临时地图是否读取完毕重列数量减少一点是否结束束图3.2提示功能判断流程图对于暂停子模块,首先停止计数器运行,即停止进度条的运行,并且弹出对话框,实现暂停功能,点击确定后可以继续进行游戏。音乐和音效功能子模块设置为缺省关系,即音效激活状态下音乐功能不可用,反之亦然,通过pCmdUI-SetCheck()语句实现缺省功能,音乐音效的播放通过PlaySound功能即可实现。PlaySound函数的声明为BOOLPlaySound(LPCSTRpszSound,HMODULEhmod,DWORDfdwSound);参数pszSound是指定了要播放声音的字符串,该参数可以是WAVE文件的名字,或是WAV资源的名字,或是内存中声音数据的指针,或是在系统注册表WIN.INI中定义的系统事件声音。如果该参数为NULL则停止正在播放的声音。参数hmod是应用程序的实例句柄,当播放WAV资源时要用到该参数,否则它必须为NULL。参数fdwSound是标志的组合,如下表所开始找到一个方块图案模拟第一次点击遍历这种图案的剩余方块模拟第二次点击图案是否能够消除对方块进行消除提示数量减少一点结束束图案是否遍历完成否否是无可提示的连接示。若成功则函数返回TRUE,否则返回FALSE。对于积分榜子模块,首先在游戏结束后弹出对话框提示输入姓名,游戏的关卡数、积分自动进行统计,然后保存到文档中。对于破记录的提示问题,在一个游戏结束时,会弹出CAddDlg看得到的分数,这个对话框弹出来时,从数据文件读取出来,然后排序,比较一下当前的分数,当前分数大于那个链表中最大值,就提示破记录了,但是在调出积分榜时,首先要进行一下排序,然后在表格中显示出来。3.1.3帮助模块的设计与实现帮助模块的设计比较简单,其下属子菜单功能相同,只是弹出对话框进行提示,通过AfxMessageBox实现,将必要的说明和提示信息写入即可实现。3.1.4游戏地图数据的设计与实现整个游戏地图分为信息显示区域和游戏区域。信息显示区域部分分布在整个地图的上方,左侧为关卡、重列和提示信息,通过使用铅笔工具直接在相应的位置上直接描绘出来。中间为进度条,通过moveto和linkto绘制一个边框,然后通过计数器进行控制,每隔固定时间内在进度条当前时间位置进行加1操作,即在固定时间内绘制固定的进度。在信息显示区域的右侧,绘制积分的显示,同样通过使用铅笔工具进行绘制
本文标题:作品设计报告
链接地址:https://www.777doc.com/doc-3311186 .html