版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
绪论1.1研究现状在电脑普及发展的今天,游戏已成为人们生活中必不可少的一部分,连连看游戏总是排在受玩家欢迎排名的前几名。但是,随着智能手机的普及,手机游戏占据了中国游戏市场的一大半,而更具游戏性、创新性的单机游戏却销量平平。根据《2019年中国游戏产业发展报告》,2019年中国游戏用户规摸非常之大,同比增长2.5%。国内游戏企业通过自己深入研究,移动游戏市场收入保持持续上升,但是单机游戏市场继续萎缩,分别只占市场份额的一点点[1]。经典的单机游戏连连看的市场自然也不太可观,因此要分析目前单机游戏存在的问题,以经典单机游戏连连看为例,发现问题并想办法解决。目前我国单机游戏渐渐淡出人们视野,是因为其普遍存在以下几点问题,第一,游戏产品本身质量不高,即游戏制作水平不足;第二,游戏性不强,即游戏重复可玩性不高;第三,文化属性不强[2]。据报告,全球游戏玩家在2016年创造了非常高的收入,其中单机游戏收入占70%以上。但并不是所有的游戏行业发展的都非常好,取得了可观的效益。单机游戏在中国的发展之路困难重重。基于如此,游戏产业尤其是单机游戏产业发展的并不是特别的理想。在全球范围内来看游戏是一个具有强大旺盛生命力的产业。2016年中国游戏产业规模实现了非常可观的收入,赚取了很大一笔资金,只是其中单机游戏的收入却是微不足道的,占比不到0.5%[3]。当前发展比较好的小游戏平台——狗仔游戏盒子,里面提供的单机小游戏都非常受欢迎,里面包括黄金矿工、金牌炮弹射手等等。但是大部分的单机小游戏质量参差不齐,都存在各自的缺点[4]。在国外,玩家玩游戏的第一选择是独立游戏。大型独立游戏的发展周期一般很长,发展计划庞大。然而,中小型作品往往受到公众的喜爱,如"植物大战僵尸"和"超级马里奥",这是流行的世界各地的。这两款独立游戏在中国非常成熟和流行。这些独立游戏不仅分布在公共PC平台上,而且还涵盖许多其他不同的平台[5]。1.2主要研究的目的及内容这种设计的主要目的是在Windows平台下设计一个简单有趣的游戏,让人们下班后放松和学习。与目前大型单机或网络游戏(以下简称大型游戏)不同,这款小型游戏旨在满足人们休闲的需要,在努力工作后放松人们的精神[8]。这种休闲游戏很容易玩,不像在线游戏,它需要注册帐户和下载很长一段时间。它不需要实时保持在线状态[6][7]。在没有网络时也可以使用。它不像大型游戏那样耗时和费力,也不会把人们的精力牢牢地投入到游戏里。对于我们来说,随着自由时间的日益分散,这个游戏不仅能给人们带来最大的放松,而且还不会像大型游戏一样疲惫不堪,而这个小游戏不会占用太多的电脑资源。可以说,工作和娱乐都是正确的[9]。1.3设计思路连连看看游戏的主要问题是鼠标点击两次的图片是否可以消失。当然,如果您单击两张相同的图片,那就做处理。如果选择两张不同的图片,则不会处理它。如果所有路径中至少有一个路径的拐点不超过两个,可以通过两个相同的图片连接,则可以消除该路径,如果没有,则不会进行处理。此课题内容以及目标如下:(1)有难度选择,根据时间进度条的自减量以及消去成对块后时间进度条的回复量来设置难度。(2)点击重新开始后可随机生成游戏界面。(3)棋子选中后图片要有明显标示。(4)选择两个具有相同样式的棋子。如果连接它们的拐点不超过两个,则可以消除该对棋子。在每场游戏中,玩家需要在指定时间内消除所有对块。消除所有对块时,则确定成功。(5)当出现无解的局面时,可按下重新排列按钮。(6)游戏自动统计玩家获得的分数。
相关技术简介2.1C++语言目前,一些语言为了提高效率总是以牺牲语言的灵活性为代价。但这种灵活性正是C/C++程序员所必不可少的。这种解决方案提供的功能差强人意,而且还对程序员有太多的限制。之前的系统也不能轻易的和他们交互,与当前的网络编程也不能很好地相结合。对于用户来说,在快速发展的同时调用基础平台的所有功能是最理想的解决方案。希望有一个与最新网络标准保持同步并与现有应用程序很好地集成的环境。此外,一些C/C++开发人员还需要在必要时进行一些基础编程。更新软件组件是一项非常容易出错的工作,因为修改代码可能会无意中更改原始程序的语义。为了帮助开发人员完成此工作,C++版本的更新提供了内部支持。一般来说,这些功能使开发后续版本的程序项目的过程更加稳健,从而降低了后续版本的开发成本[10]。无论是支持COM的呼叫还是纯API,它都是为了使开发人员能够直接在C++环境中具有必要的强大功能。VisualC++是以可视化技术为基础,以C++为主要编程语言,集成众多工具的开发利器。一般性的MFC界面开发工作也可以全部交给它来完成,用户就只需要在这些基础上做出自己想要实现的功能即可。与其他开发工具相比,VisualC++完成Windows图形界面的程序所花费的时间要少得多结论:C++是一种现代的面向对象语言。这种框架使C++组件可以方便地转化为XML网络服务,从而使任何平台的应用程序都可以通过Internet调用它。2.2MicrosoftVisualStudioVisualStudio是由微软公司发行的开发编程运行环境,是当前市面上最盛行的Windows平台应用程序开发的环境。它比以前更加简单明了的原因是它重新设计和组织了其集成以及开发环境(IDE)的界面。同时带来VS2010CTP(CommunityTechnologyPreview--CTP)、NETFramework4.0,并支持开发面向Windows7的应用的程序。除了MicrosoftSQLServer,它还能够支持IBMDB2和Oracle数据库。而且,VS能够更深层次的支持SQLServer。SQLServerYukon也将数据库引擎整合了公共语言运行时(CLR)的功能,并且将数据库和工具的结合提高到新水平[11]。需求分析连连看游戏所占内存比较小,对计算机存储容量没有过分特殊要求,可以在任意一款计算机上运行。连连看游戏的基本规则为,每次删除一对棋子时,游戏限制时间都会自动增加。当所有的时间花完了,游戏就以失败告终。在有限时间内,消除全部游戏区域内的棋子,则可以进入下一关较大难度的游戏,重现开始新等级的游戏[12]。此款连连看游戏要实现:(1)连连看的总体地图设计:整个游戏区域被视为由若干个空方块组成的地图,每个空方块都充满了不同的图案。充满不同图案的空方块可以称为棋子。根据某些规则,这些不同的棋子分布在整个游戏区域的不同位置,每个棋子都应有其相对应的棋子。(2)图案方块的连接判断:若选中的两个小图块图案相同,且在同一条直线上,它们之间也没有其他的障碍物,则可以用直线进行直接消除;若没在同一条直线上,但是中间没有其他障碍物,可以利用折线进行消除;如果不是以上两种情况,则返回开始,直到出现以上两种情况再进行连线消除。(3)鼠标交互功能的实现:用户在用鼠标选择了两次图案后,程序要自己判断是否是可以消除的情况,若果符合可以消除的情况,则进行图块的消除,反之则不进行消除,在重复上述的选择与操作。(4)游戏胜利的判断:对于整个游戏区域进行扫描判断,若发现游戏区域有两个及以上的图块没有消除,则游戏没有胜利,若检测到整个游戏区域的图块都被消除完毕,则游戏胜利。(5)英雄榜的显示及更新:当用户当前级别超过记录文件中的水平时,英雄列表对话框将弹出。要求用户输入姓名,并记录在记录文件中。(6)游戏的帮助功能:在游戏界面中需要提供游戏使用说明等帮助提示,以方便对此连连看游戏不了解的用户对游戏进行操作和使用。系统设计连连看游戏不单单要功能完备,且要界面友好,因此,对于一个成功的连连看游戏设计项目,功能模块的设计是关键[13]。4.1概要设计概要设计就是分析连连看游戏要“做什么”,我们需要做系统功能模块图,如图4-1所示的系统体系结构图:图4-1系统体系结构图连连看游戏系统功能模块有以下几个:首先是界面初始化,再接着是随机生成图片,然后是判断图片是否消除,即图片消除判断,再是连线消除加分和胜利条件判断。对于用户玩家来说则有如下几个功能:开始游戏、暂停游戏、重新排列、游戏设置以及其他相关[14]。界面初始化:用户在开始游戏后,游戏的整个界面开始进行准备工作,即开始初始化,整个游戏的页面会出现游戏难度的选择、游戏背景音乐的选择、游戏关卡的选择、游戏帮助的选择。主要负责显示游戏界面、等级、时间显示以及游戏帮助等内容。其主要有如下几个处理模块:主菜单处理模块、连接提示处理模块、换盘处理模块、初始化棋盘数据处理模块、游戏信息处理模块。(1)主菜单处理模块:主菜单处理模块比较简单,只需要创建一个菜单对象。并在对话框初始化函数中进行加载相应资源并设置到对话框中即可。(2)连接提示处理模块:连接提示模块,主要调用棋子类中的查找有效连接接口函数,通过返回的两个图标相同的棋子位置来设置两个棋子的状态为按下。(3)换盘处理模块:换盘处理模块,主要是把棋盘数组中的数据重新进行随机排列。(4)初始化棋盘数据模块:初始化棋盘数据模块,利用随机数,随机地选择在棋盘数组中插入棋子数据。每一类棋子生成两组四个相同的数据。(5)游戏信息处理模块:游戏信息处理模块,主要利用设置定时器,每一秒进行更新显示区域。在这些区域中,以绘图方式进行输出。随机生成图片:在用户点击开始游戏按钮后,整个游戏地图会随机生成图案不同的小图片,也就是连连看的棋子,每一个棋子都有其相对应的一个,这两个棋子组成一对,只要用户两次点击相同图案的棋子,则可以将两个相同图块的棋子消除。图片消除判断:用户在用鼠标第一次点击棋子后,被点击的这个棋子的图案将被记录;然后用户第二次点击棋子,如果用户两次点击的棋子之间没有其他的(障碍物)棋子,即两个棋子之间是可以构成一条横着或者竖着的直线,又或者是两个棋子之间构成了一条折线,同样中间是没有障碍物的,那么,这就满足了棋子消除的条件,可以进行棋子的消除。连线消除加分:如果有两个棋子可以进行连线消除,那么就可以加一分,每连线消除一对棋子,就加一分,直到所有棋子消除完毕,则停止加分。胜利条件判断:如果整个游戏地图的棋子全部消除完毕,则游戏胜利。如果整个游戏地图的棋子大于等于一,则游戏失败。对于用户玩家来说:用户想玩游戏的时候可以点击开始游戏以进行一场新的游戏,如果中途不想继续游戏了,也可以点击暂停游戏,让游戏先暂停,休息过后可以点击继续游戏来开始游戏。用户如果对当前的棋子排列不满意,也可以点击重新排列一达到棋子换盘的目的,也可以进行游戏设置以及游戏帮助[15]。4.2系统结构设计系统在概要设计中一般采用结构化设计。其以需求分析阶段生成的数据流图为基础,按一定步骤进行映射,形成软件结构。然后,进一步细分模块,添加细节功能与实现。本文所设计的连连看游戏主流程图如图4-2所示。图4-2主流程图首先,游戏开始时先是游戏界面初始化,页面初始化会显示主菜单、难度选择等。初始化完成之后,系统就开始进行随机地成对的分发棋子,让整个游戏区域布满棋子,这些棋子每个都可以找到与之匹配的一个,即都可以进行消除,不会落单。这一步就是游戏地图的完成。接着用户第一次用鼠标选择一个棋子,系统记录在案,用户在开始第二次棋子选择。如果连续两次所选择的棋子是一样的,而且两个棋子之间没有其他多余的障碍物,则可以进行两个相同棋子的消除。如果两次所选择的棋子图案不一样,就返回上一步,再次进行两次图片的选择。每次进行一次图片消除后就判断一次所有的棋子是否消除完毕,若所有的棋子都消除完毕了,则游戏结束,如果没有消除完毕,则继续进行棋子选择和棋子消除步骤。4.3详细设计4.3.1功能模块的算法设计在连连看游戏中,要实现游戏的各个功能,大致可以分为以下几个模块,其算法展示如下:时间限制模块如图4-3所示,消除提示模块如图4-4所示,鼠标交互功能如图4-5所示,游戏升级模块如图4-6所示:时间限制模块的算法设计:图4-3时间限制模块(1)在比赛开始时,将时间设置为60秒;(2)设置时间间隔为1000ms的定时器Timer1;(3)每次间隔到达时,当前限制时间缩短1s;(4)游戏中淘汰一对棋子的,将限制时间增加3次;例如,当前限制时间为50秒。如果移除棋子,限制时间为53秒。(5)如果限制时间为0s,则游戏结束,游戏结束对话框将弹出。如果当前游戏级别超过记录级别,英雄列表对话框将弹出。消除提示模块的算法设计:图4-4消除提示模块(1)判断提示次数变量的值,如果提示次数等于0,则弹出游戏结束对话框,结束游戏并退出游戏;(2)如果提示次数的值不为0,则遍历查找当前棋盘中剩余的还没有消除的其他的相同的棋子;(3)在那些还没有消除的相同的棋子中,查找可以消除的棋子,即拥有相同图案的棋子;(4)找到图案相同的棋子后,在可以消除的棋子上给出提示连线,然后将提示次数变量减少1,直到提示次数变为0。消除相同棋子模块的算法设计(鼠标交互功能):图4-5鼠标交互功能(1)当用户首次单击棋子时,将第一次棋子的坐标和类型保存到“第一选择变量”;(2)用户鼠标第二次点击棋子,获取第二次鼠标选择的棋子的坐标和类型;(3)比较用户第一次和第二次棋子的坐标和类型。如果点击的两次的棋子类型相同,请转到步骤(4);如果没有,去步骤(5);(4)在用户点击两次的棋子上画一条连接线,消除一对棋子,退出并等待下一个鼠标选择;(5)将用户第二次选择的棋子的坐标和类型分配给“第一选择变量”。游戏升级模块的算法设计:图4-6游戏升级模块(1)在用户完成一局游戏后,保存当前游戏等级和限制时间初始值;(2)判断当前游戏中的所有棋子是否已被淘汰。如果当前游戏区域的所有棋子都已消除,则将当前游戏级别提高一个级别,并将有限时间的初始值降低"5s";(3)如果本场游戏的棋子没有被淘汰,将保存当前游戏级别和有限时间,继续当前游戏;(4)如果游戏等级增加了一级,就重新开始游戏。消除提示模块的算法设计:(1)判断提示次数变量的值,如果提示次数变量的值等于0,则游戏提示次数完毕,游戏结束;(2)如果提示时间变量值大于0,将搜索当前棋盘中具有相同图案的棋子;(3)找到图案相同的棋子后,在相同棋子中,查找两个棋子中间没有其他多余障碍物的,可以消除的棋子;(4)找到可以消除的棋子后,在可以消除的两个棋子上面给出提示连线,则提示次数变量减少1。棋子换盘模块的算法设计:(1)首先,将当前棋盘阵列中的数据保存到临时数组;(2)从临时数组中回收,随机取出数据并保存到棋盘阵列中。英雄榜模块的算法设计:(1)读取配置文件(setup.ini),得到并显示当前最高等级及姓名;(2)在游戏结束时,将当前用户级别与最高水平进行比较。如果它高于配置文件中的最高水平,"英雄列表"对话框将弹出,要求您输入一个名称并将其保存到配置文件以及用户级别。音乐播放模块的算法设计:(1)在工程文件中,添加静态库文件及头文件;(2)实现CLlkDlg类中的PlayBackMusic()成员函数。4.3.2游戏地图设计宏观观察整个游戏区域,可以把整个游戏区想象成一个由若干个空方块组成的地图,然后用不同的图案填满每个空块,可以称为一个小图片,即游戏的棋子。这些小块根据某些规则随机分布在游戏区域的不同位置,每个小块必须有另一个小块与其完全相同,以确保所有棋子可以消除和终止游戏。如图4-7所示。图4-7游戏地图设计图如图4-7所示,平面上散落着几个棋子,这些棋子成对出现。在描述和分析之后,整个游戏区域地图可以由一个数组来表示。此阵列设计为动态分配的int型二维阵列,以表示地图中的行数。成员变量中定义了整型指针变量,用于记录动态分配的一维数组映射空间的第一个地址。对于游戏区域中的某个小块类型,可以使用重新塑造的整型ID来识别它。在这里,添加行变量x和列变量y以识别地图的行和列位置。完成地图数据结构设计后,初始化游戏。因为小块需要成对出现,当地图被初始化时,它不仅需要采取简单的随机数字的图像类型,然后把随机选择的填充地图放入游戏区域,而且还要选择成对的填充地图,也就是说,地图中的小块必须是双数的。将地图阵列设置为动态分配模式的目的是使数据空间根据行数和列数动态获取。如果设计了大小不同的地图,则可以提前定义有关行数和列数的几个宏组。在创建时,根据不同的宏分配不同大小的地图空间,然后可以初始化地图数据。在执行连连看类对象时,定义了地图中行数和列数的几大宏。由于地图数据由堆栈区域中的new动态创建,因此在销毁对象时需要释放内存空间,并且在对象的破坏器中反复调用delete以从新对象中释放所有空间。4.3.3棋子类的设计棋子类的设计,包含如下几个功能函数:游戏游戏胜负判断处理(1)等待用户的鼠标输入信息;(2)在定时器中,每次扣除游戏的限制时间一秒;(3)当游戏时间为零秒时,弹出游戏失败结束提示,并根据用户选择重新开始游戏或者结束游戏;(4)在用户消除一对棋子后,就对当前棋盘数组进行遍历。如果是空,如果是空,说明用户已经全部消除完毕。调用升级处理。如果不是空,则返回步骤(1)。戏升级处理:(1)当游戏中的棋子全部被消除完毕后,弹出升级提示对话框;(2)当用户选择继续游戏时,就调用主对话框类的重新开始游戏接口函数。但是要把当前游戏等级增加一级;(3)当用户选择不继续时,直接调用退出函数。查找处理:(1)遍历整个棋盘数组;(2)查找一根直线可以连接的一对棋子,如果没有则转下一步;如果有则转步骤(6);(3)查找一个有拐角,即两根直线可以连接的一对棋子。如果没有则转下一步,如果有则转步骤(6);(4)查找有两个拐角的,即三根直线可以连接的一对棋子。如果没有则转下一步,如果有则转步骤(6);(5)如果返回假,表示查找失败;(6)如果返回真,表示查找成功,并把棋子的位置在输出参数中返回。提示处理:提示处理是通过调用查找函数,把其中可以连接的一对棋子的位置通过输入参数返回给上层调用者。由调用者设置相关棋子为选中状态。棋子类的实现,分为以下几步:(1)首先声明棋子类CChessMan,其中包含两个构造函数、查找接口函数、判断棋子为空函数及鼠标左键响应函数。(2)添加棋子类的实现,其中包含基本的构造函数、析构函数、鼠标左键响应函数等。(3)实现棋子类的查找接口、棋盘判空功能函数。要注意,其中查找函数有两种:一种是输入两个棋子坐标查找有无连接线;另一种是在前一种基础上,如果棋子间有连接就要把棋子的拐角位置输出。(4)实现棋子类的配对接口函数分为两种:一种是判断当前棋盘上有无配对棋子;另一种是在前一种的基础上添加输出配对棋子坐标的功能。(5)实现各种不同的查找函数。包含查找一根直线连接函数、查找一个拐角连接函数和查找两个拐角连接函数。4.3.4棋子的连接判断对于选中的两个方块的处理,必须符合如下3个条件:选中的两个小图块的填充图案一致;两个选定的小块可以通过与X或Y轴平行的几个直线连接,并且彼此垂直,没有障碍物;连接它们的这些直线段不超过两个拐点(连接线由x轴和y轴的平行线组成)。现在针对条件2和条件3进行分析,如图4-8所示。依图4-8所示可知,相同图案的连接方式可以分成以下3种:直接方式;有一个折点的垂直线段连接;有两个折点的垂直线段连接。(1)直接连接方式在直接连接模式下,所选的两个棋子必须位于同一水平线上(x方向或Y方向),并且两个正方形之间没有其他图案正方形。(2)单个拐点连接方式如果选定的两个棋子通过折点连接,则对于折点,每个折点必须具有且至少一个坐标(x或y)与目标点之一相同,即折点必须在位于两个目标点所在的X或Y方向的行上。此外,对于折点连接的情况,应通过第一个选定方块的横向线或纵向线的交叉点和第二个选定方块的纵线和横向线的交叉获得折点。(3)两个折点的连接方式这样,由两个折点连成的直线和两个对象之间的直线可以形成平行线。因此,根据此规则,水平线可以在游戏区域允许的条件下上下移动,然后通过判断整条带垂直折线点的曲线之间有无障碍物方式来确定是否可以连同。经过上述详细分析,能否对选定的两个块进行消除,可以采用这种方式进行设计。先判断简单的直接连接,看看它是否符合条件。如果不能,再加深一个级别的复杂性,判断折点的情况,依次类推,如下图4-8所示。图4-8连线规则图连线流程图如图4-9所示。图4-9连线流程图(1)首先判断直连方式是否成功,直连方式判断成功后就可以进行棋子的消除了;(2)如果直连方式判断为失败,则开始判断单个拐点方式是否成功,单个拐点方式判断成功后,则进行棋子的消除;(3)如果单个拐点方式判断为失败,则开始判断两个拐点方式是否成功,判断两个拐点方式为成功后,则进行棋子的消除,如果判断为失败,则不进行消除。这里把直接连接方式分为直通,左通,右通3种情况,如4-10图所示。图4-10连接方式图下面简单介绍直通、左通这两种情况(右通与左通类似)(1)直通:直通就是选定的两个图块连线中,没有任何阻碍。(2)左通:左通即选定的两个图块间的连线间有阻碍,但通过其左侧可以将它们无阻连通。直连中的此种情况跟之前分析的两个折点连接方式中的其中一点类似,如4-11图所示。图4-11两折通道图同理,有上通和下通,其情况类似于左通和右通。通过行判断是否通(并返回能通过的行)。4.3.5鼠标交互功能的实现(1)首先,每个小块的宽度和高度,以鼠标的当前坐标位置点为模型,来获取当前鼠标着陆点所在的游戏区域中行和列的具体位置:(2)判断行数和列数是否符合条件。确保计算的行和列数在预先定义区域中行和列的最大数量范围内,并且单击的区域的状态不是空白的方形区域。(3)要判断此鼠标事件的选择是否与第一个选取的相同,我们只需要检查用于记录第一个选定的小块的行和列数的成员变量是否有效。(4)对于所选小块是第一个框,加一个红色外边框,用以提示用户。(5)对选定的块做出一些判断,以获得更高效的处理。判断所选块是否与前一个块相同,然后跳到下一步,检查两个选定的块是否可以被抵消。(6)调用函数isLink,判断选中的两个棋子是不是可以相互抵消。(7)如果可以抵消,应适当修改内部核心地图中两个选定块的数据状态,并将其状态记录为已销毁的空块状态。(8)第二个图块选择和相关功能操作完成后,应清理工程中所记录的第一个图块的位置,以便选择下一个新的块组。(9)最后,判断鼠标操作是否已成功完成,如果成功,给用户一个提示,然后重新开始新的关卡。为了实现游戏和用户互动,选择鼠标交互模式。以下是鼠标交互功能的简要描述。程序自动确定鼠标选中的两个棋子是否可以消除。可以的话,则进行消除,反之则不消除。上述判断和操作会不断重复,直到游戏在棋子全部淘汰后结束,或游戏在指定时间之前失败。鼠标处理工作如图4-12所示的流程图。图4-12鼠标交互流程图依据预先设计的鼠标交互处理流程,上面已经将其转换成实现流程图。下面则按照流程的子功能模块分配方式,对整个功能模块的实现过程进行简单描述。(1)每个棋子的宽度和高度都先记录下来,以获取游戏区域当前鼠标落点的特定行和列坐标(x,y)。(2)判断行和列的数量是否符合最大条件。确保计算获得的行和列坐标(x,y)在预定区域中行和列的最大数量范围内,并且点击的区域的状态不是已消除的空白块。(3)要判断鼠标选择是否与选择第一个块相同,我们只需要判断记录第一个选定块的行和列数的成员变量是否有效。(4)如果是第一个选定的方块,请先记录当前选定的方块的坐标,再在棋子周围添加一个红色的外边框,以提醒用户所选的第一个棋子的坐标。(5)在这一处理中,对选定图块作一些判断,便以更高效地处理。判断选中的图块与前一图块是否为同一图块,并且只有在此次选择不与上次选定的图块为同一图块时,才跳到下一步对两个选定的图块是否可以消除的判定流程中去。(6)最后,判断此关所有鼠标操作是否已全部结束,如果是则给予用户顺利通关或不幸失败提示,然后等待玩家重新开始新一关的指令。4.3.6游戏胜利的判断在游戏程序中,游戏结束的判断往往是非常重要的,它表示着进行一次游戏的最终结果。对于本连连看游戏程序对游戏结束的判断,自然是先检查游戏区域中的小方块是否都消除,由于某个位置是否由小方块采用不同的数值进行记录,所以只需判断各个小方块位置的状态就可以了。其次,由于本游戏程序的设计是按照连贯性进行设计的,如果在游戏中,当地图中的所有部分都被淘汰时,则应自动执行下一个级别。在这里,我们可以通过if和else抉择。当游戏没有完成,时间已经被使用完毕或者当没有生命值,为一个死局,即没有一组棋子可以被消除,则游戏依然结束弹出游戏结束对话框。此外,应把游戏结束的原因显示在屏幕上,并应将相应的值添加到计数器进行跟踪,当计数器值为0时,触发模式用于在游戏功能结束时终止游戏。图4-13判断游戏胜利如图4-13所示,要判断游戏的胜利,实现起来较为简单,只需对地图中的所有区域的状态进行检测即可判定。如果检测到地图中至少有两个棋子还没有被消除,则证明游戏没有胜利。继续检查所有游戏区域,知道检测出游戏区域内的所有棋子都被消除了,这才说明游戏胜利,即游戏结束。还有另一种情况,即整个游戏区域内的棋子还没有消除完毕,但是游戏时间到了,那么,也同样弹出游戏结束对话框。(1)等待用户的鼠标输入信息;(2)在定时器中,每次扣除游戏的限制时间一秒。(3)当游戏时间为零秒时,弹出游戏失败结束提示,并根据用户选择重新开始游戏或者结束游戏。(4)在用户消除一对棋子后,就对当前棋盘数组进行遍历。如果是空,如果是空,说明用户已经全部消除完毕。调用升级处理。如果不是空,则返回步骤(1)。(5)当整个游戏区域内所有的棋子都被消除后,则游戏胜利。系统调试与测试5.1程序调试在编程过程中,不可避免地会出现一些错误。对于有错误语句的程序来说,编译器将在编译程序时自动提示并要求立即更正。所以,此类错误很容易找到并及时改正。但另一种错误是由于程序运行时的操作不正确或逻辑错误。这种错误是非常隐蔽的,有时出现,有时不出现,因此,研究这种动态错误是非常耗时和费力的。5.2程序的测试测试的主要内容:主菜单和界面显示功能的测试测试主菜单和界面显示是否成功。测试步骤如下:一是运行连连看程序并开始调试:其次,程序启动后,将显示如图5-1所示的样子。图5-1主菜单和界面显示功能测试游戏地图的测试游戏地图的测试则是要在整个游戏区域内看到一个由若干个空方块构成的地图,如图5-2所示,而且每个空块包含不同的棋子图案。这些具有不同图案的方块根据某些规则分布在整个游戏区域的不同位置,每个小块都有与其相对应的相同小块。图5-2地图测试图案方块的连接测试:用鼠标选择两个小图块,若它们之间没有障碍物,且又在同一条直线上,那么就可以用一条直线消除;若是不在同一条直线上,但是中间也没有其他的障碍物,则可以利用折线进行消除如图5-3所示。如果以上两种情况都没有出现,则返回重新寻找可以消除的棋子即小图块。图5-3连接测试鼠标交互功能实现的测试游戏开始后,在用户用鼠标进行了两次选择之后,我们要看到程序自己给出的判断,两次选举中的图案能消除或者不能消除,若能消除则要进行消除。如图5-4所示,用户如果选择的是两个相同的棋子,就进行消除,如果不能消除的话要重新进行选择。图5-4交互功能测试游戏胜利的测试在整个游戏区域内,如果发现没有可供选择的棋子了,也就是整个游戏区域内的棋子被全部消除,则立即弹出游戏胜利对话框,用户可以选择再来一局,也可以选择退出游戏。如图5-5和5-6所示,如果还有两个及以上的棋子,则游戏还没有结束,用户可以继续玩这局游戏直到游戏胜利。图5-5游戏胜利的测试1图5-6游戏胜利的测试2总结与展望6.1总结此次毕业设计是采用C++来设计并实现连连看游戏的功能,对该程序的设计思路,算
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度洛阳租赁房屋租赁合同终止条件约定4篇
- 2025年北师大新版六年级语文上册阶段测试试卷含答案
- 药物应用前景分析-洞察分析
- 2025年外研版八年级地理下册阶段测试试卷含答案
- 二零二五版家政服务与雇主及第三方监管机构三方合作合同
- 物联网实验室数据安全与隐私保护-洞察分析
- 2025年外研版三年级起点选修4化学下册月考试卷含答案
- 2025年沪科版七年级地理下册阶段测试试卷
- 2025年沪科版八年级地理下册阶段测试试卷
- 2025年人教版PEP七年级地理下册月考试卷
- 拘留所教育课件02
- 冲压生产的品质保障
- 《肾脏的结构和功能》课件
- 2023年湖南联通校园招聘笔试题库及答案解析
- 上海市徐汇区、金山区、松江区2023届高一上数学期末统考试题含解析
- 护士事业单位工作人员年度考核登记表
- 天津市新版就业、劳动合同登记名册
- 产科操作技术规范范本
- 人教版八年级上册地理全册单元测试卷(含期中期末试卷及答案)
- 各种焊工证件比较和释义
- 感染性疾病标志物及快速诊断课件(PPT 134页)
评论
0/150
提交评论