连连看毕业设计论文.doc 40页

  • 2.28 MB
  • 2022-04-22 13:41:16 发布

连连看毕业设计论文.doc

  • 40页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'沈阳理工大学学士学位论文连连看毕业设计论文目录1绪论11.1开发背景11.2目的和要求11.3国内外研究现状21.4可行性分析31.5分析结论41.6方案论证42开发技术及开发环境62.1VisualStudio6.0简介62.2VisualC++开发工具的特点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主界面和界面显示功能调试254.2消除相同棋子的功能调试264.3游戏升级功能的调试274.4消除提示功能调试284.5棋子换盘功能的调试294.6消除提示功能的调试30结论31致谢33II 沈阳理工大学学士学位论文参考文献34附录A英语原文35附录B汉语翻译37II 沈阳理工大学学士学位论文1绪论1.1开发背景连连看的主要游戏规则来源于“四川麻将”,是给一堆图案中的相同图案进行配对的简单游戏。。网络小游戏制作的目的是满足了人们休闲的需要,在紧张工作之余休闲类的小游戏能够给人带来最大程度的放松,也可以增进人们之间的交流,沟通,通过游戏还可以认识更多的朋友,也可以到达跨省、跨市,甚至跨国间人们互相娱乐的目的。通过此次课题的设计,学习和掌握如何制作一款游戏软件,熟悉游戏软件制作的步骤,为以后的学习和工作打下基础。1.2目的和要求连连看游戏主要是鼠标两次点击的图片能否消去的问题。当前,前提是点击两张相同的图片,若点击的是同一张图片或者两张不同的图片,则不予处理。在两张想同图片所能连通的所有路径中,如果存在一条转弯点不多于两个的路径,就可以消去;如果没有,则不予处理。此程序的课题内容及目标如下:设计一款适合大众的充满集合娱乐、休闲、趣味益智和娱乐于一体的单机小游戏。功能完善,可玩性高,界面美观,操作简单。(1)能实现主菜单和界面的显示(2)随机生成游戏界面,具有时间限制功能。(3)方块选中后图片要有突出显示。(4)选择两个图案相同的方块,并以不超过两个转弯的连线将它们连接起来,便可以消除这对方块,每一局里玩家需要在规定的时间内消除所有的方块,当完成任务后,才能进入下一关卡。(5)当出现无解的局面时,可以重新换牌,当时间为0时游戏结束。(6)选择提示功能时,游戏自动突出显示两个可以消除的方块,并且提示次数减少一次。(7)英雄榜的更新,当玩家当前的记录高于先前的记录,在游戏结束时,自动更新英雄榜。(8)支持背景音乐播放功能。38 沈阳理工大学学士学位论文1.3国内外研究现状电脑游戏在我国起步虽晚,发展却并不为慢。作为后来者,国内业界同行们的信心、勇气和紧迫感曾经着实令玩家们欣慰。让我们记住这些在国产游戏事业上曾经洒过汗水的年轻人,正是他们的创新精神和勇气,才使得国产游戏在并不宽松的环境下蓬勃发展至今。与单机游戏日渐衰落正相反的是,网络游戏方兴未艾,遍地开花。但是,与此同时,我们也看到了,在繁荣的背后,潜在的危机,一是来自国内游戏制作者在游戏制作理念上的不足和困乏,另外就是资金问题,这两方面与欧美游戏制作差距很大。在美国,集中了许多计算机软件的设计人才,他们工作之余,时常喜爱编一种能与人斗智的“游戏”,以此来锻炼编程的能力。这种“游戏”花样繁多,但其特点都是利用计算机软件事先设计好的“分析”、“判断”能力反过来与人较量。由于不断修改更新,使计算机的“智力”水平与人难分高低。连连看这款游戏来源于中国,现在已风靡全世界。连连看游戏从出现到现在已经更新了好多版本,比较知名的有蔬果连连看、水晶连连看、阿达连连看和宠物连连看等不同版本,现在已经有FLASH版本,游戏起来更加方便,无需安装,打开网页即可游戏,最近更是出现网络版本,QQ连连看就是这样一款连连看游戏的网络版本,可以通过网络与其他玩家一起进行游戏,而且地图更为繁多,道具更为丰富,极大地增强了游戏的乐趣。今天,当我们回顾电子游戏最初为什么能吸引人,我们不难悟出这样的道理:电子游戏满足了人们对竞争和对抗的渴望,它总是给予竞争者以新的难题。同时,它还能为胜利者提供崭新的画面和音乐享受。38 沈阳理工大学学士学位论文1.4可行性分析可行性分析(feasibilitystudy),世界上普遍采用的一种研究工程项目是否可行的科学。目的:它通过各种有效的方法,对工程项目进行分析,从技术、经济、财务等方面加以评价,最终给投资决策者提供是否选择该项目进行投资的依据。可行性分析的焦点是:要站在咨询的立场上;要有多种替代方案;对各种方案作经济比较;决定最佳投资时间和投资规模;提出可能实施的具体措施;着眼于资源的有效利用;站在中立客观立场上得出结论。经济可行性:开发本程序首先需要计算机一台,奔腾3以上CPU,256MB以上内存,40G以上硬盘即可以,大约五千元左右。软件方面,正版MicrosoftVisualC++6.0光盘价格为五千二百元,正版操作系统WindowsXP简体中文专业版价格大约在两千元左右,购买书籍二百元,开发此程序需要的时间大约需要三个月左右的时间,其中所消耗的人工费每月一千元,共计三千元,所以开发此游戏程序的成本共计一万五千元四百元左右。开发出的产品倘若在因特网下载,一个注册码费用为十元,只需下载一千五百四十次即可收回成本。在高速发展的信息时代,一千五百四十次的下载不成问题。所以,从经济角度来讲,开发本程序是可行的。技术可行性:设计连连看游戏程序需要通过菜单和鼠标对游戏进行操控,游戏的界面需要大量的绘图机制,以达到操作简单、界面美观的目的。VisualC++6.0为用户提供了一个可视化、通用的应用程序集成开发环境-DeveloperStudio(也俗称VisualStudio)。DeveloperStudio包含了一个文本编辑器、资源编辑器、工程编译工具、一个增量连接器、源代码浏览器、集成调试工具以及一套联机文档(MSDN)。通过DeveloperStudio,开发人员可以完成项目工程的创建、程序的编辑、修改、运行和调试等各种操作。DeveloperStudio采用标准的多窗口用户界面,提供了大量实用工具以支持可视化编辑的特性,包括项目工作区、AppWizard(应用程序向导)、Class(类向导)、WizardBar(向导工具条)、ComponentGallery(组建画廊)等。在ComponentGallery(组建画廊)中,VisualC++6.0为用户提供了一组常用的应用程序组件,分为两类,分别是DeveloperStudioComponents和RegisterActiveXControls。其中DeveloperStudioComponents包含了经常使用的一些标准的Windows应用程序特性,例如,弹出菜单、剪贴板、对话条、启动画面、定制状态条、日积月累对话框等,所以,可以通过ComponentGallery实现菜单制作、鼠标操控等功能,而绘图功能也可以通过VisualC++6.0为用户提供的GDI38 沈阳理工大学学士学位论文库完全实现。对于菜单的制作通过默认的框架结构即可实现,然后通过框架改造达到要求的条件。鼠标交互功能的实现可以通过对鼠标左键被按下时触发的命令消息进行拦截,并重新写该消息的处理函数实现。并且不会的地方可以问问老师或者同学,此外开发该游戏的难度不大。因此,技术上是可行的。使用可行性:连连看游戏,只要将相同图案的两张方块用三根以内的直线连在一起就可以消除,规则简单容易上手。游戏速度节奏快,画面清晰可爱,适合不同年龄的玩家。丰富的道具加入,增强游戏的竞争性。多样式的地图,使玩家在各个游戏水平都可以寻找到挑战的目标,长期地保持游戏的新鲜感。使用新颖的连击积分规则,两秒内连击次数越多得分越高,并且有提示和重列次数的奖励,使游戏玩家在体会连击的快感后,同时对自己的游戏速度,更有挑战性和追求极速的欲望。对于用户交互方式,这里选择鼠标交互方式。下面简单描述一下通过实现的功能。鼠标选取两个图案方块后,程序将自动判断所选定的两个方块是否能进行抵消操作,能进行则抵消。在游戏过程中,我们不断重复上面描述的功能,直到游戏的胜利结束。可以说,对于玩家操作起来很容易上手,即使是年龄大的玩家,也会通过很短时间的适应而熟悉连连看游戏的操作。所以,从操作可行性角度分析开发此程序是可行的。硬件方面:具备操作系统windows2000版本以上。内存要求512M以上,硬盘10G以上,CPU200MHZ以上,显卡缓存128M以上的pc机。1.5分析结论以上对于开发此程序分别从技术角度、经济角度和操作性角度进行了全面的分析,技术上使用MicrosoftVisualC++6.0进行开发,通过网络下载回收成本,游戏画面美观、操作性强,适合所有人不同年龄段的玩家进行娱乐。纵上所述,以MicrosoftVisualC++6.0为工具开发连连看游戏的方案是可行的。1.6方案论证在分析设计阶段,有两种方案可供选择:⑴使用Win32应用程序框架。38 沈阳理工大学学士学位论文Win32是Windows的一个子系统,也是最重要的一个。(还有POSIX子系统和OS/2子系统)Win32子系统为应用程序提供了使用系统资源的接口Win32API,Win32API是Windows用户态下应用程序编程的基础。因此所有在Win32API基础上的应用程序都是Win32应用程序。⑵使用MFC应用程序框架。MFC(MicrosoftFoundationClasses)微软基础类库。这个类库不光封装了大多数的GUI系统对象和数据结构,还为开发者提供了开发框架,使原本复杂繁琐的Windows开发(尤其使界面开发)变得非常简单。MFC是对API的封装,因此它能实现的功能只是API的子集。对于追求系统底层相关而且效率高的程序而言,MFC不够灵活而且开销也大。但对于图形界面开发,如果没有MFC而使用API的话那么开发起来非常困难。在游戏的编写中需要大量的图形界面开发,所以我们放弃第一种方案的设计思想,参考网络上流行的连连看的游戏规则,采用第二种方案设计。38 沈阳理工大学学士学位论文2开发技术及开发环境2.1VisualStudio6.0简介在全世界,Windows操作系统被广泛使用,Windows平台下的软件开发也成为软件开发人员的必备技能。VisualStudio系列开发系统一直是在Windows操作系统下进行软件开发的一套非常实用的工具集。其可以用来开发多种Windows下的软件项目,包括Windows应用程序、动态链接库、Windows服务、office集成开发、数据库项目开发等。VisualC++6.0是微软公司开发的面向Windows程序设计的一整套开发环境——VisualStudio中的一种开发工具。同时也是微软公司向Windows操作系统(包括WindowsNT、Windows2000、WindowsXP等)出品的可视化的快速开发工具的产品。VisualC++是以可视化技术为基础,以C++为主要编程语言,集成众多工具的开发利器。其操作简单,界面和功能设计符合程序员的开发习惯,同时配合使用微软官方开发的帮助文档MSDN,可以给设计和开发工作带来更大的便利。在一般的游戏设计中,VisualC++也是非常好的开发工具。2.2VisualC++开发工具的特点VisualC++提供的MFC类库,是一个很大的、扩展了的C++类层次结构,其能使开发Windows应用程序变得更加容易。而且MFC在整个Windows家族中都是兼容的,也就是说,无论是Windows98还是WindowsXP,所使用的MFC是兼容的。每当新的Windows版本出现时,MFC也会得到修改以便使旧的编译器和代码能在新的系统中工作。MFC也会得到扩展,添加新的特性、变得更加容易建立应用程序。使用MFC的最大优点是其做了所有最难做的事。MFC中包含了成千上万行正确的、优化和功能强大的Windows代码。其调用的很多成员函数可以帮助你完成自己可能很难完成的工作。一般性的界面开发工作也可以全部交给其来完成,用户就只需在这些基础上做出自己想要实现的功能即可。与其他开发工具相比,VisualC++完成Windows图形界面的程序所花费的时间要少得多。38 沈阳理工大学学士学位论文由于MFC编程方法充分利用了面向对象技术的优点,使得我们编程时极少需要关心对象方法实现的细节,同时类库中的各种对象的强大功能足以完成程序中绝大部分所需的功能,这使得应用程序中程序员所需编写的代码大为减少,有力地保证了程序的良好性和可调试性。近几年经过微软公司不断地完善,VisualC++在开发速度、程序执行效率、程序文件大小与系统的集成性方面都有极大的提高,这使得其不但适应开发一般的应用软件,还可以开发数据库应用软件,同时更适合图形图像和文件压缩等算法编程。另外由于其是微软公司推出的,因此也能够较好地与Windows平台接合,深入操作系统的内部和底层,实现高级程序设计要求,提高程序的运行效率。2.3运行环境运行环境首先需要操作系统的支持,开发本程序使用MicrosoftWindowsXP操作系统,为使开发连连看游戏程序能稳定运行,在硬件上至少需要奔腾3CPU做保证,内存不低于64MB,40G硬盘空间,对显卡要求不高,都能满足显卡需求,还有音响用于播放音乐。保证了以上的配置,就能保证使用MicrosoftVisualC++6.0在MicrosoftWindowsXP系统中开发连连看游戏程序环境的可行性。38 沈阳理工大学学士学位论文3系统需求分析及设计需求分析就是描述系统的需求,通过定义系统的关键域来建立模型,分析的根本目的是在开发者和提出需求的人之间建立的一种理解和沟通机制。3.1系统功能需求开发一款单机版的休闲类连连看游戏,该游戏具备的功能如下:(一)能够显示主菜单和界面游戏需要提供主菜单让玩家进行游戏设置,同时能够显示剩余时间、当前游戏等级等相关信息到界面上。(二)能够实现时间限制功能能够根据游戏状态自动增加或者减少当前时间限制长短。(三)能够根据规则消除相同棋子游戏以鼠标进行操作,第一次点击棋盘中的棋子,该棋子此时为“被选中”状态,以特殊方式显示出来;再次单击其他棋子,若该棋子与被选中的棋子图案相同,且把第一个棋子到第二个棋子连起来,中间的直线不超过3根,则消掉这一对棋子。并且当前的时间限制长短增加,否则第一个棋子恢复成违背选中状态,而第二个棋子变成被选中状态。当游戏时间全部消耗完时,则游戏结束。(四)游戏升级功能当游戏中的棋子全部消除完毕时,游戏等级上升一个等级。游戏等级没增加一个等级,时间限制长度如表3.1所示。表3.1游戏等级与时间限制游戏等级时间限制长度游戏等级时间限制长度1120秒670秒2110秒760秒3100秒850秒490秒940秒580秒1030秒38 沈阳理工大学学士学位论文(二)消除提示功能在游戏中,如果玩家觉得自己无法找到一对消除棋子时,可以使用快捷键(f5)调出游戏中的提示功能,来提醒当前可消除的棋子。最多可使用3次。(三)棋子换盘功能如果玩家觉得自己无法全部消除时,可以使用快捷键(f6)调用棋子换盘功能,重新把旗子随机排列来继续游戏,该功能最多可以使用3次。(四)英雄榜的更新当有玩家得到的等级超过当前记录等级,在游戏结束时要求玩家把名字输入并保存下来。游戏初始时记录分数线为1级。例如,第一个玩家的等级为2级,游戏结束时,那么这个玩家的等级将被保存下来作为最高游戏等级记录。直到有玩家的等级超过2级,才能更新当前记录等级并在退出游戏等级时保存玩家名字及游戏等级。(五)游戏支持背景音乐功能通过主菜单,在游戏开始后,可以选择播放或者禁止播放背景音乐。默认为禁止播放。(六)游戏提供帮助说明文档在游戏菜单中,提供一个使用说明项,以方便对游戏不了解的玩家对游戏操作和使用。对于资源的需求,图片资源必不可少,游戏中的小方块是一组图片资源,选用两组图案和排列完全相同但是背景色不同的两组图片作为小方块的初始状态和选定状态。为了使游戏更具娱乐性,背景音乐及音效的添加也是必不可少的,所以此游戏程序也加入了的音乐文件资源38 沈阳理工大学学士学位论文3.2概要设计3.2.1总体设计本程序共分为六个模块,即主界面显示模块、棋子操作模块、游戏升级模块、播放音乐模块、英雄榜模块、帮助功能模块。连连看游戏的功能架构(如图3.1所示)连连看播放音乐功能游戏升级功能棋子操作功能主界面显示功能帮助功能英雄榜功能棋子操作功能更新记录显示菜单棋子显示棋子连接提示棋子换盘图3.1连连看功能架构38 沈阳理工大学学士学位论文3.2.2游戏菜单结构的设计连连看游戏菜单结构的设计如图3.2所示。连连看游戏英雄榜ngb游戏帮助游戏设置关于帮助开始结束背景音乐图3.2游戏菜单结构设计当用户进入游戏界面,点击游戏菜单里的“游戏”选项中的“开始”后,游戏正式开始。点击菜单“游戏设置”里的背景音乐可以播放节奏感强烈的背景音乐。系统默认设置为禁止播放背景音乐。当玩家在游戏过程中遇到不能消除的棋子情况下,可以点击菜单里的游戏帮助选项。英雄榜记录了玩家游戏的最好记录以及玩家的名字。3.3连连看游戏的详细设计3.3.1游戏各功能的设计描述在连连看游戏中,大致可以分为8个功能模块。1.时间限制模块的算法设计时间限制模块的算法主要分为以下几个步骤:(1)在游戏开始时,设置当前时间(nOverTime)为60秒。(2)设定一个时间定时器TIMER1,时间间隔为1000毫秒。38 沈阳理工大学学士学位论文(1)每当第一次时间间隔到时,就把当前限制时间减少1秒。(2)如果游戏中有一对棋子消除时,就把限制时间增加3秒。例如,当前限制时间为40秒,这时有棋子被消除,那么限制时间变为43秒。(3)如果限制时间变成0秒,说明游戏结束,弹出结束提示对话框。如果当前游戏等级超过记录等级,还有弹出英雄榜对话框对话。2.消除相同棋子模块的算法设计消除相同棋子模块的算法主要分为以下几个步骤:(1)当鼠标点击棋子时,保存到棋子坐标及类型到“第一次选中变量”中。(2)得到鼠标第二次选中的棋子坐标及类型。(3)比较两次棋子类型,如果相同,转步骤(4)。如果不相同,转步骤(5)。(4)画一条连接线,并消除这对棋子,退出等待下一次鼠标选择。(5)把鼠标第二次选中的棋子坐标及类型赋值给“第一次选中变量”。3.游戏升级模块的算法设计游戏升级模块的算法主要分为以下几个步骤:(1)保存当前游戏等级和限制时间初始值。(2)当游戏中的棋子全部被消除完毕时,就把当前游戏等级增加一级。(3)把限制时间的初始值减少10秒。(4)调用重新开始游戏接口函数。4.消除提示模块的算法设计消除提示模块的算法主要分为以下几个步骤:(1)判断提示次数变量的值,如果等于0,结束。(2)查找当前棋盘中相同的棋子。(3)在相同棋子中,查找可以消除的棋子。(4)给出提示连线,提示次数变量减少1.5.棋子换盘模块的算法设计棋子换盘模块的算法主要分为以下几个步骤:(1)保存当前棋盘数组中的数据到临时数组中。(2)循环地从临时数组中,随机取出数据保存到棋盘数组中。38 沈阳理工大学学士学位论文6.英雄榜模块的算法设计英雄榜模块的算法主要分为以下几个步骤:(1)在读取配置文件(setup.ini),得到并显示当前最高等级和大名。(2)在玩家结束游戏时,比较当前用户等级和最高等级。如果高于配置文件中的最高等级,就弹出“英雄榜”对话框,要求输入玩家的名字,并连同玩家的等级保存到配置文件中。7.音乐播放模块和的算法设计音乐播放模块比较简单,只需要在用户选择音乐播放时,把音乐资源载入程序并播放。8.帮助类模块的算法设计帮助类模块的算法也比较简单,只要把相应的对话框资源显示出来就可以了。3.4相关技术与重点难点3.4.1相关技术GDI(GraphicsDeviceInterface,图形设备接口)主要负责在显示屏幕和打印设备等方面输出图像信息,是一组通过C++类实现的应用程序编写接口。作为一个设备接口,它可以使得开发人员在将信息输出于屏幕或打印机之时无需考虑具体的目标输出的硬件特性,只需调用GDI库的一些方法进行操作即可,而具体的绘图工作由特定的设备驱动来完成,从而使开发人员能轻松地在不同的硬件中做图像绘制输出。绘图方案设计采用内存位图映射的方式,先将整个游戏区域的图象绘制到内存位图中去,然后再一次性地将它加载到屏幕上予以显示。先在内存创建两个内存位图,并对它们的图象进行载入。在需要使用的时候,则可以从这些内存位图中直接去拷贝,并绘制到游戏区域内存位图中去。对框架位图及人物位图分别创建相应的设备环境,并且为它们分配了关联的内存位图变量。而对于游戏区域的绘制,亦为它创建了一个内存设备环境以及关联的内存位图。完成以上工作后,需要在程序开始运行的时候,一次性地对它们进行适当的初始化。此游戏程序的关键在于游戏的绘图方案,是此程序的难点,在此程序中的绘图方案通过GDI技术实现。38 沈阳理工大学学士学位论文3.4.2系统的重点难点此程序的重点是鼠标的交互功能。通过ClassWizard对鼠标左键被按下时触发的命令消息进行拦截技术来实现。因为游戏的全部过程需要依靠鼠标操作,所以鼠标交互功能的设计是否人性化就成了此连连看游戏程序的重点。此程序的难点是连连看游戏程序的连接线功能。首先编写一个创建路径的类,通过这个类使游戏中消除小方块时能够找到一条可以连接的路径进行连线,然后通过一个画线的类进行连接。38 沈阳理工大学学士学位论文3.5游戏各功能流程图(1)消除及时间限制功能流程图。如图3.3游戏开始初始化棋盘限制时间是否为0游戏结束接收玩家输入是否选中相同棋子消除棋子N限制时间增加图3.3消除及限制时间功能流程图38 沈阳理工大学学士学位论文(2)游戏升级及英雄榜更新流程图,如图3.4所示。游戏开始初始化棋盘时间限制是否为0是当前记录是否高过历史记录否接收玩家输入否是否消除完毕是保存新的记录并且录入玩家姓名结束游戏是游戏增加一级图3.4游戏升级及英雄榜更新功能流程图38 沈阳理工大学学士学位论文(2)消除提示模块流程图,如图3.5所示。游戏开始初始化棋盘限制时间是否为0游戏结束接收玩家输入消除提示次数是否为0是消除棋子否消除提示次数减少一次图3.5消除提示模块功能流程图38 沈阳理工大学学士学位论文(2)棋子换盘模块功能流程图,如图3.6所示。游戏开始初始化棋盘限制时间是否为0游戏结束接收玩家输入换盘次数是否为0是消除棋子否换盘次数减少一次图3.6棋子换盘模块功能流程图38 沈阳理工大学学士学位论文3.6主对话框的设计与实现3.6.1主对话框的设计连连看的主对话框类,主要负责显示游戏界面、等级、时间显示、及快捷键调用等内容。其主要有如下几个处理模块。1.主菜单处理模块主菜单处理模块比较简单,只需要创建一个菜单对象,并在对话框初始化函数进行加载相应资源并设置到对话框中。2.连接提示处理模块连接提示模块,主要调用棋子类中的查找有效连接接口函数,通过返回的两个图标相同棋子位置来设置两个棋子的状态为按下。3.换盘处理模块换盘处理模块,主要是把棋盘数组中的数据重新进行随机排列。4.初始化棋盘数据模块初始化棋盘数据模块,利用随机数,随机地选择在棋盘数组中插入棋子数据。每一类棋子生成2组4个相同的数据。5.游戏信息处理模块游戏信息处理模块,主要利用设置定时器,每一秒进行更新显示区域。在这些区域中,以绘图方式进行输出。3.6.2主对话框的实现实现主对话框类CLIKDIg需要如下个步骤:(1)声明主对话框类CLIKDIg类,其中包含链接提示、显示棋盘、换盘、初始化游戏及棋盘数据函数。(2)添加主对话框类CLIKDIg的实现,其中包含基本的初始化对话框函数、游戏开始处理函数、及背景音乐播放功能函数。(3)给主对话框类添加显示函数、分数和游戏等级信息更新函数及接收玩家键盘输入处理函数。(4)38 沈阳理工大学学士学位论文游戏中要求实现限制时间和最高纪录处理功能,所以必须在主对话框类中再添加定时器处理和最高纪录处理功能函数。在定时器响应函数中,根据当前时间剩余数判断,如果小于0则说明时间已到,提示用户游戏结束,并接收用户是否重新开始的选择,然后根据选择重新开始游戏或者结束游戏。如果是结束游戏,还需要调用超记录对话框。(5)实现主对话框类中的棋盘换盘、棋子连接提示及棋盘初始化功能函数。调用换盘函数进行棋盘的重新排列,其中使用了循环语句来判断,因为棋子全部是随机排列,有可能还是无法消除的棋子,所以必须判断有棋子可以消除时才能换盘成功。CLlkDlg::CallHint()是显示连接提示函数,其主要是调用配对函数Hint(),得到当前棋盘中可以连接的两个棋子,并将其设置为按下状态,这样就实现了提示。CLlkDlg::Exchange(intmap[][MAXY])是换盘函数,该函数主要是将整个棋盘数据保存到临时数组中,然后利用随机数重新排列棋盘数组中的数据,实现换盘。CLlkDlg::RefreshMap()是跟新棋盘函数,主要思想是遍历整个棋盘数组,然后将其中为空或者消除后的区域加入到刷新范围内进行刷新,不进行全界面刷新以防闪烁。CLlkDlg::InitMap(intmap[][MAXY])是初始化棋盘数组,主要是随机将相同类型的4个棋子放到棋盘数组不同的位置中。3.7棋子类的设计与实现3.7.1棋子类的设计棋子类,包含如下几个功能函数。1.游戏胜负的判断处理游戏胜负的处理步骤如下:(1)等待玩家的鼠标输入信息。(2)在定时器中,每次扣除游戏限制时间1秒。(3)当游戏时间为0时,弹出游戏失败结束提示,并根据玩家选择重新开始游戏或者结束游戏。(4)在玩家消除一对棋子后,就对当前棋盘数组进行遍历。如果是空,说明玩家已经全部消除完毕,然后调用升级处理。如果不是空,则返回步骤(1)。2.游戏升级处理游戏升级处理步骤如下:38 沈阳理工大学学士学位论文(1)当游戏中的棋子全部被消除完后,弹出升级提示对话框。(2)当玩家选择继续时,就调用主对话框类的重新开始游戏接口函数。但要把当前游戏等级增加1级。(3)当玩家选择不继续时,直接调用退出函数。3.查找处理查找处理实现步骤如下:(1)遍历整个棋盘数组。(2)查找一根直线可以连接的一对棋子,如果没有则转下一步;如果有则转至步骤(6)。(3)查找有一个拐角,即两根直线以连接的一对棋子,如果没有则转下一步;如果有则转至步骤(6)。(4)查找有两个拐角的,即三根直线以连接的一对棋子,如果没有则转下一步;如果有则转至步骤(6)。(5)如果返回假,表示查找失败。(6)如果返回真,表示查找成功,并把棋子的位置在输出参数中返回。4.提示处理提示处理是通过调用查找函数,把其中可以连接的一对棋子的位置通过输入参数返回给上层调用者,由调用者设置相关棋子为选中状态。3.7.2棋子类的实现棋子类CChessMan的实现,分为如下几个步骤:(1)声明棋子类CChessMan,其中包含两个构造函数、查找接口函数、判断棋子为空函数以及鼠标响应函数。(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()38 沈阳理工大学学士学位论文函数判断棋子是否全部消除完毕,当全部消除完毕时,就给出提示窗口,让玩家选择是否继续下一关,玩家选择继续则增加等级数,同时调用start()函数重新开始;玩家选择结束的话,则进行最高等级判断以及清除窗口工作。调用Hint()函数查找棋盘中是否有可以匹配的棋子,如果有,则不做任何操作;否则自动调用换盘函数进行换盘,并增加换盘数。(1)棋子类的查找接口、棋盘判空功能函数的实现。前一个查找函数的实现,主要利用输入两个棋子坐标来查找有无连线。后面一个查找函数,是在前一个查找函数的基础上增加了棋子间有连接就要把棋子的拐角位置输出。(2)实现棋子类的配对接口函数分为两种:一种是判断当前棋盘上有无配对棋子;另一种是在前一种的基础上添加输出配对棋子坐标的功能。前一种判断当前棋盘上有没有可以配对的棋子的函数,主要是遍历全部棋盘数组中的元素,但要除去其中棋子类型为消除了的(0)或者类型不相同及棋子位置相同的。然后查找棋盘数组中的元素。查找两个棋子之间有无可以有效连接的线,如果有,则说明还有可配对的棋子。后一种是判断当前棋盘上有没有可以配对的棋子的函数,其不同的是需要输出两个棋子的位置,这样就可以将两个棋子显示出来。(5)实现各种不同的查找函数。包含查找一根直线连接函数、查找一个拐角连接函数和查找两个拐角连接函数。第一个是查找两个棋子之间是否有直接连接的实现,实现思想是先判断是否是同一行或者同一列,如果是同一行,则比较两个棋子同一行间是否有棋子存在(0和-1不算,0是已消除,-1是边界),如果有,则说明不可连。否则说明可连。同理可以判断同一列的情况。第二个是查找两个棋子之间是否有2条直线可以连接的实现,用来查找由两个棋子所在的点构成的矩形的各个角是否有棋子存在,如果有,就直接跳过;没有才判断该点与两个棋子分别是不是可以用直线相连,如果可以连,则说明两个棋子用2条直线可以连接,反之不可以连。最后如果各个角都不为空,则说明两个棋子不可连。第三个是查找三根直线可以连接的棋子,在整个棋盘数组中查找2(a,b)个点(这两个点必须是消除过的棋子或者是边界位置)。其中,a点能够与棋子1直线相连,b点能够与棋子2直线相连,那么两个棋子是配对的,他们就可以被消除掉。38 沈阳理工大学学士学位论文对于棋子的布局,依旧是采用常用的机制,先用srand()函数对时间函数布下随机种子,然后调用rand()函数对具体的图案棋子的种类进行随机的获取。对于图片资源的,可以先在内存创建两个内存位图,并对它们的图像进行载入。在需要使用的时候,则可以从这些内存位图中直接去拷贝,并绘制到游戏区域内存位图中去。首先,对棋子的两种状态所对应的图片分别创建相应的设备环境,并且为它们分配关联的内存位图变量。而对于游戏区域的绘制,则通过设备环境中的图形物件群的调用进行直接绘制。3.8人机界面设计人机交互技术(Human-ComputerInteractionTechniques)是指通过计算机输入、输出设备,以有效地方式实现人与计算机对话的技术。它包括机器通过输出或显示设备给人提供大量有关信息及提示请示等,人通过输入设备给机器输入有关信息及提示请示等,人通过输入设备给机器输入有关信息,回答问题等。人机交互技术是计算机用户界面设计中的重要内容之一。它与认知学、人机工程学、心理学等学科领域有密切的联系。人机交互功能是决定系统“友善性”的一个重要因素。人机交互功能主要靠可输入输出的外部设备和相应的软件来完成。可供人机交互使用的设备主要有键盘显示、鼠标、各种模式识别设备等。与这些设备相应的软件就是操作系统提供人机交互功能的部分。人机交互部分的主要作用是控制有关设备的运行和理解并执行通过人机交互设备传来的有关的各种命令和要求。早期的人机交互设施是键盘显示器。操作员通过键盘打入命令,操作系统接到命令后立即执行并将结果通过显示器显示。打入的命令可以有不同方式,但每一条命令的解释是清楚的,唯一的。随着计算机技术的发展,操作命令也越来越多,功能也越来越强。随着模式识别,如语音识别、汉字识别等输入设备的发展,操作员和计算机在类似于自然语言或受限制的自然语言这一级上进行交互成为可能。此外,通过图形进行人机交互也吸引着人们去进行研究。这些人机交互可称为智能化的人机交互。这方面的研究工作正在积极开展。对于本程序,为了增强趣味性以及操作性,人机界面设计必不可少。1.为使游戏界面友好美观,在颜色上的搭配很重要,由于有很多种人物的图案而且颜色很多,所以其它区域颜色不可很多,采用单一色调即可保持美观、简洁。38 沈阳理工大学学士学位论文图3.7进行中的游戏界面2.在适当时刻应予以提示操作。当游戏时间结束的时候,系统提示游戏时间到,可以选择继续游戏或者结束游戏。在过关的时候,系统提示玩家是否要挑战下一关。如图3.8所示图3.8游戏提示窗口通过以上这些设计以达到人机界面的友好、美观,更能吸引玩家进行游戏。38 沈阳理工大学学士学位论文4连连看游戏的调试调试是软件开发过程中最艰巨的脑力劳动,调试开始时,软件开发者仅仅面对着错误的征兆,然而在问题的外部现象和内在原因之间往往并没有明显的联系,在组成程序的密密麻麻的元素中,每一个都可能是错误的根源。如何能在浩如烟海的程序元素中找到有错误的那个元素,这是调试过程中最关键的技术问题。4.1主界面和界面显示功能调试程序启动后,其主菜单及主界面如图4.1所示。图4.1连连看游戏主界面及菜单判断结果:游戏的菜单和界面显示成功。38 沈阳理工大学学士学位论文4.2消除相同棋子的功能调试游戏开始后,查看其中相同的棋子,选中其中一个,如图4.2。图4.2选中相同的棋子选中两个相同的棋子,棋子被消除,如图4.3所示。38 沈阳理工大学学士学位论文图4.3选中相同的棋子,棋子被消除判断结果:消除相同的棋子功能测试成功。4.3游戏升级功能的调试查看当前游戏等级,如图4.4所示。图4.4当前游戏等级消除完全部棋子时,查看有无提示。单击“确定”按钮,如图4.5所示。图4.5消除完全部棋子时的界面38 沈阳理工大学学士学位论文升级后,查看当前游戏等级,如图4.6所示。图4.6升级后的游戏等级判断结果:通过比较,游戏中的升级功能正确。4.4消除提示功能调试测试连连看游戏是否有帮助提示功能。选择“帮助”|“帮助”命令,游戏弹出帮助对话框,如图4.7所示。图4.7游戏帮助对话框判断结果:连连看游戏帮助提示正确。38 沈阳理工大学学士学位论文4.5棋子换盘功能的调试运行游戏后,消除若干配对棋子,如图4.8所示。图4.8消除若干配对棋子的棋盘按下快捷键f6,调用换盘功能后,棋盘如图4.9所示图4.9换盘后的棋盘判断结果:通过比较,连连看的换盘功能得到实现。38 沈阳理工大学学士学位论文4.6消除提示功能的调试测试连连看游戏中使用快捷键f5,调用消除提示功能。游戏界面上有配对棋子提示,如图4.10所示。图4.10消除配对提示综合所有测试,连连看游戏程序功能基本实现。38 沈阳理工大学学士学位论文结论通过几个月的思考和专研,最终完成了连连看游戏程序设计。程序的完成情况还算不错,基本实现了一款连连看的所有功能。游戏运行比较稳定,在游戏过程中还没有出现过因系统原因造成的错误,游戏界面简洁,美观。背景的选择也是符合一定的美学的,在视觉上给于玩家美得感受。游戏操作也比较简单,使得玩家可以轻松上手。在算法问题上,处理的比较得体,不会造成互相干扰,尤其是方块的消除算法,做的比较详细、清晰,这也造成了代码量很大,导致工作量很大。在这个游戏中还有很多的不足,毕竟是第一次编写游戏程序,而且编写游戏程序的要求很高。是游戏就有BUG,不能保证此连连看游戏程序没有任何错误,只能把显性错误消除,也尽量减少隐形错误的数量。本系统还有许多不尽如人意的地方,比如功能较少,人机交互也少,出错处理不够等多方面问题。软件开发是一个不断完善的过程,只有在实际的使用过程中才能不断地发现问题,从而再加以改进。而在系统的设计过程中,难免会出现一些预测不到的异常,这些异常甚至在系统测试阶段都检查不出来,只有在用户的使用过程中才能检查出来,很多地方未能考虑周全导至系统存在着很多不足之处,这些不足主要是由于时间不足造成的。在代码设计上也存在不足,容易造成系统运行效率的降低,这就需要在以后系统使用过程中逐步发现,并不断进行升级。本程序还可以在许多地方进行扩展,地图的数量还可以增加,地图的类型也可以不断改变,可以设置更多的道具,可以提供玩家选择多种不同的人物或者水果图片,不同地图配有不同的背景音乐等等。这些功能可以把连连看游戏的娱乐性发展到一个新的高度,这些功能都会在以后的时间内进行不断改善。在设计前期我查阅了很多相关的书籍,去了解连连看这款小游戏。包括自己也去小游戏网站上玩了玩许多版本的连连看,这加深了我对这款游戏的理解和认识。在设计过程中,有很多不是特别会的算法包括一些MFC工具的使用,由于老师同学们给了我很大的帮助和鼓励,并且通过上网查资料,最终克服了一个又一个的问题,才使得我能把这款小游戏完成,真的很感谢。调试程序的时候也出了很多的岔子,之前用的操作系统是Windows8.1,对于visualstdio6.0存在兼容的问题,最后换了成win7系统后解决了不兼容。MFC类库可以帮助程序员编写大量的高效率的正确的windows应用程序,通过这次毕设,加强了我对vc++各种控件的了解,如利用Picture控件显示图像,以及学习38 沈阳理工大学学士学位论文windows的API函数,如用来播放背景音乐的sndPlaySound()函数等。在选择棋子图片时,考虑到现在有很多高中生,大学生在玩一款现在十分流行的游戏,采用了该游戏里面比较经典的人物形象。这不但使得游戏更加美观,同时也增加了趣味性。总之这次的毕业设计让我学到了很多以前课本上很少讲到的知识,增加了我的编程经验,这必定有助于编程意识和能力的培养。38 沈阳理工大学学士学位论文致谢经过这段时间的学习与实践,使我对游程的发展及现状有了更深刻的认识,并对VisualC++6.0软件有了一定程度的了解,学习了VisualC++6.0的相关知识及如何利用VisualC++6.0编译程序,特别是以前从未接触过的MFC应用程序,从了解到学习,再到最后的使用,我的收获是不可用语言表达的。经过这段短暂时间的学习,我想我对于知识的猎取是有限的,关键是我学会了如何用认真、严谨的学习态度去面对工作,如何用自学的方法来处理问题。通过编写这个程序,我体会最为深刻的一点是系统架构和设计模式的重要性。即使是对于一个并不大的程序,代码的组织都是非常重要的,因为这关系到日后的维护以及扩展。这个游戏之中,有关绘图算法编程的知识都可以直接从无所不包的Internet上获取,甚至可以直接获得一个完整的连连看游戏算法的源代码级模块。但是对于系统的架构,却完全是自己的事情,几千上万行的代码需要通过合适的方法组织起来,使程序员编写代码更加有条理,更加符合软件工程的标准,这才是最重要的。通过本次毕业设计,提高了我对问题的分析、解决能力,还包括对资料搜集的能力以及对英文的翻译能力,资料搜集有效,会对程序的进展起到至关重要的作用。同时,独立工作能力、合作能力也得到了很好的锻炼,特别是团队精神的培养。在此,特别感谢这次给我毕设做出指导的林丽清老师,感谢老师在期末繁忙的工作中,依旧给予我们毕业生细心的指导和矫正。另外,我还要感谢大学四年来,教过我所有老师。是你们以严谨的教学态度和深厚的专业知识,让我从大一的迷茫无知,到现在的心怀坦荡,宠辱不惊。你们教授了我大量现代化的知识,真的很感谢你们。还有同我一起生活一起学习的室友们,在即将各奔东西的时刻,也许我们以后真的有很少的机会能够相聚,我要感谢你们陪伴我度过有意义的大学四年,千言万语,唯有感谢!珍重!38 沈阳理工大学学士学位论文参考文献[1]罗伟坚.VisualC++经典游戏程序设计.北京:人民邮电出版社,2006.2[2]侯俊杰.深入浅出MFC.台湾:松岗计算机图数据股份有限公司,1998.9[3]苏羽,王媛媛.VisualC++网络游戏建模与实现.北京:北京科海电子出版社,2003[4]荣钦科技.VisualC++游戏设计.第一版.北京:科海电子出版社,2003[5]史银雪,陈洪,王荣静.3D数学基础:图形与游戏开发.北京:清华大学出版社,2005[6]荣钦科技.游戏设计概论第一版.北京:科海电子出版社,2003[7]谭明金.VisuaiC++图形编程技巧与实例.北京:人民邮电出版社,2002.9[8]杨淑莹.VC++图像处理程序设计.北京:北方交通大学出版社,2006.8[9]杨淑莹.VC++图像处理程序设计第2版.北京:清华大学出版社,2005.1[10]CharlesPetzold.Windows程序设计(第5版).北京:北京大学出版社,2004.9[11]葛咬.VisualC++MFC棋牌类游戏编程实例.北京:人民邮电出版社,2002.4[12]JohnE.Swanke.VisualC++MFC扩展编程实例.北京:机械工业出版社,2000.1[13]CharlesWright等.VisualC++程序员实用大全.北京:中国水利水电出版社,2001.10[14]钱能.C++程序设计教程(第二版).北京:清华大学出版社,2005.9[15]HerbertSchildtGregGuntle.C++Builder技术大全.北京:机械工业出版社,2002.2[16]刘静华,王永生.最新VC++绘图程序设计技巧与实例教程.北京:科学出版社,2001.3[17]罗斌等.VisualC++编程技巧精选500例.北京:中国水利水电出版社,2005.1[18]陈清华,朱红.VisualC++课程设计-案例精选与编程指导.南京:东南大学出版社,2004[19]姚领田,高守传.MFC窗口程序设计.北京:中国水利水电出版社,2007.5任哲.MFCWindows应用程序设计(第2版).北京:清华大学出版社,2007.9038 沈阳理工大学学士学位论文附录A英语原文A.1MFCMFCistheabbreviationoftheMicrosoftfoundationclasslibrary,thelatestversionis9.MFCcontainsthebasicclassesusedtodevelopC++programsandWindowsprograms,italsoprovidesalargenumberoftoolstoimprovetheefficiencyofprogramming,suchassimpledataclass,fileservices,collection,Internettools,etc.MoreimportantlytheMFCprovidesaseriesofwindowsapplicationprogramframework,definitionoftheapplicationstructure,toachievethepublicpartoftheapplication,includingthewindow,messagemappingmechanism,dialogboxes,drawingapparatus,drawingobject,standardWindowscontrolselement,encapsulatesthelargepartsofthewindowsAPIfunction,reducingthedifficultyofprogramming,improvethespeedandqualityoftheapplicationdevelopment.Fromtheperspectiveoftheclasshierarchy,theMFCclasscanalsobedividedintotwocategories:CObjectderivedclassandnonCObjectderivedclass.CObjectderivedclasshasCObjectcharacteristics,suchasserialization,runtimeclassinformationaccessmechanism,objectdiagnosticoutput,andsetusingacombinationofother,relatedtothederivedclasshasapplicationarchitecture,windowclass,exceptionclasses,classfiles,graphicalinterfaceofobjectclassanddatabasesupport,collectionclassesetc.WhilenonCObjectderivedclassesaremorecommonlyusedtools,themainInternettools,simpledatatype,auxiliarysupportclass,OLFclass,etc..C++Visualprovidessometools.Inordertogeneratedifferenttypesofprograms,andprovideavarietyofapplicationframework,themostcommonlyusedistheMFCAPPWizard(exe)applicationwizard,youcanbuildasingledocumentinterface(SDI)program,amultipledocumentinterface(MDI)programandapplicationprogrambasedonthedialogboxprocedure.VC++6.0developmentenvironmentalsoprovidesclasswizard(ClassWizard)tools,youcanrealizethemaintenanceoftheapplicationstructure,managementmessagemapping,adddeletedialogclassmembervariablesandotherfunctions,andinnewvisualC.NETdevelopmenttools,theclasswizarddialogboxhasbeencanceled,mostofthefeaturesareaddedtothepropertywindow.38 沈阳理工大学学士学位论文AcommonlyusedclassofMFCisCWnd(window)CString(string),CFileclasses(files),CArchive(archive),CPointaCSizecrect(point,size,rectangulartype)andcollectionclasses.A.2MFCApplicationFrameworkCurrentlyinthefieldofcomputersoftware,therehavebeenalotofprogramframeworkisdeveloped,andsomeareusedforthepreparationofstand-aloneprograms,somesuitablefornetworkapplications,andsomeforgameprogramming,etc..MFCapplicationframeworkisbuiltonthebasisoftheC++classlibrary,whichdefinesthestructureoftheprogram.ProvidedbytheMFCapplicationframeworkhasmanykinds,suchassingledocumentprocedures,multidocumentprogram,basedondialogprocedures,MFCdynamiclinklibrary,ActiveXcontrolprocedurescanprovidedbyVC++programguidetool,withoutenteringanycode,youcangenerateabasicstructureoftherequiredprogramtype,andthisstructureisoftenencapsulatedinalargenumberofcodetoachievealotofdetailswithouttheneedtounderstandtheprogrammer.Ifthereisnosuchproceduralframework,canonlyuseWindowsAPIWin32programming,programmershaverichexperienceandtheknowledgeofprogramdebuggingcapabilities,whichforC++beginnersisnotrealistic.MFCapplicationframeworkmakesfulluseoftheC++virtualfunctionsandpolymorphismofthefunctionalproperties,firstdefinedsomepowerfulbaseclass,programframeandconstructedbytheseclassesofobjectpointers,aremanyusefulvirtualfunctiondeclaredintheclass,useobjectpointertocallthevirtualfunctionkeypositionsintheframework.Programmersaskdoistoinherittheselibraries,addnewcodetoaderivedclass,accordingtotheneedtooverridethebaseclassvirtualfunction.Thentheapplicationframeworkbaseclasspointertoreplacethederivedclasspointercanbe.ProgrammersfirstneedtounderstandthesimpleMFCapplicationframework,andaccordingtothespecifictasktowritethecorrespondingprogram,theprogrammercanprovidewithMFCinthelargenumberofclassestodefinetheobjects,canalsocustomclass,butalsotothelibraryinsomekindofgivebirthtoanewclassoffuturism,overloadedor38 沈阳理工大学学士学位论文extendthebaseclassfunction.Whentheuser"sapplicationdesignofsomeoftheMFCclasslibraryfunctions,youcanusethethirdpartylibrarytoachieve.附录B汉语翻译B.1MFCMFC是微软基础类库的缩写(MicrosoftFoundationClasseslibrary),目前的最新版本是9.0。MFC包含了用来开发C++程序和Windows程序的基础类,MFC提供了大量的工具类,提高了程序员的编程效率,如简单数据类、文件服务类、集合类、Internet工具类等。更重要的是MFC提供了一系列Windows应用程序框架,定义了应用程序结构,实现了应用程序的公共部分,包括窗口、消息映射机制、对话框、绘图设备、绘图对象、标准Windows控件等元素,封装了大部分的WindowsAPI函数,降低了编程难度,提高了应用程序的开发速度和质量。从类的层次角度看,MFC的类还可以分成两大类:CObject的派生类和非CObject的派生类。CObject派生类都具有CObject类的特性,如可以序列化、运行时类信息访问机制、对象诊断输出、与集合类结合使用等,相关的派生类有应用程序体系结构类、窗口类、异常类、文件类、图形界面对象类、数据库支持类、集合类等;而非CObject派生类都是比较常用的工具类,主要有Internet工具类、简单数据类、辅助支持类、OLF类等。VisualC++提供了一些工具。为了生成不同的程序类型,而提供了多种应用程序框架,最常用的是MFCAPPWizard(exe)应用程序向导,可以建立单文档界面(SDI)程序、多文档界面(MDI)程序和基于对话框程序的应用程序。VC++6.0开发环境中还提供类向导(ClassWizard)工具,可以实现维护应用程序的结构、管理消息映射、添加删除对话框类的成员变量等功能,而在新版的VisualC++.NET开发工具中,类向导对话框已经取消了,其大部分功能都加入到属性窗口中了。MFC的常用类有CWnd(窗口类)、CString(字符串类)、CFile(文件类)、CArchive(存档类)、CPointCSizeCRect(点、大小、矩形类)以及集合类。38 沈阳理工大学学士学位论文B.2MFC应用程序框架目前在计算机软件领域,已经有很多的程序框架被开发出来,有的用于编写单机程序,有的适合网络应用,有的针对游戏编程等。MFC的应用程序框架就是在C++类库的基础上建立起来的,它定义了程序的结构。MFC提供的应用程序框架有很多种,如单文档程序、多文档程序、基于对话框的程序、MFC动态链接库程序、ActiveX控件程序等,可以利用VC++提供的程序向导工具,不用输入任何代码,就可以生成一个所需程序类型的基本结构,而这种结构往往封装了大量的实现代码,隐藏了很多无需程序员了解的细节。如果没有这样的程序框架,就只能利用WindowsAPI进行Win32编程,则要求程序员有丰富的知识经验和程序调试能力,这对于C++语言的初学者来说是不现实的。MFC程序框架充分利用了C++语言中虚函数与多态的功能特性,先定义好了一些功能强大的基类,然后用这些类的对象指针构建程序框架,在这些类中声明了许多有用的虚函数,在框架中的关键位置利用对象指针调用这些虚函数。编程者索要做的就是继承这些类库,为派生类添加新的代码,根据需要重写基类提供的虚函数,接着把应用程序框架中的基类指针替换成派生类指针即可。程序员首先需要简单了解MFC程序框架的构成,然后就可以针对具体任务编写相应的程序了,程序员可以用MFC中提供的大量的类来定义对象,也可以自定义类,还能以类库中的某些类为基础类来派生新类,重载或扩充基类的功能。当用户的应用程序设计了某些MFC类库中没有的功能,也可以使用第三方的类库来实现。38'