《毕业设计-c--连连看1.doc》由会员分享,可在线阅读,更多相关《毕业设计-c--连连看1.doc(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、课 程 设 计 报 告 课程名称:面向对象程序设计C+ 设计题目:连连看 专 业:计算机科学与技术 姓 名: 学 号: 指导教师:李 晓 虹2015 年 12 月 10 日摘要在计算机逐步渗入社会生活各个层面的今天,计算机已经成为人们日常生活不可或缺的一部分,越来越多的人使用计算机办公、娱乐、购物等等。游戏行业发展一日千里,该行业极大的影响和改变了人们的生活和娱乐方式,游戏为消费者提供丰富多彩的虚拟空间,使消费者可以自由自在的享受虚拟世界的乐趣,实现自己在现实生活着那个可能永远不能实现的梦想,满足了消费者的心理和精神需求。连连看游戏是一款很流行的小游戏,有的是连水果图片,有的是连麻将牌,有的是
2、连各种小图片的等等。各种图片让人看得眼花缭乱,这也可以锻炼人的反应能力和眼力,所以这款小游戏受到了越来越多人的喜爱,尤其是小孩子的喜爱。连连看游戏也是比较经典的一款小游戏,实现它的方法很多,可以用很多不同算法设计和语言实现,如C,C#,C+,VB,JAVA等。在本课程设计中我是利用C+语言编写,开发平台是MicrosoftVisualStudio2010,功能较为简单,寓学于乐。程序的功能是通过找出游戏中两个相同图案的小方块,然后分别点击两个小方块将其消除;可通过倒计时的方式控制游戏时间,游戏时间到或者没有匹配的图案时则游戏结束,需要重新开局,每一局开始倒计时都重新开始;能够响应鼠标事件。论文
3、首先介绍了进行该游戏课程设计的目的,然后是任务描述和设计的相关要求,最后是最重要的需求分析和设计方案。重点介绍了在游戏过程中各种事件的处理,其中又以鼠标事件的处理最为最要,鼠标事件是利用鼠标所发出的信息了解用户的意图,进而做出相对应的动作,消除需要消除的小方块。关键词:连连看游戏;算法设计;事件;C+,MicrosoftVisualStudio2010 第一章 系统需求分析1.1 功能分析每次用户选择两个相同的小方块,如果小方块满足一定条件(这两个小方块之间存在转弯少于3的路径),则两个小方块可以消掉,给定任意具有相同图案的两个小方块,用户需要寻找这两个小方块之间在转弯最少的情况下,如果这个最
4、优路径的转弯数目小于3,则这两个小方块可以消掉。所以,主要需要解决的问题就是怎么样得出相同小方块之间的最优路径,这个最优路径首先需要保证转弯数目最少。游戏开始时,系统会在游戏区域中随机布下12*7个不同图案的小方块。第一次使用鼠标点击游戏界面中的小方块,该小方块此时为被选中状态,再次用鼠标点击其他小方块,若该小方块与被选中的小方块图案相同,且把第一个小方块到第二个小方块连起来,连线的路径中间的直线不超过3根(最多两次转弯),则消掉这一对小方块,否则第一个小方块恢复成未被选中状态,而第二个小方块变成“被选中”状态。每次消除一对小方块会增加一定的时间。胜利条件:将游戏区域上的小方块全部消除掉且时间
5、未消耗完。失败条件:时间消耗完,或者剩下的小方块没有路径能够匹配(即界面上的小方块仍未全部消掉)。1.2 功能需求(1)游戏界面大致分为两大区,左边为游戏操作区,右边是设置区;(2)本游戏功能较为简单,只具有连连看游戏的基本功能(计时器、积分器、暂停/重新开始、重列),默认的图案种类数是12种,重复数每种图案为7对;(3)游戏操作区是系统自动排列的默认的12*7个小方块,用户可以点击小方块来消除具有相同图案的小方块;(4)设置区中显示当前游戏的种类数、重复数、“开始游戏”按钮、“重列”按钮、“暂停/重新开始”按钮和得分情况;(5)在游戏操作区的下方显示有“剩余时间”的进度条,当进度条的时间耗完
6、时,则游戏结束。1.3 功能模块本游戏主要细分为以下几大模块:(1)游戏主界面以MicrosoftVisualStudio2010为开发平台设计主界面,主要控件有1个主窗体Form、1个groupbox、1个progressbar、4个button、7个label。(2)随机排列小方块。(3)鼠标事件。(4)小方块消除判断。(5)游戏难度设置本游戏没有用户自定义游戏难度选择,而是使用默认的图案种类数是12种,每种图案的重复数是7对,所以游戏的灵活性较差。(6)游戏重列对本局游戏中剩下的小方块重新排列,计时器不会暂停。此模块的主要作用就是在用户自身不能找到能够消掉的小方块的情况下,通过重列剩下的
7、小方块来产生新的路径,使游戏能够继续玩下去。(7)暂停/重新开始,点击“暂停”按钮能够使当前正在运行的游戏暂时停止,主要是使让时间停止,不再倒计时;游戏暂停时鼠标不能对游戏操作区域进行操作,此时“暂停”按钮变成“重新开始”按钮,用户只要点击“重新开始”按钮即可继续游戏操作。(8)游戏胜利(游戏结束,需要重新开始游戏)。(9)游戏失败(游戏结束,需要重新开始游戏)。1.4 系统需求分析总结本系统的结构基本合理,系统功能也基本能够达到连连看游戏的要求,采用了最基本的最短路径优先的算法,使系统地运行效率达到最高。本系统的输入边界是用户进行的鼠标事件操作和对游戏的复杂程度进行设置;输出边界是游戏结束,
8、游戏胜利或者游戏失败。通过对连连看游戏规则以及相关算法的分析,本系统总的数据量较小,规模不是很大,适合于在普通微机或小型机上运行。第二章 总体设计2.1 系统基本功能本系统与我们常玩的连连看游戏相比较为简单,只具有连连看游戏的基本功能,逻辑设计方面也只有简单的“开始游戏”、“重列”、图案“种类数”和“重复数”的设定、剩余时间和暂停/重新开始。开始游戏:初始化游戏区域,随机排列小方块。重列:对正在进行的游戏中剩余的小方块重新排列。种类数:本游戏固定图案种类是12种。重复数:每种图案的重复次数是7次,也就是7对。剩余时间:计时器,通过显示时间进度的方式对游戏进行倒计时。暂停/重新开始:暂停正在运行
9、的游戏,游戏暂停后也可以重新开始(继续本局游戏)。系统基本功能如图2-1所示图 2-1 系统基本功能图图2-1是连连看游戏的系统基本功能图,从图中可以看出系统主要分为六大功能,即开始游戏、重列、种类数、重复数、剩余时间和暂停/重新开始的设置。2.2 系统流程系统流程是对系统进行大概分析后得出的系统各功能的流动情况以及各个操作之间的关系,上一步操作都与下一步操作有着紧密的联系,即下一步操作都是由上一步操作所决定的。系统流程主要是对系统流程图的分析,系统流程图清晰的地反映出了系统的运行情况和走向。(1)鼠标事件具体流程图如图2-2所示束。图 2-2 鼠标事件具体流程图图2-2是鼠标事件的具体流程图
10、,在连连看游戏中,鼠标事件是很重要的一部分,因为基本都是考鼠标去操作的,所以鼠标事件的控制就非常重要了;上图就是鼠标在游戏过程中的具体判断过程,主要是两个相同小方块之间路径的判断,分为一条直线(没有转弯)、两条直线(一个转弯)、三条直线(两个转弯)。(2)系统详细运行流程如图2-3所示图 2-3 运行流程图图2-3是游戏详细的运行流程图,图中清晰地描述了系统的执行过程,即根据不同的事件,游戏状态的转换。过程为:游戏开始,等待事件,发出鼠标事件,根据用户发出的鼠标命令,然后进行各种判断,系统分别作出不同的反应。2.3 主要功能模块本游戏主要细分为以下几大模块:Private void Form1
11、_MouseDown(object sender, MouseEventArgse)/最重要的鼠标事件Private void ProcessCorner(Point p1, Point p2)/此方法做处理画线和消除Private void button1_Click_1(object sender, EventArgs e)/开始游戏按钮Private void button2_Click(object sender, EventArgs e) /重列按钮Private void button3_Click(object sender, EventArgs e) /暂停/重新开始按钮Pri
12、vate void pbtimer_Tick(object sender, EventArgs e) /计时器操作,判断游戏是否失败Public boolIsDirectLink(int x1, inty1, int x2, int y2) /判断两个小方块是否为直连关系,即判断两个小方块之间是否能用一条之间连接(没有转弯)Public bool IndirectLink(int x1, int y1, int x2, int y2)/处理直连以外的情况,即一个转弯和两个转弯的情况游戏)。第三章 详细设计3.1 详细设计总体设计是对整个系统的结构化和模块化设计,包括各功能模块的设计和各个功能函
13、数的说明。详细设计则是对各个类和功能函数进行具体的定义和实施。下面是对系统中几个较为重要的函数进行描述。在总体设计中提到过要想消掉两个小方块,可以分为三种情况,下面就是三种情况的详细解释。3.2 规则设计1、两个相同的小方块相邻,则可以直接消掉。2、若不相邻的先在第一个小方块的同一行中找一个空方块;1)找到后看第二个小方块横向到这个空方块所在的列是否有小方块;2)没有的话再看第一个小方块到与它同行的那个空方块之间是否有小方块;3)如果还是没有的话,再从与第一个小方块同行的那个空方块竖向到与第二个小方块的同行看是否有其他的小方块。没有的话路经就是通了,则可以将两个小方块消掉。3、若上述2失败后,
14、再在第一个小方块的同列找一个空方块;1)找到后看第二个小方块竖向到这个空方块所在的行是否有小方块;2)没有的话,再看第一个小方块到与它同列的那个空方块之间是否有小方块;3)如果还是没有的话,再从与第一个小方块同列的那个空方块横向到与第二个小方块同列看是否有其他的小方块。没有的话路经就是通了,则可以将两个小方块消掉。如果以上三步都失败,说明这两个按钮不可以消掉。两个小方块能够相连并消掉的所有情况如图3-1所示图 3-1 运行流程图(1)两个小方块相邻,可以直接消掉;(2)两个小方块在同一行上面且不相邻,但中间没有其他方块阻挡;(3)两个小方块在同一行上,但中间有其他图案的小方块阻隔;(4)两个小
15、方块在同一列,但中间有其他图案的小方块阻隔;(5)两个小方块既不在同一行也不在同一列,用三条直线连接(因为第一个小方块的右边可能有其他小方块阻隔);(6)两个小方块既不在同一行也不在同一列,用两条直线连接(第一个小方块的某一方正好可以连接到第二个小方块);(7)两个小方块既不在同一行也不在同一列,用三条直线连接(系统自动检测,连线从第一个小方块的空闲的一面引出。3.3 部分代码本游戏部分代码如下:(1).全局定义:HBITMAP hbmp;HBITMAP fullmap;HBITMAP animal;HDC mdc;int map84;int x,y;int row=7,col=12;int
16、begin=0;(2).void change(int num )函数,用于重新随机排列数组num 中的数值void change(int num)int i,temp,p;for(i=0;i21;i+) p=rand()%21; temp=numi; numi=nump; nump=temp;(3). void StartGame(HDC hdc)函数,用于绘制界面void StartGame(HDC hdc) int i,j,k=0,num21,n=0; HDC buff; buff=CreateCompatibleDC(hdc); fullmap=CreateCompatibleBitm
17、ap(hdc,480,350); SelectObject(mdc,fullmap); hbmp=(HBITMAP)LoadImage(NULL,3DFrames.bmp,IMAGE_BITMAP,46,392,LR_LOADFROMFILE); SelectObject(buff,hbmp); for( i=0;i12;i+) for(j=0;j7;j+) BitBlt(mdc,i*40,j*50,46,56,buff,0,56,SRCCOPY); BitBlt(hdc,0,0,480,350,mdc,0,0,SRCCOPY); animal=(HBITMAP)LoadImage(NULL,
18、animal.bmp,IMAGE_BITMAP,78,1638,LR_LOADFROMFILE); SelectObject(mdc,animal); if(begin=0) for(i=0;i21;i+) numi=rand()%42; for(i=0;i84;i+) mapi=-1; for(i=0;i7;i+) for(j=0;j12;j+) if(k=21) change(num); k=0; mapn=numk; n+; k+; k=0; for(i=0;i7;i+) for(j=0;j12;j+) BitBlt(hdc,j*40,i*50+5,39,39,mdc,39,mapk*3
19、9,SRCAND);BitBlt(hdc,j*40,i*50+5,39,39,mdc,0,mapk*39,SRCPAINT);k+; 图 3-2 代码图第四章 系统调试4.1 系统调试系统调试是对整个系统的相应程序问题进行调试,包括功能模块的调试和各个整体系统的调试。下面是相应系统调试图:图 4-1 系统调试图1图 4-2 系统调试图2图 4-3 系统调试图3图 4-4 系统调试图4图 4-5 系统调试图5第5章 结果分析5.1 结果分析系统界面分析这一部分主要是系统的运行与维护等,在这里展出了系统的部分运行效果图,并对这些界面进行了分析。(1) 游戏主界面如图5-1所示图 5-1图5-1是游
20、戏主界面,图案种类数是12,每种图案的最大重复数是7,进入此界面,用户可以开始玩此游戏。 (2) 游戏过程界面如图5-2所示图 5-2图5-2是游戏过程界面,玩家点击相同相连的两图标就可以消除图案。(3) 通关过程界面如图5-3所示图 5-3图5-3是游戏通关界面,当玩家通过规则消除了所有图案,系统自动弹出恭喜过关字样,玩家点击确定开始下一局。第6章 总结首先感谢老师给我们一次实训的机会。通过这次课程设计,让我充分体会到了理论与实践相结合的重要性。通过我们所学过的知识,通过网上查找资料详细了解这个连连看游戏,在这个过程中我们学到了很多书本上学不到的东西,我在写程序的时候也遇到了很多问题,不过在
21、自己的努力下完成了任务。在这次课程设计中,我不断的上网查资料以及翻阅相关书籍,通过不断的摸索、测试、发现问题、解决问题,在老师的帮助下这些问题都一一得到了解决,使得程序能够正常运行。在此游戏的设计过程中,遇到了很多问题,有些问题比较简单但就是不知道错在哪里,有些大问题知道错在哪里但就是不知道怎么办,后来经过自己的不断修改和调试,这些问题都得到了解决。经过这次课程设计,我认识到应该注意的细节问题,虽然是很小的问题,但可以提高自己编程的能力,而且还可以培养自己编程的严谨性,同时还可以为以后的编程积累经验。编写完这个连连看游戏,我发现自己有很多不足的地方,感触最深的就是我真的要扎扎实实的打基础。并且我感觉到只要肯下功夫学习,我也可以做出很好的东西,深深明白,只有自己的东西才是最珍贵的。总之,通过这次课程设计,我学到了很多,也收获了很多,这包括学习上的和生活中的。尽管可能这个系统中还存在一些问题,但我觉得还是很高兴,因为是自己的最重要。
限制150内