数据结构试验-连连看_第1页
数据结构试验-连连看_第2页
数据结构试验-连连看_第3页
数据结构试验-连连看_第4页
数据结构试验-连连看_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、学生学号0实验课成绩学生实验报告书实验课程名称数据结构与算法综合实验开课学院计算机科学与技术学院指导教师姓名伍新华学生姓名蒋正琪学生专业班级物联网150220162017 学年第 2 学期实验项目名称连连看游戏综合实践报告成绩实验者蒋正琪专业班级物联网1502组别同组者完成日期年 月曰第一部分:实验分析与设计(可加页)一、实验目的和要求1. 目的(1)了解MFC框架,包括MFC Dialog应用程序和GDI编程。(2)了解线性结构,掌握数组和栈操作,掌握数组的遍历、消子和胜负判断等算法。2. 要求开发程序使用二维数组来保存游戏地图的数据,实现连连看的核心功能。欢乐连 连看的功能有:主界面、开始

2、游戏、消子、判断胜负、提示、重排、计时、游戏模 式。二、分析与设计1.数据结构的设计1)顶点存储添加文件,定义结构体tagVertex,用于保存游戏地图中一个点的行号、列号、值 信息。typedef struct tagVertexint row;心算法设计(1)随机开局算法1)计算游戏中元素个数:行数*列数。2)计算每种花色重复数:行数*列数/花色数。 判断(行数*列数%花色数)是否为0。如果不为0,则进行异常处理。 判断每一种花色的重复数能否被2整除,如果不能被二整除,则进行异常 处理。3)按从左到右,从上到下,将花色数填入游戏地图。实现代码如下:int nRepeatNum = nRow

3、s * nCols / nPicNums;int count = 0;for (int i = 0; inPicNums; i+)for (int j = 0; j col2)int temp二coll;coll=col2;col2=temp;for(int i=coll+l:irow2)int temperowl;rowl=row2;row2二temp;for (int i二rowl+1;i二row2;i+)if (i=row2)return true;if(mJfapicol!=BLANK)break;)return false;2) 两条直线消子算法若一条直线无法连通,则判断两条直线的悄

4、况。在CGameLogic类中定义 OneCornerLink ()函数判断两点是否能两条直线连通。先判断两个顶点的X和Y方向的直线相交的两个顶点,是否为空。若能构成两条 指向连通,那么相交的顶点必须为空才行。若顶点有一个为空,则判断该顶点与两个顶点,横向与纵向一条直线是否连通, 若都连通,则表示两条直线消子成功,否则不能相消。实现代码如下:bool CGameLogic:OneCornerLink(int m_MapL1015, Vertex vl,Vertex v2)int rowl二;int coll=;int row2二;int col2=;if(m_Maprowlcol2=BLANK

5、)if (LineY(m_Map, rowl, row2, col2)&LineX(m_Map, rowl, coll, col2)Vertex V=rowl, col2, BLANK;AddVertex(V);return true;if (mjfaprow21 coll=BLANK)if (LineYrowl, row2, col 1)&LineX(m_Map, row2, coll, col2)Vertex V=row2, coll, BLANK;AddVertex(V);return true;return false;3) 三条直线消子算法实现代码如下:bool CGameLogic

6、:TwoCornerLink(int m_Map1016, Vertex vl,Vertex v2) int rowl=;int coll=;int row2二;int col2=;for (int col=0;col16;col+)if (mJfapErowll col=BLANK&m_Haprow2 col=BLANK)if (LineY(m_Map, rowl, row2, col)if (LineX(m_Map, rowl, coll, col)&LineX(m_Map, row2, col2, col)Vertex Vl=rowl, col, BLANK);Vertex V2=row

7、2, col, BLANK;AddVertex(VI);AddVertex(V2); return true;for(int row=0:row10:row+)if (mJfapErow coll=BLANK&mJfaprow col2=BLANK)if (LineX(m_Map, row, coll, col2)if (LineY(m_Map, row, rowl, col 1)&LineY (m_Map, row, row2, col2)Vertex VI二row, coll, BLANK);Vertex V2=row, col2, BLANK;AddVertex(VI);AddVerte

8、x(V2); return true;return false;4) 胜负判断算法当所有元素被消掉,进行胜负判断,遍历地图中所有元素的值,当所有元素都 为空时,表示获胜,游戏结束,否则继续游戏。实现代码如下:if () EnableWindow(TRUE); else exit(O);IsPlaying = false;else if () 0 & )Ki1ITimer(PLAY.TIMER.ID);int result;result = MessageBoxCT(好吧你赢啦_T (提示); if (result 二 IDOK) Ge t D1g11 em(IDC_BUTTON_START)-

9、EnableWindow(TRUE); else exit(O);5) 重排当进行游戏的过程中会出现无法再进行消子的情况,点击重排按钮就可以将剩 下子进行随机重排以便客户能够正常进行消子操作。首先在CGameLogic类中定义 一个DisOrderMap ()函数来对剩下的元素进行重排,实现代码如下: void CGameLogic:DisOrderMap(int m_Map1016)int nRows = 10;int nCols = 16;srand(int)t ime(NULL);int nVertexNum = nRows * nCols;for (int i = 0; igaip空要泌示13(B的基本模弍2综合分析和结论通过对位图的存储和对位图进行随机抽取就能够出现如图片所示的界面,并且 通过对图片的设置就能达到消子的效果。能实验连连看实验的基本功能,绘制主界 面地图,游戏界面地图,生成元素图片,元素图片的消除,连线的显示,计时,重 排,提示等功能都能实现。实验的LI的基本达到,基本完成了一个连连看的游戏。 第三部分:实验小结、收获与体会在本次实验开发过程中,曾遇到许多困难,比如在将存储结构改为类存储时、 进行三条直线消子判断、以及随机算法开局等,但是经过在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论