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

合集下载

数据结构实验指导书(新版)

数据结构实验指导书(新版)

《数据结构和算法》实验指导书实验及学时数分配序号实验名称学时数(小时)1 实验一线性表 42 实验二树和二叉树 23 实验三图 24 实验四查找 25 实验五内部排序 2合计12几点要求:一、上机前:认真预习相关实验内容,提前编写算法程序,上机时检查(未提前编写程序者,扣除平时成绩中实验相关分数)。

二、上机中:在Turbo C或VC6.0环境中,认真调试程序,记录调试过程中的问题、解决方法以及运行结果。

上机时签到;下机时验收签字。

三、下机后:按要求完成实验报告,并及时提交(实验后1周内)。

实验一线性表【实验目的】1、掌握用Turbo c上机调试线性表的基本方法;2、掌握线性表的基本操作,插入、删除、查找以及线性表合并等运算在顺序存储结构和链式存储结构上的运算;3、运用线性表解决线性结构问题。

【实验学时】4 学时【实验类型】设计型【实验内容】1、顺序表的插入、删除操作的实现;2、单链表的插入、删除操作的实现;3、两个线性表合并算法的实现。

(选做)【实验原理】1、当我们在线性表的顺序存储结构上的第i个位置上插入一个元素时,必须先将线性表中第i个元素之后的所有元素依次后移一个位置,以便腾出一个位置,再把新元素插入到该位置。

若是欲删除第i个元素时,也必须把第i个元素之后的所有元素前移一个位置;2、当我们在线性表的链式存储结构上的第i个位置上插入一个元素时,只需先确定第i个元素前一个元素位置,然后修改相应指针将新元素插入即可。

若是欲删除第i个元素时,也必须先确定第i个元素前一个元素位置,然后修改相应指针将该元素删除即可;3、详细原理请参考教材。

【实验步骤】一、用C语言编程实现建立一个顺序表,并在此表中插入一个元素和删除一个元素。

1、通过键盘读取元素建立线性表;(从键盘接受元素个数n以及n个整形数;按一定格式显示所建立的线性表)2、指定一个元素,在此元素之前插入一个新元素;(从键盘接受插入位置i,和要插入的元素值;实现插入;显示插入后的线性表)3、指定一个元素,删除此元素。

武汉理工大学

武汉理工大学
《汽车排放污染物控制实用技术》
《汽车排气净化与噪声控制》秦文新主编,人民交通出版社。
《空气动力性噪音与消声器》方丹群
《汽车发动机排气污染与控制》钱耀义
汽车市场理论与实践
31
0.55
王宇宁
《现代汽车营销》张国方主编,电子工业出版社2005年。
汽车维修工程
9
0.14
汽车维修工程
33
2.62
汽车营销与技术服务
工程招投标及合同管理
28
0.20
公路工程测试技术
30
0.39
王红
公路施工组织概预算
42
0.65
宋春节
《公路施工组织及概预算》张起森主编,人民交通出版社2000年4月。
管理会计
54
0.54
周盟农
《管理会计》余绪缨主编,辽宁人民出版社2004年版。
《管理会计》周盟农主编,中国财政经济出版社出版。
国际会计
工程结构
52
0.89
杨万庆
工程经济
37
0.56
李蕾
《工程经济学》黄有亮,徐向阳等编,东南大学出版社。
《工程经济与项目评价》赵国杰主编,天津大学出版社。
《建筑工程技术经济学》刘长滨主编,中国建筑工业出版社。
工程力学
40
0.92
佘建初
工程图学
4
0.25
钟华
工程项目管理
25
0.28
工程与建筑制图
37
0.75
电子商务案例分析
40
0.63
杨丽伟
《电子商务案例分析》司林胜,周宏主编,重庆大学出版社,2004年9月第一版。
《电子商务案例分析》才书训主编,东北大学出版社。

算法与数据结构实验报告

算法与数据结构实验报告

2015-2016学年第二学期《算法与数据结构》课程实验报告专业软件工程学生姓名成晓伟班级软件141学号1410075094实验学时16实验教师徐秀芳信息工程学院实验一单链表的基本操作一、实验目的1.熟悉C语言上机环境,进一步掌握C语言的基本结构及特点。

2.掌握线性表的各种物理存储表示和C语言实现。

3.掌握单链表的各种主要操作的C语言实现。

4.通过实验理解线性表中的单链表存储表示与实现。

二、主要仪器及耗材普通计算机三、实验内容与要求1、用C语言编写一个单链表基本操作测试程序。

(1)初始化单链表(2)创建单链表(3)求单链表长度(4)输出单链表中每一个结点元素(5)指定位置插入某个元素(6)查找第i个结点元素的值(7)查找值为e 的结点,并返回该结点指针(8)删除第i个结点(9)销毁单链表2、实验要求(1)程序中用户可以选择上述基本操作。

程序启动后,在屏幕上可以菜单形式显示不同功能,当按下不同数字后完成指定的功能,按其他键,则显示错误后重新选择。

(2)要求用线性表的顺序存储结构,带头结点的单链表存储结构分别实现。

(3)主函数实现对基本操作功能的调用。

3、主要代码(1)初始化单链表LinkList *InitList(){ //创建一个空链表,初始化线性表LinkList *L;L=(LinkList *)malloc(sizeof(LinkList));L->next=NULL;return L;}(2)创建单链表//头插法void CreateListF(LinkList *L){LinkList *s;int i=1,a=0;while(1){printf("输入第%d个元素(0表示终止)",i++);scanf("%d",&a);if(a==0)break;s=(LinkList *)malloc(sizeof(LinkList));s->data=a;s->next=L->next;L->next=s;}}(3)求链表长度int ListLength(LinkList *L){ //求链表长度int n=0;LinkList *p=L;while(p->next!=NULL){p=p->next;n++;}return(n);}(4)在指定位置插入元素int InsertList(LinkList *L,int i,ElemType e){LinkList *p=L,*s;int j=0;while(p!=NULL&&j<i-1){p=p->next;j++;} //找出要插入的位置的前一个位置if(p==NULL){return 0;}else{s=(LinkList *)malloc(sizeof(LinkList));s->data=e;s->next=p->next;p->next=s;return 1;}}(5)输出链表void DispList(LinkList *L){ //输出链表LinkList *p=L->next;while(p!=NULL){printf("%d",p->data);p=p->next;}printf("\n");}(6)查找链表中指定元素int GetElem(LinkList *L,int i){ //查找链表中指定元素LinkList *p=L;int j=0;while(j<i&&p!=NULL){j++;p=p->next;}if(p==NULL){return 0;}else{return p->data;}}(7)查找值是e的结点并返回该指针LinkList *LocateElem(LinkList *L,ElemType e){ //查找值是e的结点并返回该指针int i=1;LinkList *p=L;while(p!=NULL)if(p->data==e) return p;}if(p==NULL){return NULL;}}(8)删除元素int ListDelete(LinkList *L,int i,ElemType *e){ //删除元素LinkList *p=L,*q;int j=0;while(p!=NULL&&j<i-1){p=p->next;j++;} //找到要删除元素地址的前一个地址if(p==NULL){ return 0;} //不能删除else{q=p->next;*e=q->data;p->next=q->next;free(q); //删除成功return 1;}}(9)销毁链表void DestroyList(LinkList *L){//销毁链表LinkList *pre=L,*p=L->next;while(p!=NULL){free(pre);pre=p;p=pre->next;}free(pre);}main函数:int main(){LinkList *L;ElemType e;int i;L=InitList();CreateListF(L);DispList(L);printf("输入要查找的元素位置:\n");scanf("%d",&i);e=GetElem(L,i);printf("%d\n",e);printf("单链表长度为:%d\n",ListLength(L));printf("输入要删除元素的位置:");scanf("%d",&i);if (i>ListLength(L)){printf("超出范围重新输入");scanf("%d",&i);}if(ListDelete(L,i,&e)==0){printf("未找到元素\n");}else DispList(L);printf("输入插入元素的位置和值:");scanf("%d%d",&i,&e);InsertList(L,i,e);DispList(L);return 0;}4、测试数据及测试结果输入:23 56 12 28 45输出:四、注意事项1、存储结构定义和基本操作尽可能用头文件实现。

连连看思路算法及实现

连连看思路算法及实现

连连看思路算法及实现连连看是一款经典的益智游戏,其玩法简单,规则清晰,深受广大玩家喜爱。

在这个游戏中,我们需要通过消除相同的图案来获得高分。

而要想在游戏中取得好成绩,则需要掌握一定的思路算法和实现方法。

一、思路算法1.寻找相同图案在连连看游戏中,最基本的操作就是寻找相同的图案。

因此,在进行游戏时,我们需要将所有可消除的图案都找出来,并建立起它们之间的关联关系。

2.建立关联关系建立图案之间的关联关系是为了方便后续操作。

我们可以使用二维数组或者链表等数据结构来存储每个图案以及它们之间的连接情况。

对于每一个图案,我们可以将其坐标作为数组下标,并将其与周围相邻的图案进行连接。

3.寻找可消除路径在建立好每个图案之间的连接关系后,我们就可以开始寻找可消除路径了。

通常情况下,可消除路径有两种:直线型和弯曲型。

对于直线型路径,我们只需要判断两个图案之间是否存在直线连接即可;而对于弯曲型路径,则需要考虑路径中是否存在转折点。

4.消除图案当我们找到了可消除路径后,就可以进行图案的消除操作了。

在消除时,我们需要将所有经过的图案都从数据结构中删除,并将得分累加到总分中。

此外,在进行消除操作时,我们还需要考虑一些特殊情况,如图案之间存在障碍物等。

5.判断游戏结束当所有的图案都被消除或者无法再进行消除操作时,游戏就结束了。

在判断游戏是否结束时,我们可以检查当前数据结构中是否还有未被消除的图案。

如果存在未被消除的图案,则说明游戏还未结束;否则,游戏就已经结束了。

二、实现方法1.数据结构在实现连连看游戏时,我们通常使用二维数组或链表等数据结构来存储每个图案以及它们之间的连接关系。

对于二维数组来说,其优点是存储简单、操作方便;而链表则更加灵活,可以动态地添加和删除元素。

2.算法实现在实现连连看游戏时,我们需要编写一些算法来完成相应的功能。

例如,在寻找可消除路径时,我们可以使用广度优先搜索算法(BFS)或深度优先搜索算法(DFS)来遍历所有可能的路径,并找到其中符合要求的路径。

武汉理工大学数据结构与算法综合实验哈夫曼树

武汉理工大学数据结构与算法综合实验哈夫曼树

..
v
.. .
..
.
typedef char * pBuffer ; //其大小视原文件压缩后的大小
2.核心算法设计
(1)生成 Huffman 树和 Huffman 编码的算法 void Select(HTNode huffTree[],int m) {
int min,min2,i; min=min2=1000; for(i=0;i<m;i++)
b=b<<1; if(pBinStr[i]=='1') {
b=b|0x01; } } return b; } bool InitHead(const char *pFilename,HEAD &sHead) { char ch;
..
v
.. . .. .
..
.
.. .
//初始化文件 strcpy(sHead.type,"HUF"); sHead.length=0; for(int i=0;i<256;i++) {
..
v
.. .
..
.
.. .
二叉树的存储结构。使用结构体存储节点,使用数组存储树的节点,使用静态二叉链表方 式存储二叉树。
Huffman编码存储结构 struct HTNode
{ int weight;//权值 int parent; int lchild; int rchild; char zifu; string bianma;
..
.
.. .
学生学号
Xxx
实验课成绩
学生实验报告书
实验课程名称 开课学院
指导教师姓名 学生姓名

武汉理工大学专业实践报告书

武汉理工大学专业实践报告书

专业基础实践任务书学生姓名专业班级:指导教师:工作单位: 信息工程学院题目: 专业基础实践第套综合题初始条件:()提供实验室机房及其以上版本软件;()《教程》学习。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求):()选择一本《教程》,认真学习该教程的全部内容,包括基本使用方法、数组运算、矩阵运算、数学运算、程序设计、符号计算、图形绘制、设计等内容;()对该套综合题的道题,进行理论分析,针对具体设计部分的原理分析、建模、必要的推导和可行性分析,画出程序设计框图,编写程序代码(含注释),上机调试运行程序,记录实验结果(含计算结果和图表)。

()对实验结果进行分析和总结;()要求阅读相关参考文献不少于篇;()根据课程设计有关规范,按时、独立完成专业基础实践说明书。

时间安排:()布置课程设计任务,查阅资料,学习《教程》天;()进行编程设计天;()完成专业基础实践报告书天;()答辩天;指导教师签名: 年月日系主任(或责任教师)签名: 年月日目录摘要 (Ⅰ)第1章关于的简介的功能的典型应用第2章设计题目第3章设计内容题一题二题三题四题五题六题七题八题九题十第4章心得体会参考文献摘要(矩阵实验室)是的缩写,是一款由美国公司出品的商业数学软件。

是一种用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。

除了矩阵运算、绘制函数数据图像等常用功能外,还可以用来创建用户界面及与调用其它语言(包括,和)编写的程序。

尽管主要用于数值运算,但利用为数众多的附加工具箱()它也适合不同领域的应用,例如控制系统设计与分析、图像处理、信号处理与通讯、金融建模和分析等。

另外还有一个配套软件包,提供了一个可视化开发环境,常用于系统模拟、动态嵌入式系统开发等方面。

是一个包含大量计算算法的集合。

其拥有多个工程中要用到的数学运算函数,可以方便的实现用户所需的各种计算功能。

函数中所使用的算法都是科研和工程计算中的最新研究成果,而前经过了各种优化和容错处理。

《数据结构》实验1

《数据结构》实验1

《数据结构》实验1《数据结构与算法》第1次实验题目及要求实验一:线性表、队列与栈及其操作算法一、实验内容1.建立包括头结点和3个结点(4,2,1)的单链表,实现单链表建立、插入、删除和顺序查找等基本操作。

2.编程用一维数组来模拟一个栈,实现入栈和出栈操作,解决括号匹配问题。

3.编程用一维数组来模拟一个队列,实现入队列和出队列操作,解决杨辉三角问题。

二、实验要求1.掌握单链表的各种运算(表内结点的插入﹑删除,输出单链表等)。

2.掌握栈的结构和算法应用。

3.掌握队列的结构和算法应用。

三、实验报告要求实验报告使用教务处统一印制的《武汉理工大学学生实验报告书》,主要包括:1) 实验预习报告:主要包括下列内容:[1] 实验目的和意义。

[2] 问题描述:包括目标、任务、条件和约束的描述。

[3] 实验原理与方法:阐述所使用的方案的工作原理。

[4] 实验方案和技术路线,包括:数据结构设计和核心算法设计描述、主模块及功能模块层次结构、主要功能模块的输入、输出和算法框架描述、功能模块之间的调用与被调用关系等内容。

2) 实验过程记录:主要包括下列内容:[1] 上机实验的调试过程,包括编译时出现的错误信息、错误分析、解决方法和解决过程。

[2] 上机实验的测试过程,包括测试范例,测试结果,测试结果的分析与讨论,测试过程中遇到的主要问题及所采用的解决措施。

[3] 软件使用说明:主要描述如何使用你的程序以及使用时的主要事项。

[4] 实验输出结果。

3) 结果与讨论:主要包括下列内容:[1] 实验结果分析:对本次实验进行分析和评价。

[2] 小结、建议和体会:说明程序的改进思想、经验和体会。

[3] 思考题:回答教师布置的讨论题。

[4] 程序清单:根据教师的要求,以电子文档形式或者打印附件形式提交所设计的程序清单。

要求:1、用Visual C++ 上机编程,请预习VC++软件;2、本要求适用后面两个实验;3、请同学们做实验时把课本带来,需要借助书上的例子;4、不能在课堂上完成的,自己课后完成,然后将课后完成的结果运行给老师看。

2022年武昌理工学院计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案)

2022年武昌理工学院计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案)

2022年武昌理工学院计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案)一、选择题1、用有向无环图描述表达式(A+B)*((A+B)//A),至少需要顶点的数目为()。

A.5B.6C.8D.92、若需在O(nlog2n)的时间内完成对数组的排序,且要求排序是稳定的,则可选择的排序方法是()。

A.快速排序B.堆排序C.归并排序D.直接插入排序3、计算机算法指的是解决问题的步骤序列,它必须具备()三个特性。

A.可执行性、可移植性、可扩充性B.可执行性、确定性、有穷性C.确定性、有穷性、稳定性D.易读性、稳定性、安全性4、已知有向图G=(V,E),其中V={V1,V2,V3,V4,V5,V6,V7}, E={<V1,V2>,<V1,V3>,<V1,V4>,<V2,V5>,<V3,V5>, <V3,V6>,<V4,V6>,<V5,V7>,<V6,V7>},G的拓扑序列是()。

A.V1,V3,V4,V6,V2,V5,V7B.V1,V3,V2,V6,V4,V5,V7C.V1,V3,V5,V2,V6,V7D.V1,V2,V5,V3,V4,V6,V75、已知串S='aaab',其next数组值为()。

A.0123B.1123C.1231D.12116、已知关键字序列5,8,12,19,28,20,15,22是小根堆(最小堆),插入关键字3,调整后的小根堆是()。

A.3,5,12,8,28,20,15,22,19B.3,5,12,19,20,15,22,8,28C.3,8,12,5,20,15,22,28,19D.3,12,5,8,28,20,15,22,197、下列选项中,不能构成折半查找中关键字比较序列的是()。

A.500,200,450,180 B.500,450,200,180C.180,500,200,450 D.180,200,500,4508、设X是树T中的一个非根结点,B是T所对应的二叉树。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

.欢迎下载支持. 学生学号Xxx实验课成绩学生实验报告书实验课程名称数据结构与算法综合实验开课学院计算机科学与技术学院指导教师姓名xx学生姓名xx学生专业班级xxxx2015-- 2016学年第 2 学期实验课程名称:数据结构与算法综合实验②判断每一种花色的重复数能否被2整除,如果不能被二整除,则进行异常处理。

3)按从左到右,从上到下,将花色数填入游戏地图。

实现代码如下:int nRepeatNum = nRows * nCols / nPicNums;int count = 0;for (int i = 0; i<nPicNums; i++){for (int j = 0; j <nRepeatNum; j++){m_Map[count / nCols][count%nCols] = i;count++;}}4)由于生成的地图是规则的,因此,需要将地图中的花色打乱。

实现思路是:随机选择两个元素,将其值对调,重复若干次。

●消子判断的流程1)获得选中的两张图片的行号和列号。

2)判断选中的图片是否同色,不同色,则不能相消。

判断选中的图片是否为同一个图片,如果为不为同一个图片,则不能相消。

3)判断连通性,如以下三种情况均不满足,则结束。

①首先判断能否一条直线连通。

②如果不能一条直线连通,则判断能否两条直线连通。

③如果不能两条直线连通,则判断能否三条直线连通。

4)获得连通路径,绘制连线。

5)消除图片●一条直线消子算法①判断两个顶点,行是否相同,若相同,则判断两个顶点在X方向是否连通。

在CGameLogic类定义RowLink()函数事项X方向的连通判断。

依次判断在X方向两个顶点间每一个顶点,是否都为空,全为空表示可以连通,否则不能连通。

实现代码如下:bool CGameLogic::RowLink(int m_Map[10][15],Vertex v1,Vertex v2){//将两个点的列进行调整,使nCol1的值小于nCol2的值int row=v1.row;int col1=v1.col;int col2=v2.col;if(col1>col2){int temp=col1;col1=col2;col2=temp;}//判断两个顶点间是否有不为空的图片for(int i=col1+1;i<=col2;i++){if(i==col2){return true;}if(m_Map[row][i]!=BLANK){break;}}return false;②判断两个顶点,列是否相同,若相同,则判断两个顶点在Y方向是否连通。

在CGameLogic类定义ColLink()函数事项Y方向的连通判断。

依次判断在Y方向两个顶点间每一个顶点,是否都为空,全为空表示可以连通,否则不能连通。

实现代码如下:bool CGameLogic::ColLink(int m_Map[10][15],Vertex v1,Vertex v2){int row1=v1.row;int row2=v2.row;int col=v1.col;if(row1>row2){int temp=row1;row1=row2;row2=temp;}for(int i=row1+1;i<=row2;i++){if(i==row2){return true;}if(m_Map[i][col]!=BLANK){break;}}return false;}两条直线消子算法若一条直线无法连通,则判断两条直线的情况。

在CGameLogic类中定义OneCornerLink()函数判断两点是否能两条直线连通。

先判断两个顶点的X和Y方向的直线相交的两个顶点,是否为空。

若能构成两条指向连通,那么相交的顶点必须为空才行。

若顶点有一个为空,则判断该顶点与两个顶点,横向与纵向一条直线是否连通,若都连通,则表示两条直线消子成功,否则不能相消。

实现代码如下:bool CGameLogic::OneCornerLink(int m_Map[10][15],Vertex v1,Vertex v2) {int row1=v1.row;int col1=v1.col;int row2=v2.row;int col2=v2.col;//判断相交的顶点是否为空if(m_Map[row1][col2]==BLANK){//判断两个同行的顶点是否一条直线连通if(LineY(m_Map,row1,row2,col2)&&LineX(m_Map,row1,col1,col2)){Vertex V={row1,col2,BLANK};AddVertex(V);return true;}}if(m_Map[row2][col1]==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;}三条直线消子算法若两条直线无法连通,则判断三条直线的情况。

在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是否水平方向向上连通,如果连通,则V1到V2的连线即为关键路径。

如果不连通则接着扫描下一行,重复第二~四步。

2)判断三条直线连通采用枚举法判断三条直线连通,假设玩家选择两个顶点为V0和V3,判断三条直线连通的具体实现的具体步骤如下:①找到其中一条关键路径V1,V2。

②判断V1和V0是否连通。

③判断V2和V3是否连通。

④如果同时满足V1和V0连通,V2和V3连通,则V0和V3满足三条直线连通。

否则,在此关键路径下V0和V3不连通,找到下一条关键路径,重复2~4,直到判断出V0和V3是否连通。

3)保存连通路径使用栈来保存连通路径中的关键点:起始点V0,拐点V1,拐点V2和终点V3。

保存连通路径的步骤如下:①保存其实点V0。

②判断是否存在能够满足三条直线消子的关键路径V1、V2。

③如果存在,保存顶点V1、V2、V3,如果不存在,在删除起始点V0。

实现代码如下:bool CGameLogic::TwoCornerLink(int m_Map[10][16],Vertex v1,Vertex v2) {int row1=v1.row;int col1=v1.col;int row2=v2.row;int col2=v2.col;for(int col=0;col<16;col++){if(m_Map[row1][col]==BLANK&&m_Map[row2][col]==BLANK){if(LineY(m_Map,row1,row2,col)){if(LineX(m_Map,row1,col1,col)&&LineX(m_Map,row2,col2,col)){Vertex V1={row1,col,BLANK};Vertex V2={row2,col,BLANK};AddVertex(V1);AddVertex(V2);return true;}}}}for(int row=0;row<10;row++){if(m_Map[row][col1]==BLANK&&m_Map[row][col2]==BLANK){if(LineX(m_Map,row,col1,col2)){if(LineY(m_Map,row,row1,col1)&&LineY(m_Map,row,row2,col2)){Vertex V1={row,col1,BLANK};Vertex V2={row,col2,BLANK};AddVertex(V1);AddVertex(V2);return true;}}}}return false;}4)胜负判断算法当所有元素被消掉,进行胜负判断,遍历地图中所有元素的值,当所有元素都为空时,表示获胜,游戏结束,否则继续游戏。

实现代码如下:if (m_GameProgress.GetPos() <= 0 && !cgc.IsBlank(cgc.m_Map)) { KillTimer(PLAY_TIMER_ID);int result = MessageBox(_T("很遗憾,时间到了!,是否重新开始游戏?"), _T("提示"));if (result = IDOK) {GetDlgItem(IDC_BUTTON_START)->EnableWindow(TRUE);}else {exit(0);}IsPlaying = false;}else if (m_GameProgress.GetPos() > 0 && cgc.IsBlank(cgc.m_Map)) {KillTimer(PLAY_TIMER_ID);int result;result = MessageBox(_T("获胜!是否重新开始游戏?"), _T("提示"));if (result = IDOK) {GetDlgItem(IDC_BUTTON_START)->EnableWindow(TRUE);}else {exit(0);}}5)重排当进行游戏的过程中会出现无法再进行消子的情况,点击重排按钮就可以将剩下子进行随机重排以便客户能够正常进行消子操作。

首先在CGameLogic类中定义一个DisOrderMap()函数来对剩下的元素进行重排,实现代码如下:void CGameLogic::DisOrderMap(int m_Map[10][16]){int nRows = 10;int nCols = 16;srand((int)time(NULL));int nVertexNum = nRows * nCols;for (int i = 0; i<nVertexNum; i++){//随机获得两个坐标int nIndex1 = rand() % nVertexNum;int nIndex2 = rand() % nVertexNum;int nTemp = m_Map[nIndex1 / nCols][nIndex1 % nCols];m_Map[nIndex1 / nCols][nIndex1 % nCols] = m_Map[nIndex2 /nCols][nIndex2 % nCols];m_Map[nIndex2 / nCols][nIndex2 % nCols] = nTemp;}}然后在CGameControl类中定义一个DisOrder()函数来调用DisOrderMap()函数,最后再CGameDlg类的OnBnClickedButtonReset()函数中调用DisOrder()函数,实现代码如下:void CGameDlg::OnBnClickedButtonReset(){// TODO: 在此添加控件通知处理程序代码m_dcMem.BitBlt(0, 0, 800, 600, &m_dcBG, 0, 0, SRCCOPY);InvalidateRect(FALSE);m_gameControl.DisOrder();UpDateMap();}6)帮助在原有的基础上重新插入一个对话框,重新定义一个CHelpDialog类,在这个类中将写有相关游戏说明的图片加载进界面中去,加上滚动条。

相关文档
最新文档