《数据结构课程设计》走迷宫游戏

合集下载

迷宫游戏数据结构课程设计

迷宫游戏数据结构课程设计

迷宫游戏数据结构课程设计
1、简介
本文档旨在设计一个迷宫游戏的数据结构课程项目,通过使用合适的数据结构和算法,实现一个能够自动和解决迷宫的程序。

本项目将使用C++语言来实现。

2、功能需求
本项目的主要功能如下:
- 自动一个迷宫地图
- 实现玩家在迷宫地图中的移动
- 实现迷宫的解决算法
3、技术方案
本项目将采用以下技术方案来实现功能:
3.1 迷宫算法
为了一个随机的迷宫地图,我们将采用深度优先搜索(DFS)算法或者随机Prim算法来迷宫。

这些算法可以保证的迷宫是连通的且没有死胡同。

3.2 玩家移动
玩家将使用键盘输入来控制移动,通过获取键盘输入来实现玩
家在迷宫中的移动。

游戏将使用图形界面来呈现迷宫和玩家的位置。

3.3 迷宫解决算法
迷宫解决算法将使用广度优先搜索(BFS)算法或者深度优先搜
索(DFS)算法来搜索迷宫的路径。

该算法将从起点出发,逐步搜索
迷宫的每个可达点,直到找到终点或者遍历完整个迷宫。

4、开发计划
本项目的开发计划如下:
1、确定项目需求和技术方案 - 2天
2、实现迷宫算法 - 3天
3、实现玩家移动功能 - 2天
4、实现迷宫解决算法 - 3天
5、创建图形界面 - 2天
6、进行测试和调试 - 3天
7、完善文档和准备演示 - 2天
5、附件
本文档没有附件。

6、法律名词及注释
本文档没有涉及任何法律名词及注释。

数据结构课程设计(迷宫问题)

数据结构课程设计(迷宫问题)

课程设计报告课程名称数据结构课程设计课题名称迷宫问题专业班级学号姓名指导教师2012年6月9日课程设计任务书课程名称数据结构课程设计课题迷宫问题专业班级学生姓名学号指导老师审批任务书下达日期:2012年6月9日任务完成日期:2012年6月16日一、设计内容与设计要求1.设计内容:1)问题描述以一个M*N的长方阵表示迷宫,0和1分别表示迷宫中的通路和墙壁。

设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出米有通路的结论。

2)基本要求a.实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。

求得的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走到下一个坐标的方向。

b.编写递归形式的算法,求得迷宫中所有可能的通路。

3)测试数据迷宫的测试数据如下:左上角(1,1)为入口,右下角(8,9)为出口。

0 0 1 0 0 0 1 00 0 1 0 0 0 1 00 0 0 0 1 1 0 10 1 1 1 0 0 1 00 0 0 1 0 0 0 00 1 0 0 0 1 0 10 1 1 1 1 0 0 11 1 0 0 0 1 0 11 1 0 0 0 0 0 04计算机解迷宫通常用的是“穷举求解”方法,即从入口出发,顺着某一个方向进行探索,若能走通,则继续往前进;否则,沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。

假如所有可能的通路都探索到而未能到达出口,则设定的迷宫没有通路。

可以二维数组存储迷宫数据,通常设定入口点的下标为(1,1),出口点的下标为(m,n)。

为处理方便起见,可在迷宫的四周加一圈障碍。

对于迷宫中任一位置,均可约定有东、南、西、北四个方向可通。

2.设计要求:●课程设计报告规范1)需求分析a.程序的功能。

b.输入输出的要求。

2)概要设计a.程序由哪些模块组成以及模块之间的层次结构、各模块的调用关系;每个模块的功能。

课程设计-走迷宫---

课程设计-走迷宫---

《数据结构》课程设计报告(走迷宫)学院:湖南工学院班级学号:姓名:指导教师:完成日期:2011年1月3号目录1.需求分析 (3)2.程序的详细设计 (3)3.调试分析 (8)4.主函数 (9)5.测试 (10)6.心得体会 (12)7.附录 (13)1.需求分析程序开始运行时显示一个迷宫地图,迷宫中央有一只老鼠,迷宫的右下方有一个粮仓。

游戏的任务是使老鼠走到粮仓处。

要求:1)迷宫的墙足够结实,老鼠不能穿墙而过;2)正确检测结果,若老鼠在能走到粮仓处,提示成功,否则提示失败;3)老鼠形象可辨认,可用键盘操纵老鼠上下左右移动;2.程序的详细设计首先,确定迷宫的存储结构,说明位置在迷宫中的行坐标和列坐标。

typedef int Status;typedef struct{int r,c; /*迷宫中位置的坐标*/}PosType;typedef struct{int m,n;char arr[RANGE][RANGE]; /*用二维数组表示迷宫*/}MazeType;第二,确定放入栈中的元素的存储结构,表明通道块在路径上的“序号”,通道块的坐标位置以及下一步要走的方向。

typedef int directiveType;typedef struct{int step;PosType seat; /*当前位置在迷宫中的坐标*/directiveType di; /*从当前位置走到下一位置的方向*/}ElemType;第三,确定栈的存储结构。

typedef struct NodeType{ElemType data;struct NodeType *next;}NodeType,*LinkType;typedef struct{LinkType top; /*链栈的顶点定义*/int size;}Stack;void InitStack(Stack &S) /*构建一个空栈*/{S.top=NULL;S.size=0;}Status MakeNode(LinkType &p,ElemType e){p=(NodeType *)malloc(sizeof(NodeType));if(!p)return FALSE; /*存储分配失败*/p->data=e;p->next=NULL;return TRUE;}定义在什么情况下要入栈Status Push(Stack &S,ElemType e){LinkType p;if(MakeNode(p,e)){p->next=S.top;S.top=p;S.size++;return TRUE;}return FALSE;}判断栈是否为空Status StackEmpty(Stack S) /*若栈为空栈,则返回TRUE,否则返回FALSE*/{if(S.top==NULL)return TRUE;return FALSE;}定义在什么情况下要出栈Status Pop(Stack &S,ElemType &e){LinkType p;if(StackEmpty(S))return FALSE;else{p=S.top;S.top=S.top->next;e=p->data;S.size--;free(p);return TRUE;}}定义什么情况下迷宫可以走Status pass(MazeType maze,PosType curpos) {int m,n;m=curpos.r;n=curpos.c;if(maze.arr[m][n]==' ')return TRUE;return FALSE;}定义什么情况下已经走出了迷宫Status Same(PosType curpos,PosType end){if(curpos.r==end.r && curpos.c==end.c)return TRUE;return FALSE;}定义走通的位置要用*标记void FootPrint(MazeType &maze,PosType curpos) {int m,n;m=curpos.r;n=curpos.c;maze.arr[m][n]='*';}定义在探索过程中老鼠走的方向关系PosType NextPos(PosType curpos,int di){switch(di){case 1:curpos.c++;break;case 2:curpos.r++;break;case 3:curpos.c--;break;case 4:curpos.r--;break;}return curpos;}定义走过但没有走通位置要用@标记void MarkPrint(MazeType &maze,PosType p){maze.arr[p.r][p.c]='@';}void PrintMaze(MazeType ma){int i,j;printf("\n");for(i=0;i<ma.m;i++){printf("\t");for(j=0;j<ma.n;j++){printf("%c ",ma.arr[i][j]);}printf("\n");}printf("\n");}将数组转化为迷宫void InitMaze(MazeType &maze,int a[M][N],int row,int col) {int i,j;maze.m=row;maze.n=col;for(i=0;i<row;i++)for(j=0;j<col;j++){if(a[i][j]==0)maze.arr[i][j]=' ';elsemaze.arr[i][j]='#';}}探索迷宫Status MazePath(MazeType &maze,PosType start,PosType end) {Stack s;int curstep=1; //探索第一步Status found=FALSE;ElemType e;PosType curpos=start; //设定当前位置为入口InitStack(s);do{if(pass(maze,curpos)) //当前位置可以通过,即是未曾走过的通道块{FootPrint(maze,curpos); //留下足迹{e.step=curstep;e.seat=curpos;e.di=1;}Push(s,e); //加入路径if(Same(curpos,end))// 到达终点{found=TRUE;}else{curpos=NextPos(curpos,1); //下一位置是当前位置的北邻curstep++; //探索下一步}}else //当前位置不能通过if(!StackEmpty(s)){Pop(s,e);while((e.di==4) && !StackEmpty(s)){MarkPrint(maze,e.seat); //留下不能通过的标记,并退回一步Pop(s,e);curstep--;}if(e.di<4){e.di++;Push(s,e); //探索下一方向curpos=NextPos(e.seat,e.di); //设定当前位置是该新方向上的相邻块}}}while(!StackEmpty(s) && !found);return found;}void Print(int maze[][N]){int i,j;printf("表示迷宫的数组\n");for(i=0;i<M;i++){printf("\t");for(j=0;j<N;j++){printf("%d ",maze[i][j]);}printf("\n");}printf("\n");}3.程序的实现标记入口位置(说明此位置已试探),把入口压入栈中栈非空栈非空取栈顶元素初始试探方向存在试探方向确定试探位置的坐标试探位置是否为迷宫出口打印路径上每个位置是否为通道标记该位置换个方向试探返回该位置及方向进栈前进到下一位置C++ 方向向东r++ 方向向南C-- 方向向西r-- 方向向北r--c++c-- 位置(c,r)r++4.主函数设计void main(){int maze[M][N]={ 输出迷宫数组1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,1,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,1,0,1,1,1,0,0,0,1,1,1,1,0,0,0,1,0,1,1,0,1,1,1,1,0,0,1,0,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1};MazeType L;PosType start,end;Print(maze);InitMaze(L,maze,M,N);start.r=2; 定义迷宫入口和出口 start.c=4;end.r=6;end.c=9;printf("由数组转化出的迷宫");PrintMaze(L);if(MazePath(L,start,end))printf("迷宫的路径,用*表示");elseprintf("此迷宫没有通路!");PrintMaze(L);}5.测试第一次测试start.r=2; start.c=4; end.r=6;end.c=9;第二个测试start.r=1; start.c=1; end.r=6;end.c=96.心得体会数据结构是在整个计算机科学与技术领域上广泛被使用的术语。

数据结构课程设计报告——可视化走迷宫游戏

数据结构课程设计报告——可视化走迷宫游戏

可编辑修改西安建筑科技大学 课程设计(论文)题 目: 院 (系): 专业班级: 姓 名: 学 号: 指导教师:可视化走迷宫游戏2011 年 9 月 15 日欢迎下载可编辑修改西安建筑科技大学课程设计(论文)任务书专业班级: 计算机901 学生姓名: 指导教师(签名):一、课程设计(论文)题目走迷宫游戏:程序开始运行时显示一个迷宫地图,迷宫中央有一只老鼠,迷宫的 右下方有一个粮仓。

游戏的任务是使用键盘上的方向键操纵老鼠在规定的时间内走到 粮仓处。

二、本次课程设计(论文)应达到的目的数据结构是实践性很强的课程。

课程设计是加强学生实践能力的一个强有力手 段。

课程设计要求学生在完成程序设计的同时能够写出比较规范的设计报告。

严格实 施课程设计这一环节,对于学生基本程序设计素养的培养和软件工作者工作作风的训 练,将起到显著的促进作用。

本题目要达到目的:熟练掌握最短路径的算法设计。

三、本次课程设计(论文)任务的主要内容和要求(包括原始数据、技术 参数、设计要求等)1、 老鼠形象可辨认,可用键盘操纵老鼠上下左右移动; 2、 迷宫的墙足够结实,老鼠不能穿墙而过; 3、 正确检测结果,若老鼠在规定时间内走到粮仓处,提示成功,否则提示失败; 4、 添加编辑迷宫功能,可修改当前迷宫,修改内容:墙变路、路变墙; 找出走出迷宫的所有路径,以及最短路径。

四、应收集的资料及主要参考文献:由于本课程没有安排“课内上机”学时,因此,在课程设计之前必须自己已经上 机练习了“线性表”的基本操作。

参考文献:1. 本年级使用的教材:数据结构与算法分析(C++版)(第二版)影印版 2005.72. 数据结构与算法,科学出版社,2005.08;赵文静 祁飞等编著 3. 数据结构-C++语言描述,西安交通大学出版社,1999.01,赵文静编著 4. 《Visual C++编程实例》(任意一本此类书籍)五、审核批准意见教研室主任(签字)欢迎下载可编辑修改摘要本设计是为了实现一个可视化迷宫,以及利用最短路径算法 寻找迷宫的出路以及将最短路径打印在屏幕上,并且限制小老鼠 不能穿越墙,只能在路径上移动。

数据结构课程设计之迷宫游戏

数据结构课程设计之迷宫游戏

数据结构课程设计之迷宫游戏##大学数据结构课程设计报告题目: 走迷宫游戏院(系): 计算机工程学院学生姓名:班级: 学号:起迄日期: 2011-6-21 至 2011-6-30 指导教师:2010—2011年度第 2 学期一、需求分析1 问题描述走迷宫游戏程序开始运行时显示一个迷宫地图,迷宫中央有一只老鼠,迷宫的右下方有一个粮仓。

游戏的任务是使用键盘上的方向键操纵老鼠在规定的时间内走到粮仓处。

2 基本功能1) 老鼠形象可辨认,可用键盘操纵老鼠上下左右移动;2) 迷宫的墙足够结实,老鼠不能穿墙而过;3) 正确检测结果,若老鼠在规定时间内走到粮仓处,提示成功,否则提示失败;4) 添加编辑迷宫功能,可修改当前迷宫,修改内容:墙变路、路变墙;5) 找出走出迷宫的所有路径,以及最短路径。

利用序列化功能实现迷宫地图文件的存盘和读出等功能 3 输入输出输入为字符型:1, 2, 3 分别实现功能选择w(上),s(下),a(左),d(右)控制迷宫的走向y表示确定 n表示否定二、概要设计1. 设计思路:实现走迷宫game()对迷宫地图进行修改实现自动搜路change()Mathpath()对搜寻的路径进行输对修改的地图数组进行保存出edit()print()对修改的地图进行保存savemap()2.数据结构设计:采用的是栈来存储数据,进栈实际是在栈中插入三元组,出栈则只数组的个数进行操作抽象数据类型线性表的定义如下:ADT SqStack{数据对象:D={a| a ?SElemType,i=1,2,3……,n,n?0} ii数据关系:R1={<a,a>| a,a ?D,i=1,2,3,……,n} i-1ii-1i基本操作:SqStack *InitStack()操作结果:创建一个空栈void Push(SqStack *S,SElemType data)初始条件:栈S已存在操作结果:插入一个元素,并且使数据个数加一(top++)void Pop(SqStack *S)初始条件:栈S已存在。

数据结构课程设计报告-迷宫求解(递归与非递归)

数据结构课程设计报告-迷宫求解(递归与非递归)

《数据结构》课程设计迷宫求解班级:学号:姓名:指导老师:迷宫求解1、问题描述输入一个任意大小的迷宫数据,用递归和非递归两种方法求出一条走出迷宫的路径,并将路径输出。

2、设计思路从入口出发,按某一方向向前探索,若能走通并且未走过,即某处可以到达,则到达新点,否则试探下一个方向;若所有的方向均没有通路,则沿原路返回前一点,换下一个方向再继续试探,直到找到一条通路,或无路可走又返回入口点。

在求解过程中,为了保证在到达某一点后不能向前继续行走(无路)时,能正确返回前一点以便继续从下一个方向向前试探,则需要用一个栈(递归不需要)保存所能够到达的每一点的下标及从该点前进的方向。

设迷宫为m行n列,利用maze[m][n]来表示一个迷宫,maze[i][j]=0或1;其中:0表示通路,1表示不通,当从某点向下试探时,中间点有四个方向可以试探,而四个角点有两个方向,其他边缘点有三个方向,为使问题简单化,用maze[m+2][n+2]来表示迷宫,而迷宫的四周的值全部为1,这样做使问题简单了,每个点的试探方向全部为4,不用再判断当前点的试探方向有几个。

3、数据结构设计在上述表示迷宫的情况下,每个点有4个方向去试探,如当前点的坐标(x,y),与其相邻的4个点的坐标都可根据与该点的相邻方位而得到。

因为出口在(m,n),因此试探顺序规定为:从当前位置向前试探的方向为从正东沿顺时针方向进行。

为了简化问题,方便求出新点的坐标,将从正东开始沿顺时针进行的4个方向的坐标增量放在一个结构数组move[4]中,在move数组中,每个元素有两个域组成,x为横坐标增量,y为纵坐标增量。

这样对move设计会很方便地求出从某点(x,y)按某一方向v(0<=v<=3)到达的新点(i,j)的坐标:i=x+move[v].x;j=y+move[v].y;当到达了某点而无路可走时需返回前一点,再从前一点开始向下一个方向继续试探。

因此,压入栈中的不仅是顺序到达的各点的坐标,而且还要有从前一点到达本点的方向。

数据结构课程设计之迷宫游戏

数据结构课程设计之迷宫游戏

数据结构课程设计之迷宫游戏##大学数据结构课程设计报告题目: 走迷宫游戏院(系): 计算机工程学院学生姓名:班级: 学号:起迄日期: 2011-6-21 至 2011-6-30 指导教师:2010—2011年度第 2 学期一、需求分析1 问题描述走迷宫游戏程序开始运行时显示一个迷宫地图,迷宫中央有一只老鼠,迷宫的右下方有一个粮仓。

游戏的任务是使用键盘上的方向键操纵老鼠在规定的时间内走到粮仓处。

2 基本功能1) 老鼠形象可辨认,可用键盘操纵老鼠上下左右移动;2) 迷宫的墙足够结实,老鼠不能穿墙而过;3) 正确检测结果,若老鼠在规定时间内走到粮仓处,提示成功,否则提示失败;4) 添加编辑迷宫功能,可修改当前迷宫,修改内容:墙变路、路变墙;5) 找出走出迷宫的所有路径,以及最短路径。

利用序列化功能实现迷宫地图文件的存盘和读出等功能 3 输入输出输入为字符型:1, 2, 3 分别实现功能选择w(上),s(下),a(左),d(右)控制迷宫的走向y表示确定 n表示否定二、概要设计1. 设计思路:实现走迷宫game()对迷宫地图进行修改实现自动搜路change()Mathpath()对搜寻的路径进行输对修改的地图数组进行保存出edit()print()对修改的地图进行保存savemap()2.数据结构设计:采用的是栈来存储数据,进栈实际是在栈中插入三元组,出栈则只数组的个数进行操作抽象数据类型线性表的定义如下:ADT SqStack{数据对象:D={a| a ?SElemType,i=1,2,3……,n,n?0} ii数据关系:R1={<a,a>| a,a ?D,i=1,2,3,……,n} i-1ii-1i基本操作:SqStack *InitStack()操作结果:创建一个空栈void Push(SqStack *S,SElemType data)初始条件:栈S已存在操作结果:插入一个元素,并且使数据个数加一(top++)void Pop(SqStack *S)初始条件:栈S已存在。

数据结构课程设计--求解迷宫问题

数据结构课程设计--求解迷宫问题

摘要设计一个简单迷宫程序,从入口出发找到一条通路到达出口。

编制程序给出一条通过迷宫的路径或报告一个“无法通过”的信息。

首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。

用“穷举求解”方法,即从入口出发,顺着某一个方向进行探索,若能走通,则继续往前进;否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。

假如所有可能的通路都探索到而未能到达出口,则所设定的迷宫没有通路。

可以用二维数组存储迷宫数据,通常设定入口点的下标为(1,1),出口点的下标为(n,n)。

为处理方便起见,可在迷宫的四周加一障碍。

对于迷宫任一位置,均可约定有东、南、西、北四个方向可通。

关键词:迷宫;栈;链表;二维数组目录1 问题描述 (1)2 需求分析 (1)3 概要设计 (1)3.1抽象数据类型定义 (1)3.2模块划分 (2)4 详细设计 (2)4.1数据类型的定义 (2)4.2主要模块的算法描述 (3)5 测试分析 (6)6 课程设计总结 (7)参考文献 (7)附录(源程序清单) (8)1 问题描述迷宫是一个M行N列的0-1矩阵,其中0表示无障碍,1表示有障碍。

设入口为(1,1)出口为(M,N)每次移动只能从一个无障碍的单元移到其周围8个方向上任一无障碍的单元,编制程序给出一条通过迷宫的路径或报告一个“无法通过”的信息。

2 需求分析(1)首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。

求得的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。

否则报告一个无法通过的信息。

(2)建立InitStack函数,用于构造一个空栈。

(3)建立DestroyStack函数,用于销毁栈。

(4)建立Pop函数,用于删除栈顶元素,返回栈顶元素的值。

(5)建立Push函数,用于插入新的栈顶元素。

(6)建立NextPos函数,用于定位下一个位置。

数据结构迷宫问题课程设计

数据结构迷宫问题课程设计

数据结构课程设计报告设计题目:迷宫问题数据结构课程设计_班级:计科 152学号:姓名:徐昌港南京农业大学计算机系数据结构课程设计报告内容一.课程设计题目迷宫问题以一个 m*n 的长方阵表示迷宫, 0 和 1 分别表示迷宫中的通路和障碍。

设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。

要求:首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。

求得的通路以三元组(i,j,d)的形式输出。

其中:(i,j)指示迷宫中的一个坐标, d 表示走到下一坐标的方向。

二.算法设计思想1.需求分析(1)迷宫数据用一个二维数组int maze[row][col] 来存储,在定义了迷宫的行列数后,用两个 for 循环来录入迷宫数据,并在迷宫周围加墙壁。

(2)迷宫的入口位置和出口位置可以由用户自己决定。

2.概要设计( 1)主程序模块:void main(){int maze[row][col];struct mark start,end;细设计( 1)坐标位置类型struct mark{int a,b;换个方向搜索是( 1)built本程maze initstack初始化链栈,定义方向二是否维数组并将push入口stack,出口主程序main()坐标移动此坐标此此坐栈坐标是标周是否信围否为息有为空是无障碍入出栈口栈逆置并输出否路线信息入栈当前坐标周围是否有结束户使用说明pop 是stack_empty 删除栈中迷否宫无出路序的运行环境此步信息为debug运行环境,执行文件为:.cpp;方向可以探索( 2)用 VC++运行文件后出现以下窗口:点击运行程序( 3)出现以下窗口后输入迷宫的行列数,回车;再继续输入迷宫的数据,1表示障碍,0 表示通路;再输入入口坐标和出口坐标,回车。

就可以显示出迷宫路径。

2.测试结果(1)输入行列数: 5,5输入迷宫数据为:出口位置: 1,1出口位置: 5,500011 11011 00010 01100 00000(2)输入行列数: 4,9输入迷宫数据为: 000000100010001000001110011001110100输入入口坐标: 1,1输入出口坐标: 4,9(3)输入行列数: 9,8输入迷宫数据为: 001000100010001000001101011100100001000001000101011110011100010111000000输入入口坐标: 1,1输入出口坐标: 9,83.调试分析(1)在刚开始写完代码后,运行发现程序只能运行简单的一条直线的迷宫,在运行复杂的迷宫时,不会碰到死路(周围没有可探索的道路)就删除坐标往回到前坐标换方向探索。

走迷宫-实验报告

走迷宫-实验报告

数据结构课程设计报告题目:迷宫问题院系名称:专业名称:班级:学号:学生姓名:指导教师:时间:一、课程设计目的1.熟悉数据结构中的各种存储结构,并且能够熟练的运用各种存储结构。

2.利用所学的内容完成迷宫路径的寻找,不可使用递归。

二、课程设计内容1.迷宫存储在文件中,通过输入文件名(*.in),创建相应的迷宫。

迷宫文件的格式自己设计。

2.最终的解要求在屏幕上显示并存入文件(*.out)中。

解的显示方式以及解文件的格式自己设计。

3.如果有多条,求得路径长度最短的一条路径。

三、需求分析1.本程序可以由使用者输入迷宫,并且在迷宫有路径时将迷宫及最短路径存储在文件中。

也可实现系统中存储的迷宫(系统中必须有迷宫,否则程序无法进行)并存储最短路径。

2.可以找出每一个迷宫的最短路径,并且要判断迷宫是否有解。

3.若迷宫有解,输出最短路径并保存。

若迷宫无解则终止程序。

四、概要设计1.系统结构图main():主函数。

readhead(struct Node * head):从文件中读出系统迷宫的信息。

out():输出系统迷宫的信息。

read1():载入系统迷宫最短路径。

savejie():将迷宫的最短路径保存在文件中。

PD():判断迷宫是否有路径,若有路径进行下一步,若无路径则终止程序。

savehead():保存迷宫文件及解文件的信息。

PrintMaze():用户输入迷宫程序,并且在有路径时保存迷宫(用户自行命名文件名)并命名保存此迷宫最短路径的文件名。

read():载入系统迷宫。

Change():标记最短路径,以便保存于显示。

MazePath(),save():寻找迷宫最短路径。

Print2():用于输出找到最短路径时的迷宫及路径。

Print():用于输出找路径前的迷宫。

PosType NextPoint():方向判断函数。

五、详细设计及运行结果定义链表,用于存放迷宫信息。

typedef struct Node{char name[20]; /迷宫文件名/int m; /行数/int n; /列数/char jie[20]; /最短路径文件名/struct Node * next;}Node;typedef struct{int r,c; /*迷宫中位置的坐标*/}PosType;typedef struct{int m,n;char arr[SIZE][SIZE]; /*用二维数组表示迷宫*/}MazeType;确定放入栈中的元素的存储结构,表明通道块在路径上的“序号”,通道块的坐标位置以及下一步要走的方向。

数据结构课程设计-走迷宫

数据结构课程设计-走迷宫

数据结构课程设计报告设计题目:走迷宫游戏专业:计算机科技院系:计算机学院姓名: xxxxxxxx学号: xxxxxxxxx时间:2013年10月10日目录一、课程设计的目的………………………………………………………………. .2二、需求分析 (2)三、课程设计报告内容 (3)1.概要设计 (3)2.详细设计 (4)3.调试分析 (9)4.用户手册 (9)5.测试结果 (10)6.程序清单 (11)四、小结 (16)五、参考文献 (16)一、课程设计的目的(1) 熟练使用 C 语言编写程序,解决实际问题;(2) 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;(3) 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;(4) 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;二、需求分析程序开始运行时显示一个迷宫地图,迷宫中央有一只老鼠,迷宫的右下方有一个粮仓。

游戏的任务是使用键盘上的方向键操纵老鼠在规定的时间内走到粮仓处。

要求:①老鼠形象可辨认,可用键盘操纵老鼠上下左右移动;②迷宫的墙足够结实,老鼠不能穿墙而过;③正确检测结果,若老鼠在规定时间内走到粮仓处,提示成功,否则提示失败;④添加编辑迷宫功能,可修改当前迷宫,修改内容:墙变路、路变墙;⑤找出走出迷宫的所有路径,以及最短路径。

利用序列化功能实现迷宫地图文件的存盘和读出等功能三、实验报告内容1 概要设计(1)具体要求①构建一个二维数组maze[M+2][N+2]用于存储迷宫矩阵②自动或手动生成迷宫,即为二维数组maze[M+2][N+2]赋值③构建一个队列用于存储迷宫路径④建立迷宫节点struct point,用于存储迷宫中每个节点的访问情况⑤实现搜索算法⑥屏幕上显示操作菜单(2)本程序包含10个函数:①主函数 main()②手动生成迷宫函数 shoudong_maze()③自动生成迷宫函数 zidong_maze()④将迷宫打印成图形 print_maze()⑤打印迷宫路径 (若存在路径) result_maze()⑥入队 enqueue()⑦出队 dequeue()⑧判断队列是否为空 is_empty()⑨访问节点 visit()⑩搜索迷宫路径 mgpath()2 详细设计实现概要设计中定义的所有数据类型及操作的伪代码算法节点类型和指针类型迷宫矩阵类型:int maze[M+2][N+2];为方便操作使其为全局变量迷宫中节点类型及队列类型:struct point{introw,col,predecessor} que[512]迷宫的操作(1)手动生成迷宫void shoudong_maze(int m,int n){定义i,j为循环变量for(i<=m)for(j<=n)输入maze[i][j]的值}(2)自动生成迷宫void zidong_maze(int m,int n){定义i,j为循环变量for(i<=m)for(j<=n)maze[i][j]=rand()%2 //由于rand()产生的随机数是从0到RAND_MAX,RAND_MAX是定义在stdlib.h中的,其值至少为32767),要产生从X到Y的数,只需要这样写:k=rand()%(Y-X+1)+X;}(3)打印迷宫图形void print_maze(int m,int n){用i,j循环变量,将maze[i][j]输出□、■} (4)打印迷宫路径void result_maze(int m,int n){用i,j循环变量,将maze[i][j]输出□、■、☆}搜索迷宫路径①迷宫中队列入队操作void enqueue(struct point p){将p放入队尾,tail++}②迷宫中队列出队操作struct point dequeue(struct point p){head++,返回que[head-1]}③判断队列是否为空int is_empty(){返回head==tail的值,当队列为空时,返回0}④访问迷宫矩阵中节点void visit(int row,int col,int maze[41][41]){建立新的队列节点visit_point,将其值分别赋为row,col,head-1,maze[row][col]=2,表示该节点以被访问过;调用enqueue(visit_point),将该节点入队}⑤路径求解void mgpath(int maze[41][41],int m,int n){先定义入口节点为struct point p={0,0,-1},从maze[0][0]开始访问。

数据结构迷宫课程设计

数据结构迷宫课程设计

《数据结构》课程设计报告课题名称:__迷宫问题_______ _____班级:_____计算机3班_____________学号:____20090805344__________姓名:______于韬____________指导老师:________刘杰__________/view/55936fbffd0a79563c1e7250.html2010年6月一、课题名称:迷宫问题二、课题设计的基本思想,原理和算法描述所谓求迷宫问题,就是在一个指定的迷宫中求出从入口到出口的路径,在求解时,我们先从入口出发,顺某一方向向前试探,若能走通,则继续往前走,否则,沿原路退回,换一个方向再继续试探,直至所有可能的通路都试探完为止。

三、源程序及注释#include <stdio.h>#define Maxsize 500#define M 4#define N 4struct{int i,j,di; //当前方块行号、列号、下一可走相邻方位的方位号}qu[Maxsize],path[Maxsize]; //定义栈、最小路径存放int top=-1; //初始化栈顶指针int mgpath(int xi,int yi,int xe,int ye,int mg[M+2][N+2]) //求解路径为(xi.yi)->(xe,ye){ //此处放置前面顺序栈的定义int num=0;int i,j,k,di,find,minlenth=Maxsize;top++; //初始化栈qu[top].i=xi;qu[top].j=yi; //取栈顶方块qu[top].di=-1; //找到了出口,输出路径mg[1][1]=-1;printf("迷宫路径如下:\n");while(top>-1)//栈不为空时循环{i=qu[top].i;j=qu[top].j;di=qu[top].di;if(i==xe&&j==ye){num++;printf("第%d条路径:\n",num);for(k=0;k<=top;k++){path[k]=qu[k];printf("\t(%d,%d)",qu[k].i,qu[k].j);if((k+1)%5==0) //每输出5个方块后换一行printf("\n");}printf("\n\n");mg[qu[top].i][qu[top].j]=0;if(top+1<minlenth){minlenth=top+1;for(int c=0;c<=top;c++)path[k]=qu[k];}top--;i=qu[top].i;j=qu[top].j;di=qu[top].di;}find=0;while(di<=4&&find==0) //找(i,j)下一可走方块{di++; //找下一方位switch(di){case 0: i=qu[top].i-1; j=qu[top].j;break;case 1: i=qu[top].i; j=qu[top].j+1;break;case 2: i=qu[top].i+1; j=qu[top].j;break;case 3: i=qu[top].i; j=qu[top].j-1;break;}if(mg[i][j]==0) find=1; //找到下一可走相邻方块}if(find==1) //找到一可走相邻方块{qu[top].di=di; //修改原栈顶元素ditop++; //将可走相邻方块进栈qu[top].i=i;qu[top].j=j;qu[top].di=-1;mg[i][j]=-1; //值制为-1,避免重复走到该方块}else //没有相邻方块可走,退出栈{mg[qu[top].i][qu[top].j]=0; //该位置变为其他路径可走方向top--; //该方块退栈}}printf("路径条数:%d\n",num);printf("\n最短路径长度为:%d\n",minlenth);printf("\n最短路径为:\n");for(k=0;k<=minlenth;k++){printf("\t(%d,%d)",path[k].i,path[k].j);if((k+1)%5==0)printf("\n");}printf("\n");return(0); //没有可走路径,返回0}void main(){int i,j;int mg[M+2][N+2]={{1,1,1,1,1,1},{1,0,0,0,1,1},{1,0,1,0,0,1},{1,0,0,0,1,1},{1,1,0,0,0,1}};printf("迷宫图如下:\n");for(i=0;i<=M+1;i++){printf(" ");for(j=0;j<=N+1;j++)printf("%d ",mg[i][j]);printf("\n");}mgpath(1,1,M,N,mg);}四、运行示例及结果分析五、调试和运行程序过程中产生的问题及采取的措施在调试的过程当中,对于最短路径和路径长度这一问题,书上都给出了例子,且在课件和书本的第三章都有一定的解释,这一问题我们可以依据书本的提示来解决,但若要输出所有的路径,我们就得另外进行考虑,全部输出,就是将内容逐一输出,沿着这一思路,在参考C语言以及C++的相关内容,得到我们可以用FOR语句来对其进行解决。

数据结构课程设计走迷宫游戏

数据结构课程设计走迷宫游戏

信息工程学院课程设计报告课程名称《数据结构》课题名称走迷宫游戏专业班级学号姓名联系方式指导教师2015 年 12 月 27 日目录1、数据结构课程设计任务书................................................ 错误!未定义书签。

、题目............................................................... 错误!未定义书签。

、要求............................................................... 错误!未定义书签。

2、总体设计.............................................................. 错误!未定义书签。

、设计思路及总体组成框架............................................. 错误!未定义书签。

、操作流程图......................................................... 错误!未定义书签。

3、详细设计.............................................................. 错误!未定义书签。

、程序中所采用的数据结构及存储结构的说明............................. 错误!未定义书签。

、函数功能模块说明................................................... 错误!未定义书签。

、各函数的调用关系.................................................... 错误!未定义书签。

4、调试与测试:.......................................................... 错误!未定义书签。

数据结构课程设计报告 迷宫问题

数据结构课程设计报告 迷宫问题

吉林大学软件学院课程设计报告课程名称:数据结构课程设计课程题目:迷宫问题姓名:***学号: ********软件学院2009级《数据结构》课程设计题目一: 迷宫问题[实验目的]综合运用数组、递归等数据结构知识,掌握、提高分析、设计、实现及测试程序的综合能力。

[实验内容及要求]以一个M×N的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。

设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。

(1)根据二维数组,输出迷宫的图形。

(2)探索迷宫的四个方向:RIGHT为向右,DOWN向下,LEFT向左,UP向上,输出从入口到出口的行走路径。

[测试数据]左上角(1,1)为入口,右下角(8,9)为出口。

[实现方法]可使用回溯方法,即从入口出发,顺着某一个方向进行探索,若能走通,则继续往前进;否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。

假如所有可能的通路都探索到而未能到达出口,则所设定的迷宫没有通路。

[具体思路及结果]首先,事先声明好矩阵,矩阵长宽,栈顶元素,矩阵点左边等。

然后,要求用户尽享交互输入迷宫(maze)各个点处的值(1或0)保存并初始化栈顶元素,置所有方向数为下。

之后,一比较整洁大方的形式打印原迷宫供用户查看。

同时,开始本程序的重点,回溯算法,以1,2,3,4分别表示下上左右。

多次使用for循环寻找可以到达出口的路径,期间分别先后试探下,左,上,右置已经走过的点为2防止死循环,寻找完后存在TOP[]栈中。

最后,打印找到的当前迷宫路径并以(坐标1)——>(坐标2)的形式输出路径,并且在原迷宫的基础上表示出当前找到的路径,以#代表走过的路径0代表没有障碍的地方,1代表障碍,画出迷宫路径图,并且立刻执行下一次循环,寻找下一条可通过的路径,并还原迷宫图,继续寻找路径知道找到所有解后自动退出。

[具体代码]#include <stdio.h>#include <stdlib.h>#define n1 5#define n2 5typedef struct node{int x;//存x坐标int y;//存y坐标int c;//存该点可能的下点所在的方向,表示向1表示向下,2左,3向上,4向右}linkstack;linkstack top[25];int rows=0;int cols=0;int i,j,k,m,p,q=0;int maze[n1][n2];void main(){for(p=0;p<=n1-1;p++){for(q=0;q<=n2-1;q++){printf("请输入第%d行第%d列的数\n",p+1,q+1);scanf("%d",&maze[p][q]);}}//初始化top[],置所有方向为下for(i=0;i<n1 * n2;i++){top[i].c=1;}printf("the maze is:\n");//打印原迷宫for(i=0;i<n1;i++){for(j=0;j<n2;j++)printf(maze[i][j]?"1 ":"0 ");printf("\n");}i=0;top[i].x=0;top[i].y=0;maze[0][0]=2;//回溯算法do{if(top[i].c<5) //还可以向前试探{if(top[i].x==4&&top[i].y==4) //已找到一个组合{ //打印路径printf("The way %d is:\n",m++);for(j=0;j<=i;j++){printf("(%d,%d)-->",top[j].x,top[j].y);}printf("\n");//打印选出路径的迷宫for(j=0;j<n1;j++){for(k=0;k<n2;k++){if(maze[j][k]==0)printf("0 ");else if(maze[j][k]==2) printf("# ");else printf("1 ");}printf("\n");}maze[top[i].x][top[i].y]=0;top[i].c=1;i--;top[i].c+=1;continue;}switch(top[i].c) //向前试探{case 1:{if(maze[top[i].x][top[i].y+1]==0)//下{i++;top[i].x=top[i-1].x;top[i].y=top[i-1].y+1;maze[top[i].x][top[i].y]=2;}else{top[i].c+=1;}break;}case 2:{if(maze[top[i-1].x-1][top[i].y]==0)//左{i++;top[i].x=top[i-1].x-1;top[i].y=top[i-1].y;maze[top[i].x][top[i].y]=2;}else{top[i].c+=1;}break;}case 3:{if(maze[top[i].x][top[i].y-1]==0)//上{i++;top[i].x=top[i-1].x;top[i].y=top[i-1].y-1;maze[top[i].x][top[i].y]==2;}else{top[i].c+=1;}break;}case 4:{if(maze[top[i].x+1][top[i].y]==0)//右{i++;top[i].x=top[i-1].x+1;top[i].y=top[i-1].y;maze[top[i].x][top[i].y]=2;}else{top[i].c+=1;}break;}}}else //回溯{if(i==0) return; //已找完所有解maze[top[i].x][top[i].y]=0;top[i].c=1;i--;top[i].c+=1;}}while(1);}[程序效果图]。

迷宫游戏数据结构课程设计

迷宫游戏数据结构课程设计

迷宫游戏数据结构课程设计迷宫游戏数据结构课程设计1.引言1.1 背景迷宫游戏是一种经典的游戏,它要求玩家在迷宫中寻找出口。

通过本课程设计,我们将学习如何使用数据结构来建立一个迷宫游戏,并实现基本的功能,如移动、遇到障碍物等。

1.2 目的- 理解数据结构的基本概念和原理- 熟悉迷宫游戏的设计和开发过程- 能够运用数据结构算法解决实际问题2.需求分析2.1 系统需求- 系统应能够创建一个迷宫,包括设置迷宫的大小和障碍物位置- 系统应提供一个界面供玩家进行游戏操作- 系统应根据玩家的操作更新迷宫状态,并判断玩家是否成功寻找到出口2.2 功能需求- 创建迷宫:将迷宫的大小和障碍物位置输入系统,系统随机迷宫地图- 显示迷宫:在系统界面上以图形方式展示迷宫地图,包括墙壁、出口、玩家位置等- 移动玩家:接收键盘输入,根据玩家的操作更新迷宫状态,移动玩家的位置- 判断游戏结果:判断玩家是否成功找到迷宫的出口3.概要设计3.1 数据结构- 迷宫地图:使用二维数组表示迷宫地图,0表示通路,1表示墙壁,2表示出口,3表示玩家位置,4表示障碍物3.2 关键算法- 深度优先搜索(DFS)算法:用于迷宫地图和判断迷宫是否能够到达出口- 广度优先搜索(BFS)算法:用于移动玩家位置和判断玩家是否成功找到出口4.详细设计4.1 数据结构设计- 定义迷宫地图的二维数组,并初始化墙壁、出口、玩家位置和障碍物- 定义玩家的位置和方向变量,用于记录玩家在迷宫中的位置和面朝的方向4.2 算法设计- 迷宫地图算法:1) 初始化迷宫地图,将所有位置都设置为墙壁2) 随机出口位置和障碍物位置3) 使用深度优先搜索算法迷宫地图中的通路- 移动玩家算法:1) 根据玩家的输入,更新玩家的位置和方向2) 判断玩家下一步是否为通路,是则更新玩家位置,否则提示玩家无法移动- 判断游戏结果算法:1) 当玩家位置与出口位置重合时,判断玩家成功找到出口,游戏胜利2) 当玩家无法移动且未找到出口时,判断玩家失败,游戏结束5.编码实现- 根据概要设计中的数据结构和算法设计,使用编程语言实现迷宫游戏的功能。

【精品】迷宫问题数据结构课程设计任务书

【精品】迷宫问题数据结构课程设计任务书

长春大学课程设计任务书题目名称走迷宫游戏院(系)计算机科学技术学院课程名称数据结构课程设计班级网络10406学生姓名指导教师起止日期2012。

7.16~2012.7。

20课程设计任务书进度计划表长春大学课程设计说明书题目名称走迷宫游戏院(系)计算机科学技术学院专业(班级)网络10406学生姓名指导教师起止日期2012。

7.16——2012.7。

20目录一、设计题目 (2)二、设计目的 (2)三、算法思想析 (3)1、类的分析与计 (3)2、程序设计流图 (3)四、算法描述与现 (5)1、概要计 (5)2、调试析 (5)3、测试果 (7)五、总结与会 (10)六、程序码 (11)七、参考献 (16)一、设计题目1、题目:走迷宫游戏2、问题描述以一个m×n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。

设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。

3、基本要求(1)、首先用二维数组存储迷宫数据,迷宫数据由用户输入.(2)、一个以链表作存储结构的栈类型,然后编写一个求解迷宫的递归或非递归程序。

求得的通路以三元组(i,j,d)形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向(东、南、西、北四个方向所用代表数字,自行定义)。

(3)、可以用多种方法实现,但至少用两种方法,用三种以上可加分。

二、设计目的1、需求分析与设计要求随着社会经济和人们物质生活的不断提高,人们对精神生活的需求也越来越高,在现今社会里,人们对诸如智商、情商等的重视无疑反映了对精神生活的态度.当然具体到我们每个人来说,想必大多数人小时候都曾玩过魔方、迷宫吧。

作为这种智力游戏,人们是百玩不厌的。

正是鉴于这种需求,本设计应用计算机语言及其算法,将人的意志赋予机器实现,使人们不必再陷于枯燥的重复劳动,从而将更多的精力投入到对未知领域的探索上。

这次课程设计要求我们在了解并掌握数据结构与算法的设计方法的基础上,具备初步的独立分析和设计能力;初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能.同时要求在提高综合运用所学的理论知识和方法独立分析和解决问题的能力的同时,训练用系统的观点和软件开发一般规范进行软件开发的方法,培养一个软件工作者所应具备的科学的工作方法和作风.三、算法思想分析1、类的分析与设计由于计算机解谜宫时,通常用的是“穷举求解"的方法,即从入口出发,顺某一方向向前探索,若能走通,则继续往前走;否则沿原路退回,换一个方向再继续探索,直至出口位置,求得一条通路。

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

信息工程学院课程设计报告课程名称《数据结构》课题名称走迷宫游戏专业班级学号姓名联系方式指导教师2015 年 12 月 27 日目录1、数据结构课程设计任务书............................................................... 11.1、题目........................................................................... 11.2、要求........................................................................... 12、总体设计............................................................................. 12.1、设计思路及总体组成框架......................................................... 12.2、操作流程图..................................................................... 23、详细设计............................................................................. 53.1、程序中所采用的数据结构及存储结构的说明......................................... 53.2、函数功能模块说明............................................................... 53.3、各函数的调用关系 ............................................................................................................................... 74、调试与测试:......................................................................... 74.1、调试方法与步骤:............................................................... 74.2、测试结果的分析与讨论:......................................................... 84.3、测试过程中遇到的主要问题及采取的解决措施:................................... 106、源程序清单......................................................................... 107、数据结构课程设计总结............................................................... 148、参考文献........................................................................... 141、数据结构课程设计任务书1.1题目程序开始运行时显示一个迷宫地图,迷宫中央有一只老鼠,迷宫的右下方有一个粮仓。

游戏的任务是使用键盘上的方向键操纵老鼠在规定的时间内走到粮仓处。

1.2、要求1) 老鼠形象可辨认,可用键盘操纵老鼠上下左右移动;2) 迷宫的墙足够结实,老鼠不能穿墙而过;3) 正确检测结果,若老鼠在规定时间内走到粮仓处,提示成功,否则提示失败;4) 添加编辑迷宫功能,可修改当前迷宫,修改内容:墙变路、路变墙;5) 找出走出迷宫的所有路径。

利用序列化功能实现迷宫地图文件的存盘和读出等功能2、总体设计2.1、设计思路及总体组成框架1、思路(1).利用mfc可以把迷宫地图以及老鼠形象可变的导出来。

(2).需要有墙有路,通过把迷宫地图划分成一个一个小方块,通过一个数组的值来判断是墙是路。

(1表示墙0表示路)(3).利用栈,来存入当前位置,然后判断下一位置,是否有路,存入栈中或出栈。

(4).把每个数组元素对应一个按钮根据点击按钮,改变数组的值从而改变墙和路的转化。

(5).键盘接受字符,根据字符调用不同的图片,达到老鼠超前走的效果。

2、数据结构本程序运用的逻辑结构是线性和存储结构为顺序。

之所以采用本结构是因为,迷宫主要用到栈来储存当前位置,和判断下一位置,来入栈。

抽象数据类型线性表的定义如下:ADT Stack{数据对象:D={ai | ai∈ElemSet,i=1,2,3……,n,n≥0}数据关系:R1={<ai-1,ai>| ai-1,ai∈D,i=1,2,3,……,n}基本操作:Initstack(&s)操作结果:构造一个空栈s。

Stackempty(s)初始条件:栈s已经存在。

操作结果:将s清为空栈。

Push(&s,e)初始条件:栈s已经存在。

操作结果:插入元素e为新的栈顶元素。

Pop(&s,&e)初始条件:栈s已经存在,且非空。

操作结果:删除s的栈顶元素,并用e返回其值。

} ADT Stack3、根据课程设计题目的功能要求,总体概要的组成框图如下:2.2、操作流程图1、键盘操作流程:2、模块流程图:面向对象而非面向工程的程序设计,事件和判断都具有同时性和并发性。

3、游戏界面显示3、详细设计3.1、程序中所采用的数据结构及存储结构的说明数据类型:结构体,整形数据输入:按照窗口、菜单提示按鼠标左键移动老鼠位置,按键盘的上、下、左、右键输出:可视化迷宫3.2、函数功能模块说明(1)开始游戏void CMainFrame::OnStart():开始游戏。

void CLabyrinthView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags):小老鼠键盘操。

第一个参数表示哪个按键,接受上、下、左、右字符,判断调用哪个小老鼠图片,最后用脚印图片覆盖老鼠图片,达到朝前走,留下脚印的效果。

(2)重新开始void CMainFrame::OnSysmap():系统地图。

void CLabyrinthView::OnSelfmap()、void CLabyrinthView::OnLButtonDown(UINT nFlags, CPoint point):绘制地图函数。

达到墙变路、路变墙的目的。

(3)保存图片void CMainFrame::OnSave():保存地图。

(4)载入图片void CMainFrame::OnOpen():载入地图。

BOOL CLabyrinthView::OnEraseBkgnd(CDC* pDC):设置欢迎画面,载入图片。

(5)自绘地图void CLabyrinthView::OnLButtonDown(UINT nFlags, CPoint point):墙变路,路变墙(6)自动寻路void CLabyrinthView::OnAuto():为自动寻路函数。

其重要调用Seqstack * CSkfction::init_Seqstack()、int CSkfction::Empty_Seqstack(Seqstack *s)、int CSkfction::Push_Seqstack(Seqstack *s,DataType x)、intCSkfction::Pop_Seqstack(Seqstack *s,DataType *x)函数。

(7)设置时间int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct):到达在在状态栏中显示时间,调用了系统的函数SetTimer(1,1000,NULL); 第一个参数为对应时器的代号。

在一个程序中,可能有多个SetTimer,在Ontime响应时,可以根据第一个参数来确定是哪一个记时器所引起的事件。

第二个参数用于设置时间。

第三个参数为一个回调函数的指针,用NULL的话,系统会把SetTimer 产生的消息加入消息队列中。

调用了一下三个函数信息,来显示时间。

m_mandToIndex(IDS_LASTTIME); //按规定宽度显示m_wndStatusBar.SetPaneInfo(0,IDS_LASTTIME,SBPS_POPOUT,150);//剩余时间凸出来m_wndStatusBar.SetPaneText(1,str2);//在窗格中显示文本信息。

void CMainFrame::OnTimer(UINT nIDEvent):根据时间判断老鼠是否饿死。

void CMainFrame::OnSettime():设置时间。

(8)音效设置void CMainFrame::OnMusicOn():音乐来。

void CMainFrame::OnMusicOff():音乐关。

(9)游戏退出void CMainFrame::OnAppExit():void CMainFrame::OnClose():退出游戏,弹出对话框。

(10)框架BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs):设置窗口信息。

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct):在状态栏显示时间信息。

3.3、各函数的调用关系程序界面:4、调试与测试:4.1、调试方法与步骤:内容包括:调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析:1.实际完成的情况说明(完成的功能,支持的数据类型等);基本功能都已经完成,而且还加了保存图片、载入图片、设置时间、游戏帮助等功能。

2.上机过程中出现的问题及其解决方案;(1) 问题:每次走完迷宫,它都会保持现有状态,如果重新开始,要自己按重新开始,次才能开始,很麻烦。

解决方案:void CMainFrame::OnTimer(UINT nIDEvent)函数中调用voidCMainFrame::OnOpen(),这样在每次游戏结束时就可以调用这个函数,载入图片。

(2)问题:通过键盘来如何控制对象(老鼠)的移动,我希望达到一种老鼠会动的效果,即朝左走头往左哦哦,朝右走,头朝右。

相关文档
最新文档