当前位置首页 > 建筑/施工 > 施工组织
搜柄,搜必应! 快速导航 | 使用教程  [会员中心]

连连看课程设计报告

文档格式:DOC| 21 页|大小 244KB|积分 10|2022-05-04 发布|文档ID:84862431
第1页
下载文档到电脑,查找使用更方便 还剩页未读,继续阅读>>
1 / 21
此文档下载收益归作者所有 下载文档
  • 版权提示
  • 文本预览
  • 常见问题
  • -**涉外经济学院课程设计报告课程名称:程序设计实训〔2〕报告题目:连连看游戏的开发学生**:唐 杰所在学院:信息科学与工程学院专业班级:计科1002班学生**:指导教师:邹竞2021年6月25日课程设计任务书报告题目连连看游戏的开发完成时间2021-6学生**唐 杰专业班级计科1002班指导教师邹竞职称讲师总体设计要求和技术要点设计一个连连看游戏程序,游戏程序的功能需求如下:游戏区是一个包含了多种不同花色游戏牌的二维棋盘,棋盘的行数和列数可以自行定义每一种花色的游戏牌的数量都是偶数两*花色一样的游戏牌的之间的路径如果满足以下条件,这两*游戏牌即可消去:路径连线由不多于3条的水平和垂直的线段构成,任何一条线段都不能穿越其他的游戏牌,但可以不在棋盘中,路径两端的游戏牌必须具有一样的花色。

    游戏只要用鼠标即可进展操作最初棋盘里布满了游戏牌,游戏开场时进展计时第一次使用鼠标点击棋盘中的游戏牌,该游戏牌此时为"被选中〞,以特殊方式显示;再次以鼠标点击其他游戏牌,假设该游戏牌与被选中的游戏牌两者花色一样,且把第一*游戏牌到第二*游戏牌连起来,中间的线段不超过3条,则消掉这一对游戏牌,否则第一*游戏牌恢复成未被选中状态,而第二*游戏牌变成被选中状态每消去一对游戏牌,应检查棋盘内是否至少还存在一对能消去的游戏牌,如果不存在,则在原有位置对游戏牌进展重排,直到至少存在一对能够消去的游戏牌如果在指定的时间内消去了所有的游戏牌,游戏胜利;如果时间耗尽还未能消除全部的游戏牌,游戏失败要求每人独立完成,使用主流开发工具,尽可能采用面向对象方法,在设计判断两*一样花色游戏牌能否消去的算法时,尽可能使用状态空间搜索算法〔如回溯法、分支限界法等〕,要求代码的具有一定的可读性、可维护性和可扩大性可以参考教师给定的程序或者其他程序,但程序和报告严禁全盘抄袭工作内容及时间进度安排第11周~第12周:对需要开发的软件进展需求分析和软件设计第13周:论证方案设计第14周~第16周:程序设计第17周:测试、修改程序,撰写报告第18周:验收辩论课程设计成果1.与设计内容对应的软件程序2.课程设计总结报告. 优选-. -摘 要在计算机逐步渗入社会生活各个层面的今天,计算机已经成为人们日常生活不可或缺的一局部,越来越多的人使用计算机办公、娱乐、购物等等。

    游戏行业开展一日千里,该行业极大的影响和改变了人们的生活和娱乐方式,游戏为消费者提供丰富多彩的虚拟空间,使消费者可以自由自在的享受虚拟世界的乐趣,实现自己在现实生活着那个可能永远不能实现的梦想,满足了消费者的心理和精神需求连连看游戏是一款很流行的小游戏,有的是连水果图片,有的是连麻将牌,有的是连各种小图片的等等各种图片让人看得眼花缭乱,这也可以锻炼人的反响能力和眼力,所以这款小游戏受到了越来越多人的喜爱,尤其是小孩子的喜爱连连看游戏也是比较经典的一款小游戏,实现它的方法很多,可以用很多不同算法设计和语言实现,如C,C*,C++,VB,JAVA等在本课程设计中我是利用C*语言编写,开发平台是Microsoft Visual Studio 2021,功能较为简单,寓学于乐程序的功能是通过找出游戏中两个一样图案的小方块,然后分别点击两个小方块将其消除;可通过倒计时的方式控制游戏时间,游戏时间到或者没有匹配的图案时则游戏完毕,需要重新开局,每一局开场倒计时都重新开场;能够响应鼠标事件论文首先介绍了进展该游戏课程设计的目的,然后是任务描述和设计的相关要求,最后是最重要的需求分析和设计方案重点介绍了在游戏过程中各种事件的处理,其中又以鼠标事件的处理最为最要,鼠标事件是利用鼠标所发出的信息了解用户的意图,进而做出相对应的动作,消除需要消除的小方块。

    关键词:连连看游戏;算法设计;事件;C*;Microsoft Visual Studio 2021. 优选-. -. 优选-. -. 优选-. -目 录摘 要I一、课程设计目的1二、任务描述和要求22.1 问题描述22.2 任务描述22.3 设计要求3三、需求分析43.1功能分析43.2功能需求43.3 功能模块53.4系统需求分析总结6四、设计方案74.1 总体设计778104.2 详细设计10101116五、总结20六、参考文献21. 优选-. -. 优选-. -一、课程设计目的"程序设计实训"课程是是计算机科学与技术专业重要的实践性课程之一,其实践性和应用性都很强。

    本课程设计是对这门课程经过一个学期的学习后进展的一次全面而综合的练习C*程序设计的设计目的就是加深理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在软件开发的广泛应用,同时也是为后续各门计算机课程的学习和毕业设计打下根底本次课程设计的目的主要有:〔1〕稳固和加深学生对C*的根本知识和语法的理解与掌握;〔2〕掌握C*语言编程和调试的根本技能;〔3〕运用C*语言对程序进展简单的框架设计;〔4〕让学生掌握较为简单的算法分析能力;〔5〕提高与运用C*语言能解决实际问题的能力〔6〕更深入地理解和掌握该课程中的有关根本概念,程序设计思想和方法〔7〕对掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力进展考核〔8〕培养学生综合运用所学知识独立完成课题的能力〔9〕掌握程序设计说明文档的能力与技巧;二、任务描述和要求本章主要内容包括本课程设计的任务描述和设计要求两大模块任务描述主要是介绍在课程设计的整个过程的任务流程和时间规划等;设计要求是提出课程设计过程中要注意的一些细节问题2.1 问题描述连连看游戏,用户需要找出游戏中一样的两个方块,用鼠标分别点击两个一样的小方块,如果它们之间的连接线不超过三条直线,就可以将着两个小方块消掉,当游戏中没有满足条件的图案时,还可以实现重新排列的功能,即点击"重列〞按钮就可以重新排列本局游戏中剩余的图案,但计时器还是会继续计时,在游戏完毕时能够看到最后的得分。

    2.2 任务描述随着人们工作压力变得越来越大,现如今更多的人开场通过玩游戏来排解内心的压力,而各种各样的游戏也排入市场,一些大型网络游戏更是一些年轻用户的最爱,所有连连看游戏面对市场的竞争压力还是非常大的分析连连看游戏的游戏规则,查找规则并对主要功能进展模仿程序实现,对于实现过程中出现的bug进展调试解决经过对连连看游戏的初步分析,游戏含有如下规则:根据用户执行的鼠标事件,做出相应的消除操作在检验两个小方块能否消掉的时候,要让两个小方块同时满足两个条件才行,就是两者配对并且连线成功如果要配对并且连线成功又要分为三种情况,也就是检测三种情况这三种检测分别检测一条直路径,这样就会有三条路径;如果这三条路径上面都是空的小方块,则就刚好是三条直线把两个小方块连接起来了要让两个小方块连接起来,一条路径最多不能超过三条直线,也就是最多只能有两个转弯 具体任务如下:〔1〕本课题为连连看游戏的开发;〔2〕需要为Windows操作系统的用户设计完成一款连连看游戏,这是一个根据*种算法随机排列具有不同图案的小方块,并形成一个友好的用户界面,供用户娱乐之用的小软件;〔3〕本游戏在难度设置上跟传统的小游戏有点区别,不是分为初、中、高三个难度等级,而是一个已经固定的难度,即每局游戏的图案种类数为20种,每种图案的重复数为4对;〔4〕程序模块清晰,具有较好的人机交互能力,核心代码需要加上必要的注释,以便用户能够很快读懂本游戏的集体实现过程;〔5〕设计过程中,前两周,对整个游戏所实现的功能进展详细的设计以及对存在的问题及解决方法进展最终确定;一周完成游戏的程序编写,并优化;最后一周,写出设计本游戏的详细文档说明,并作课程设计汇报;〔6〕连连看游戏课程设计实现流程图如图2.1所示:制定规则设计算法算法实现调试 测试数据分析完成设计报告图2.1 课程实现流程图图2.1描述了整个课程设计的实现流程。

    前期工作是制定规则和设计算法,这一阶段主要任务是搜集相关资料,然后根据搜集到的资料结合自己所学知识制定系统实现算法;中期工作是算法实现和调试系统,这一阶段主要任务是完成算法的实现,然后进展调试和优化系统;后期工作是对数据结果进展分析,然后完成课程设计报告2.3 设计要求按照指导教师对课程设计的要求,学生要自行完成各个环节,并且实现且到达灵活运用的目的,要求能够全面深入理解和熟练掌握所学的内容,能够分析、设计和解答各类专业问题〔1〕系统需求分析,对系统中需要实现的功能进展具体分析和设计;〔2〕采用构造化、模块化程序设计思想设计;〔3〕理解连连看游戏玩法的特点,并分析玩法的实现功能;〔4〕设计是否消除一样小方块的判断算法;〔5〕游戏"暂停/重新开场〞的实现方法;〔6〕进展概念设计和逻辑构造设计,以便使系统实现进展顺利;〔7〕进展详细的设计方案,包括总体设计和详细设计,这包括程序设计代码的分析和系统运行界面截图的分析;〔8〕要求人机交互性较强,界面较美观;设计方案和执行结果的分析总结三、需求分析需求分析的主要任务即详细的找出程序所需要的各种功能实现,是对系统功能进一步分析和抽象,以确定系统应当做什么的问题,从而完成系统的逻辑设计。

    本课程设计是连连看游戏的实现,首先是要实现连连看游戏的根本功能,根据连连看游戏的玩法,设计程序,实现程序功能本系统需求分析分为四个局部:功能分析、功能需求、功能模块和系统需求分析报告3.1功能分析每次用户选择两个一样的小方块,如果小方块满足一定条件〔这两个小方块之间存在转弯少于3的路径〕,则两个小方块可以消掉,给定任意具有一样图案的两个小方块,用户需要寻找这两个小方块之间在转弯最少的情况下,如果这个最优路径的转弯数目小于3,则这两个小方块可以消掉所以,主要需要解决的问题就是怎么样得出一样小方块之间的最优路径,这个最优路径首先需要保证转弯数目最少游戏开场时,系统会在游戏区域中随机布下20*4个不同图案的小方块第一次使用鼠标点击游戏界面中的小方块,该小方块此时为"被选中"状态,再次用鼠标点击其他小方块,假设该小方块与被选中的小方块图案一样,且把第一个小方块到第二个小方块连起来,连线的路径中间的直线不超过 3 根〔最多两次转弯〕,则消掉这一对小方块,否则第一个小方块恢复成未被选中状态,而第二个小方块变成"被选中〞状态每次消除一对小方块会增加一定的时间胜利条件:将游戏区域上的小方块全部消除掉且时间未消耗完。

    失败条件:时间消耗完,或者剩下的小方块没有路径能够匹配〔即界面上的小方块仍未全部消掉〕3.2功能需求〔1〕游戏界面大致分为两大区,左边为游戏操作区,右边是设置区;〔2〕本游戏功能较为简单,只具有连连看游戏的根本功能〔计时器、积分器、暂停/重新开场、重列〕,默认的图案种类数是20种,重复数每种图案为4对;〔3〕游戏操作区是系统自动排列的默认的20*4个小方块,用户可以点击小方块来消除具有一样图案的小方块;〔4〕设置区中显示当前游戏的种类数、重复数、"开场游戏〞按钮、"重列〞按钮、"暂停/重新开场〞按钮和得分情况;〔5〕在游戏操作区的下方显示有"剩余时间〞的进度条,当进度条的时间耗完时,则游戏完毕;〔6〕游戏中用到的局部图案如下所示:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3.3 功能模块本游戏主要细分为以下几大模块:〔1〕游戏主界面 以Microsoft Visual Studio 2021为开发平台设计主界面,主要控件有1个主窗体Form、1个groupbo*、1个progressbar、4个button、7个label。

    〔2〕随机排列小方块〔3〕鼠标事件〔4〕小方块消除判断〔5〕游戏难度设置本游戏没有用户自定义游戏难度选择,而是使用默认的图案种类数是20种,每种图案的重复数是4对,所以游戏的灵活性较差〔6〕游戏重列 对本局游戏中剩下的小方块重新排列,计时器不会暂停此模块的主要作用就是在用户自身不能找到能够消掉的小方块的情况下,通过重列剩下的小方块来产生新的路径,使游戏能够继续玩下去〔7〕暂停/重新开场点击"暂停〞按钮能够使当前正在运行的游戏暂时停顿,主要是使让时间停顿,不再倒计时;游戏暂停时鼠标不能对游戏操作区域进展操作,此时"暂停〞按钮变成"重新开场〞按钮,用户只要点击"重新开场〞按钮即可继续游戏操作〔8〕游戏胜利〔游戏完毕,需要重新开场游戏〕〔9〕游戏失败〔游戏完毕,需要重新开场游戏〕3.4系统需求分析总结本系统的构造根本合理,系统功能也根本能够到达连连看游戏的要求,采用了最根本的最短路径优先的算法,使系统地运行效率到达最高本系统的输入边界是用户进展的鼠标事件操作和对游戏的复杂程度进展设置;输出边界是游戏完毕,游戏胜利或者游戏失败通过对连连看游戏规则以及相关算法的分析,本系统总的数据量较小,规模不是很大,适合于在普通微机或小型机上运行。

    四、设计方案设计方案是对一个系统进展详细而具体的设计,本系统的设计方案主要分为总体设计和详细设计两局部总体设计是对整个系统构造化的设计,包括系统的大致框架和各个函数以及类的说明;详细设计是对各个类和函数进展定义和具体实施,以及各种图例的详解4.1 总体设计本课程设计采用的是单机模式,当在规定的时间内消除完全部的小方块则游戏过关,如果在规定的时间内没能消除完所有的小方块则游戏完毕,需要重新开场新游戏游戏规则是模仿普通的连连看游戏,主要是鼠标两次点击的小方块能否消去的问题前提是点击两个具有一样的图案的小方块,假设点击的是同一个小方块或者两个不同的图案的小方块,则不进展处理;在两个一样图案的小方块用三根以内〔包括三根〕的直线能连在一起,就可以消掉;否则,不进展处理游戏过程,如果用户在规定的时间内消掉所有的小方块则提示游戏胜利,会弹出一个"游戏胜利!〞的对话框;如果在规定时间内小方块没有消完则提示时间到游戏失败,会弹出一个"游戏失败!〞的对话框考虑到本游戏是单机小游戏,所以充分考虑到它的娱乐性,并没有很复杂的功能系统的总体设计是对整个系统的构造化设计,包括系统根本功能的设计、系统流程的设计和各个功能模块的设计等。

    本系统与我们常玩的连连看游戏相比较为简单,只具有连连看游戏的根本功能,逻辑设计方面也只有简单的"开场游戏〞、"重列〞、图案"种类数〞和"重复数〞的设定、剩余时间和暂停/重新开场开场游戏:初始化游戏区域,随机排列小方块重列:对正在进展的游戏中剩余的小方块重新排列种类数:本游戏固定图案种类是20种重复数:每种图案的重复次数是4次,也就是4对剩余时间:计时器,通过显示时间进度的方式对游戏进展倒计时暂停/重新开场:暂停正在运行的游戏,游戏暂停后也可以重新开场〔继续本局游戏〕系统根本功能如图4.1所示图4.1 系统根本功能图图4-1是连连看游戏的系统根本功能图,从图中可以看出系统主要分为六大功能,即开场游戏、重列、种类数、重复数、剩余时间和暂停/重新开场的设置系统流程是对系统进展大概分析后得出的系统各功能的流动情况以及各个操作之间的关系,上一步操作都与下一步操作有着严密的联系,即下一步操作都是由上一步操作所决定的系统流程主要是对系统流程图的分析,系统流程图清晰的地反映出了系统的运行情况和走向1)鼠标事件具体流程图如图4.2所示图4.2 鼠标事件具体流程图图4.2是鼠标事件的具体流程图,在连连看游戏中,鼠标事件是很重要的一局部,因为根本都是考鼠标去操作的,所以鼠标事件的控制就非常重要了;上图就是鼠标在游戏过程中的具体判断过程,主要是两个一样小方块之间路径的判断,分为一条直线〔没有转弯〕、两条直线〔一个转弯〕、三条直线〔两个转弯〕。

    2)系统详细运行流程如图4.3所示图4.3 运行流程图图4.3是游戏详细的运行流程图,图中清晰地描述了系统的执行过程,即根据不同的事件,游戏状态的转换过程为:游戏开场,等待事件,发出鼠标事件,根据用户发出的鼠标命令,然后进展各种判断,系统分别作出不同的反响private void Form1_MouseDown(object sender, MouseEventArgs e) //最重要的鼠标事件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) //暂停/重新开场按钮private void pbtimer_Tick(object sender, EventArgs e) //计时器操作,判断游戏是否失败public bool IsDirectLink(int *1, int y1, int *2, int y2) //判断两个小方块是否为直连关系,即判断两个小方块之间是否能用一条之间连接〔没有转弯〕public bool IndirectLink(int *1, int y1, int *2, int y2) //处理直连以外的情况,即一个转弯和两个转弯的情况4.2 详细设计总体设计是对整个系统的构造化和模块化设计,包括各功能模块的设计和各个功能函数的说明。

    详细设计则是对各个类和功能函数进展具体的定义和实施下面是对系统中几个较为重要的函数进展描述在总体设计中提到过要想消掉两个小方块,可以分为三种情况,下面就是三种情况的详细解释:1、两个一样的小方块相邻,则可以直接消掉2、假设不相邻的先在第一个小方块的同一行中找一个空方块;1)找到后看第二个小方块横向到这个空方块所在的列是否有小方块;2)没有的话再看第一个小方块到与它同行的那个空方块之间是否有小方块;3)如果还是没有的话,再从与第一个小方块同行的那个空方块竖向到与第二个小方块的同行看是否有其他的小方块没有的话路经就是通了,则可以将两个小方块消掉 3、假设上述2失败后,再在第一个小方块的同列找一个空方块;1)找到后看第二个小方块竖向到这个空方块所在的行是否有小方块;2)没有的话,再看第一个小方块到与它同列的那个空方块之间是否有小方块;3)如果还是没有的话,再从与第一个小方块同列的那个空方块横向到与第二个小方块同列看是否有其他的小方块没有的话路经就是通了,则可以将两个小方块消掉如果以上三步都失败,说明这两个按钮不可以消掉两个小方块能够相连并消掉的所有情况如下所示: 〔1〕 〔2〕 〔3〕〔4〕 〔5〕 〔6〕 〔7〕 -〔1〕两个小方块相邻,可以直接消掉;〔2〕两个小方块在同一行上面且不相邻,但中间没有其他方块阻挡;〔3〕两个小方块在同一行上,但中间有其他图案的小方块阻隔;〔4〕两个小方块在同一列,但中间有其他图案的小方块阻隔;〔5〕两个小方块既不在同一行也不在同一列,用三条直线连接〔因为第一个小方块的右边可能有其他小方块阻隔〕;〔6〕两个小方块既不在同一行也不在同一列,用两条直线连接〔第一个小方块的*一方正好可以连接到第二个小方块〕;〔7〕两个小方块既不在同一行也不在同一列,用三条直线连接〔系统自动检测,连线从第一个小方块的空闲的一面引出〕4.2.2局部程序代码解析 private int pium = 20; //本局中图片的数量 private int multipic = 4;//一*图片重复出来的次数,一定为偶数 //鼠标事件处理,主要是判断转弯数目和位置,并做相应的消除操作 private void Form1_MouseDown(object sender, MouseEventArgs e) { int cur* = e.* / 31; int cury = e.Y/ 34; if (cur* > 18 || cury > 10) return; if (gamestop == true) return; if (gmap[cur*, cury] != 0) { Pen pen = new Pen(new SolidBrush(this.BackColor)); g_g.DrawRectangle(pen, new Rectangle(cur* * 31,cury * 34, 31, 34)); two++; switch (two) { case 1: fpoint = new Point(cur*, cury);break; case 2: if (AI.IsLink(fpoint.*, fpoint.Y, cur*, cury)) { two = 0; //获得拐点数目和位置,做画线处理 ProcessCorner(fpoint,new Point(cur*,cury)); if (CheckWin(ref gmap)) { starttimer = false; MessageBo*.Show("恭喜过关!"); pbtimer.Stop(); bStart = false; } } else { if (pbvalue == 0) break; two = 1; fpoint = new Point(cur*, cury); } break; default: break; } } }//此方法做处理画线和消除,直连时加10分,一个转弯加20分,两个转弯加40分 private void ProcessCorner(Point p1,Point p2) { Point[] corner = new Point[3]; corner = AI.GetPoints(); Pen pen = new Pen(new SolidBrush(Color.Red), 5);//线画笔 Pen bkpen = new Pen(new SolidBrush(this.BackColor), 5);//擦去画笔 pbvalue += 4; switch (corner[2].*) //转弯数 { case 1: score += 20;//一个转弯加20分; g_g.DrawLine(pen, new Point(p1.**31+15,p1.Y*34+17), new Point(corner[0].**31+15,corner[0].Y*34+17)); g_g.DrawLine(pen, new Point(p2.* * 31+15, p2.Y * 34+17), new Point(corner[0].* * 31+15, corner[0].Y * 34+17)); Thread.Sleep(100); EraseBlock(g_g, p1, p2); g_g.DrawLine(bkpen, new Point(p1.* * 31 + 15, p1.Y * 34 + 17), new Point(corner[0].* * 31 + 15, corner[0].Y * 34 + 17)); g_g.DrawLine(bkpen, new Point(p2.* * 31 + 15, p2.Y * 34 + 17), new Point(corner[0].* * 31 + 15, corner[0].Y * 34 + 17)); break; case 2: score += 40;//两个转弯加40分 Point[] ps ={ new Point(p1.**31+15,p1.Y*34+17),new Point( corner[1].**31+15,corner[1].Y*34+17),new Point(corner[0].**31+15,corner[0].Y*34+17),new Point(p2.**31+15,p2.Y*34+17)}; g_g.DrawLines(pen, ps); Thread.Sleep(100); EraseBlock(g_g, p1, p2); g_g.DrawLines(bkpen,ps); break; case 0: score += 10;//直连加10分 g_g.DrawLine(pen, new Point(p1.* * 31 + 15, p1.Y * 34 + 17), new Point(p2.* * 31 + 15, p2.Y * 34 + 17)); Thread.Sleep(100); EraseBlock(g_g, p1, p2); g_g.DrawLine(bkpen, new Point(p1.* * 31 + 15, p1.Y * 34 + 17), new Point(p2.* * 31 + 15, p2.Y * 34 + 17)); break; default: break; } label5.Te*t = score.ToString(); } //开场游戏按钮,初始化游戏区域、计时器开场计时、分数归零并重新开场累积分数 private void button1_Click_1(object sender, EventArgs e) { int m = 0; gamestop = false; label5.Te*t = m.ToString(); if (!starttimer) { progressBar1.Value = PBMA*; pbtimer.Interval = 500; //时间初始值为500 pbtimer.Start(); //计时器开场计时 starttimer = true; } //处理分数 score = 0; //初始游戏时分数归零 pium = 20; //每次开局固定的图案数 multipic = 4; //每种图案重复的次数 IniteBmp(pium); pbvalue = 500; //初始化时间值 bStart = true; this.Invalidate(); } //重列按钮private void button2_Click(object sender, EventArgs e) { FreshMap(ref gmap); //调用重新排列函数,仅对游戏中剩余的小方块进展重列 this.Invalidate(); } // 时间判断,即对游戏是否失败进展判断,时间耗完则游戏完毕private void pbtimer_Tick(object sender, EventArgs e) { pbvalue = pbvalue - reducestep; if (pbvalue > 100) pbvalue = 100; if (pbvalue == 0 && starttimer) { pbtimer.Stop(); //计时器停顿 starttimer = false; MessageBo*.Show("游戏失败!"); gamestop = true; return; } else progressBar1.Value = pbvalue; //给时间进度条赋值 } //暂停按钮,主要是时间暂停,并且鼠标不能在游戏区域操作private void button3_Click(object sender, EventArgs e) gamestop = true; pbtimer.Stop(); } //判断两个小方块是否为直连关系,即判断两个小方块之间是否能用一条之间连接〔没有转弯〕 public bool IsDirectLink(int *1, int y1, int *2, int y2) { if (*1 == *2 && y1 == y2) { return false; } if (*1 == *2) { int bigger = y1 > y2 " y1 : y2; int smaller = y1 > y2 " y2 : y1; int miny = smaller+ 1; while (map[*1, miny] == BLANK) { miny++; if (miny >= N) break; } if (miny == bigger) return true; else return false; } if (y1 == y2) { int bigger = *1 > *2 " *1 : *2; int smaller = *1 > *2 " *2 : *1; int min* = smaller + 1; while (map[min*, y1] == BLANK) { min*++; if (min* >= M) break; } if (min* == bigger) return true; else return false; } return false; }//处理直连以外的情况,即一个转弯和两个转弯的情况 public bool IndirectLink(int *1, int y1, int *2, int y2) { int pos = 0; Point[] ar1 = new Point[209]; int ar1Len = 0; Point[] ar2 = new Point[209]; int ar2Len = 0; pos = y1 - 1; while (0 <= pos && pos < N && map[*1,pos] == BLANK) { ar1Len = FindEmpty(*1, pos, ref ar1); ar2Len = FindEmpty(*2, y2, ref ar2); if (IsShare(ref ar1, ar1Len, ref ar2, ar2Len)) { co = 2; corner[1] = new Point(*1, pos); return true; } pos--; } pos = y1 + 1; while (0 <= pos && pos < N && map[*1,pos] == BLANK) { ar1Len = FindEmpty(*1, pos, ref ar1); ar2Len = FindEmpty(*2, y2, ref ar2); if (IsShare(ref ar1, ar1Len, ref ar2, ar2Len)) { co = 2; corner[1] = new Point(*1, pos); return true; } pos++; } //如果两点是左右且非直连关系 pos = *1 - 1; while (0 <= pos && pos < M && map[pos,y1] == BLANK) { ar1Len = FindEmpty(pos, y1, ref ar1); ar2Len = FindEmpty(*2, y2, ref ar2); if (IsShare(ref ar1, ar1Len, ref ar2, ar2Len)) { co = 2; corner[1] = new Point(pos, y1); return true; } pos--; } pos = *1 + 1; while (0 <= pos && pos < M && map[pos,y1] == BLANK) { ar1Len = FindEmpty(pos, y1, ref ar1); ar2Len = FindEmpty(*2, y2, ref ar2); if (IsShare(ref ar1, ar1Len, ref ar2, ar2Len)) { co = 2; corner[1] = new Point(pos, y1); return true; } pos++; } //如果非上下非左右,即构成矩形的关系 return false; }4.2.3运行结果分析系统界面分析这一局部主要是系统的运行与维护等,在这里展出了系统的局部运行效果图,并对这些界面进展了分析。

    1)游戏主界面如图4.4所示图4.4 游戏主界面图4.4是游戏主界面,图案种类数是20,每种图案的最大重复数是4,在没有点击"开场游戏〞按钮时,游戏图案排列不会呈现出来,剩余时间的进度条也不会倒计时〔2〕游戏运行中〔一〕如图4.5所示图4.5 游戏运行中〔一〕图4.5是游戏运行中〔一〕的状态,用户可以根据连连看游戏的相关规则进展相应的鼠标事件,使其能够消掉,同时积分器累计积分,上图中红圈处为"暂停〞按钮,可以点击此按钮来暂停游戏〔3〕游戏运行中〔二〕如图4.6所示图4.6游戏运行中〔二〕 图4.6是游戏运行中〔二〕的状态,上图红圈处显示"重新开场〞,此时游戏是在"暂停〞状态,用户可以点击"重新开场〞按钮,游戏可以继续进展〔4〕游戏过关如图4.7所示图4.7 游戏过关图4.7是游戏过关后的界面,游戏过关后会弹出一个"恭喜过关!〞的对话框,同时可以看出的最后的得分情况用户可以点击确定后,然后继续点击"开场游戏〞,这时系统又会重列游戏区域,积分器归零〔5〕游戏失败如图4.8所示图4.8 游戏失败图4.8是游戏失败时的界面,当时间耗完时或者游戏区域中没有能够匹配消掉的图案时,系统将提示"游戏失败!〞,即游戏失败。

    五、总结首先感谢教师给我们一次实训的时机通过这次课程设计,让我充分体会到了理论与实践相结合的重要性通过我们所学过的知识,教师给我们详细讲解并带着我们做这个连连看游戏,在这个过程中我们学到了很多书本上学不到的东西,我在写程序的时候也遇到了很多问题,不过在自己的努力和教师的指导下完成了任务在这次课程设计中,我不断的上网查资料以及翻阅相关书籍,通过不断的摸索、测试、发现问题、解决问题,在教师的帮助下这些问题都一一得到了解决,使得程序能够正常运行在此游戏的设计过程中,遇到了很多问题,有些问题比较简单但就是不知道错在哪里,有些大问题知道错在哪里但就是不知道怎么办,后来经过自己的不断修改和调试,这些问题都得到了解决经过这次课程设计,我认识到应该注意的细节问题,虽然是很小的问题,但可以提高自己编程的能力,而且还可以培养自己编程的严谨性,同时还可以为以后的编程积累经历编写完这个连连看游戏,我发现自己有很多缺乏的地方,感触最深的就是我真的要扎扎实实的打根底并且我感觉到只要肯下功夫学习,我也可以做出很好的东西,深深明白,只有自己的东西才是最珍贵的总之,通过这。

    点击阅读更多内容
    卖家[上传人]:痛苦女王
    资质:实名认证