武汉理工大学数据结构及算法综合实验连连看

上传人:yh****1 文档编号:136016648 上传时间:2020-06-22 格式:DOC 页数:17 大小:1.76MB
返回 下载 相关 举报
武汉理工大学数据结构及算法综合实验连连看_第1页
第1页 / 共17页
武汉理工大学数据结构及算法综合实验连连看_第2页
第2页 / 共17页
武汉理工大学数据结构及算法综合实验连连看_第3页
第3页 / 共17页
武汉理工大学数据结构及算法综合实验连连看_第4页
第4页 / 共17页
武汉理工大学数据结构及算法综合实验连连看_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《武汉理工大学数据结构及算法综合实验连连看》由会员分享,可在线阅读,更多相关《武汉理工大学数据结构及算法综合实验连连看(17页珍藏版)》请在金锄头文库上搜索。

1、. 学生学号 Xxx实验课成绩学 生 实 验 报 告 书实验课程名称数据结构与算法综合实验开课学院计算机科学与技术学院指导教师姓名xx学生姓名xx学生专业班级xxxx2015-2016学年第2学期.实验课程名称: 数据结构与算法综合实验 实验项目名称连连看游戏综合实践报告成绩实验者xxx专业班级xxxxx组别同组者 完成日期年 月 日第一部分:实验分析与设计(可加页)一、实验目的和要求1.目的l 调研连连看游戏,了解连连看游戏的功能和规则等。l 掌握集成开发工具。l 掌握C+的基础编程。l 了解MFC框架,包括MFC Dialog应用程序和GDI编程。l 了解线性结构,重点掌握数组和栈操作,掌

2、握数组的遍历、消子和胜负判断等算法。l 了解企业软件开发过程,了解系统需求分析和设计,应用迭代开发思路进行项目开发。l 养成良好的编程习惯和培养软件工程化思维,综合应用“C+编程、MFC Dialog、算法、线性结构”等知识,开发“连连看游戏”桌面应用程序,达到掌握和应用线性核心知识的目的。2.要求 待开发的连连看游戏称为“欢乐连连看”,使用二维数组来保存游戏地图的数据,实现连连看的核心功能。欢乐连连看的功能有:主界面、开始游戏、消子、判断胜负、提示、重排、计时、游戏模式。l 主界面 游戏主界面就是进行各项操作的入口。l 开始游戏 玩家选择开始游戏模式,进入游戏后,选择开始游戏,系统根据设置的

3、主题风格生成图片布局,以供玩家点击消除。 游戏地图大小为640*400,是一个16行乘10列的矩形,分成160个小正方形,存放160张图片,每张图片大小为40*40。l 消子 对玩家选中的两张图片进行判断,判断是否符合消除规则。只有符合以下规则的图片对才能被消除:v 一条直线连通v 两条直线连通v 三条直线连通 如果可以消除,从游戏地图中提示连接路线,然后消除这两张图片,并计算相应的积分。如果不能消除,则保持原来的游戏地图。l 判断胜负 当游戏完成后,需要判断游戏胜负。不同模式下判断胜负的规则不同。v 基本模式时,如果在五分钟内将游戏地图的所有图片都消除,则提示玩家胜利。v 休闲模式时,如果游

4、戏地图中所有图片都被消除,则提示玩家获胜。l 提示 可以提示界面上能够消除的一对图片。l 计时 设定一定时间来辅助游戏是否结束。l 重排 根据随机数,重新排列地图上的图片。l 游戏模式 游戏模式有:基本模式、休闲模式和关卡模式三种,可以根据是否定时等规则进行设置。二、分析与设计1.数据结构的设计1) 顶点存储 添加global.h文件,定义结构体tagVertex,用于保存游戏地图中一个点的行号、列号、值信息。typedef struct tagVertexint row;/行int col;/列int info;/信息类Vertex;2) 游戏地图存储结构 使用二位数组来保存连连看游戏地图,

5、在给没一种图片一个编号,并将这些编号保存在二位数组中。 用户在屏幕上选择两张图片,对应为数组中的两组坐标。分别实现三个消子判断算法:一条直线连通、两条直线连通、三条直线连通,并使用者三个算法进项消子判断。若符合消子规则,就在屏幕上消除一对图片,并把数组对应元素清空。1 游戏地图中图片种类和重复次数与游戏的级别汉难度有关。图片种类越多,重复次数越小,游戏难度越大,反之则越容易。2 只有两张相同的图片才能消除。为保证游戏中的图片能够完全消掉,每种图片出现的次数一定是偶数,即2的倍数。3 地图的大小与图片元素种类之间的关系地图的行数*地图的列数=图片种类数*每种图片重复的次数。4 地图数据的存储a.

6、 用int类型的动态二位数组(int *m_pGameMap)存储地图中元素图片的编号。b. 获得某行某列对应的元素编号。2.核心算法设计l 随机开局算法1) 计算游戏中元素个数:行数*列数。2) 计算每种花色重复数:行数*列数/花色数。1 判断(行数*列数%花色数)是否为0。如果不为0,则进行异常处理。2 判断每一种花色的重复数能否被2整除,如果不能被二整除,则进行异常处理。3) 按从左到右,从上到下,将花色数填入游戏地图。实现代码如下:int nRepeatNum = nRows * nCols / nPicNums;int count = 0;for (int i = 0; inPicN

7、ums; i+)for (int j = 0; j col2)int temp=col1;col1=col2;col2=temp;/判断两个顶点间是否有不为空的图片for(int i=col1+1;irow2)int temp=row1;row1=row2;row2=temp;for(int i=row1+1;i=row2;i+)if(i=row2)return true;if(m_Mapicol!=BLANK)break;return false;l 两条直线消子算法 若一条直线无法连通,则判断两条直线的情况。在CGameLogic类中定义OneCornerLink()函数判断两点是否能两条

8、直线连通。 先判断两个顶点的X和Y方向的直线相交的两个顶点,是否为空。若能构成两条指向连通,那么相交的顶点必须为空才行。 若顶点有一个为空,则判断该顶点与两个顶点,横向与纵向一条直线是否连通,若都连通,则表示两条直线消子成功,否则不能相消。实现代码如下:bool CGameLogic:OneCornerLink(int m_Map1015,Vertex v1,Vertex v2)int row1=v1.row;int col1=v1.col;int row2=v2.row;int col2=v2.col;/判断相交的顶点是否为空if(m_Maprow1col2=BLANK)/判断两个同行的顶点

9、是否一条直线连通if(LineY(m_Map,row1,row2,col2)&LineX(m_Map,row1,col1,col2)Vertex V=row1,col2,BLANK;AddVertex(V);return true;if(m_Maprow2col1=BLANK)/判断两个同列顶点是否一条直线连通if(LineY(m_Map,row1,row2,col1)&LineX(m_Map,row2,col1,col2) Vertex V=row2,col1,BLANK;AddVertex(V);return true;return false;l 三条直线消子算法 若两条直线无法连通,则

10、判断三条直线的情况。在CGameLogic类中定义TwoCornerLink()函数判断两点能否三条直线连通。 三条直线消子时,假设选择的两张图片的位置为(nRow1,nCol1)和(nRow2,nCol2),则先寻找与Y轴平行的连通线段。 如果Y轴没有找到可以连通的三条直线,则寻找以X轴平行的连通线段。1) 搜索关键路径 假设玩家选择的两个顶点为V0(row0,col0),V3(row3,col3),步骤如下:第一步:从地图的第一行开始扫描,当前扫描到nRow行。第二步:设置拐点:V1(nRow,col0),V2(nRow,col3)。第三步:判断V1和V2是否水平方向向上连通,如果连通,则

11、V1到V2的连线即为关键路径。如果不连通则接着扫描下一行,重复第二四步。2) 判断三条直线连通 采用枚举法判断三条直线连通,假设玩家选择两个顶点为V0和V3,判断三条直线连通的具体实现的具体步骤如下:1 找到其中一条关键路径V1,V2。2 判断V1和V0是否连通。3 判断V2和V3是否连通。4 如果同时满足V1和V0连通,V2和V3连通,则V0和V3满足三条直线连通。否则,在此关键路径下V0和V3不连通,找到下一条关键路径,重复24,直到判断出V0和V3是否连通。3) 保存连通路径 使用栈来保存连通路径中的关键点:起始点V0,拐点V1,拐点V2和终点V3。保存连通路径的步骤如下:1 保存其实点V0。2 判断是否存在能够满足三条直线消子的关键路径V1、V2。3 如果存在,保存顶点V1、V2、V3,如果不存

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号