最简单的c语言迷宫游戏实验报告

合集下载

C语言的图形编程应用—迷宫游戏

C语言的图形编程应用—迷宫游戏

课程设计报告书题目C语言的图形编程应用—迷宫游戏系别计算机工程系专业计算机科学与技术班级姓名指导教师下达日期2011 年12 月14 日设计时间自2011年12月19日至2011年12月30日指导教师评语课程设计任务书目录Ⅰ.程序设计目的 (3)Ⅱ.运行环境 (3)Ⅲ.程序功能 (3)Ⅳ.程序设计内容 (3)Ⅳ.1设计界面 (3)Ⅳ.2设计思路 (3)Ⅳ.3流程图 (4)Ⅳ.4主要功能模块 (4)Ⅴ.小结与启发 (10)Ⅵ.参考文献 (11)Ⅰ.程序设计目的通过典型实例―——迷宫问题,加深对递归算法的理解和编制,掌握数组的运用。

Ⅱ.运行环境主要在Windows 2000/XP操作系统TC下运行。

Ⅲ.程序功能迷宫是深受大家喜爱的游戏之一,一般设计迷宫为二维平面图,将迷宫的左上角做入口,右下角做出口,求出从入口点到出口点的一条通路,作为线性结构的典型应用,大多是用非递归方法实现,输出用0代表通路,1代表墙壁。

而本程序生成一个美观逼真的迷宫图,它是随机生成的且迷宫大小可以改变,迷宫的大小为N*N,N预定义为常数,修改N的值可以改变迷宫的大小(只要不超过屏幕显示范围),而程序不必做修改。

程序采用了两种运行方式:一种系统自动运行探索,用递归方法实现;一种是由人工操作探索通路,这利用了手动操作8个代表不同的方向的键位来实现。

用白色表示可走的路,棕色表示墙壁不可以通过。

Ⅳ.程序设计内容Ⅳ.1设计界面系统运行首先出现提示字符串“Please select hand(1)else auto”,询问是选择人工探索还是系统自动探索,当用户输入字符1按回车键后出现一个迷宫图,红色矩形块(表示探索物)出现在左上角,这是可以代表8个方向的字符选择通路,遇到墙壁不能通行,按回车键结束探索,如果这时探索物移动到右下角出口,则显示找到通路信息,否则显示没找到通路信息。

如图1为人工探索通路的界面。

在提示信息后,如果输入的字符不是1,则系统自动查找通路,如果没有找到通路,则显示没有找到通路信息。

数据结构(C语言版)实验报告(迷宫)

数据结构(C语言版)实验报告(迷宫)

《数据结构与算法》实验报告评分依据及结果一、需求分析1.问题描述:以一个m*n的长方阵表示迷宫,空格和感叹号分别表示迷宫中的通路和障碍。

设计一个程序,对随机产生的迷宫,求一条从入口到出口的通路,或得出没有通路的结论。

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

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

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

3.程序的执行命令有:1)输入迷宫的列数2)输入迷宫的行数二、概要设计为实现上述功能,需要以一个链表为存储结构的栈类型1.栈的顺序存储表示typedef struct{int x; /*列*/int y; /*行*/}PosType; //坐标位置类型typedef struct{int ord; //通道块在路径上的"序号"PosType seat; //通道块在迷宫中的"坐标位置"int di; //从此通道块走向下一通道块的"方向"}SElemType; //栈的元素类型typedef struct{SElemType *base;SElemType *top;int stacksize; //当前已分配的存储空间,以元素为单位}SqStack;//迷宫程序typedef struct{int lie; /*列数*/int hang; /*行数*/char a[999][999];}MazeType; /*迷宫类型*/2.基本操作int InitStack(SqStack *S)//分配空间int GetTop(SqStack *S,SElemType *e) //若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERRORint Push(SqStack *S,SElemType *e)//插入元素e作为新的栈顶元素int Pop(SqStack *S,SElemType *e) //若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERRORint generatemaze( MazeType *maze)// 随机生成迷宫int Pass(MazeType *maze, PosType curpos ) //判断当前位置可否通过int FootPrint(MazeType *maze,PosType curpos) //留下足迹int MarkPrint(MazeType *maze,PosType curpos) //留下不能通过的标记PosType NextPos(PosType curpos,int di) //返回当前位置的下一位置int MazePath(MazeType *maze,PosType start,PosType end) //若迷宫有解,则求得一条存放在栈中(从栈底到栈顶),并返回OK,否则返回ERROR void PrintMaze(MazeType *maze) //打印迷宫三、详细设计//程序的头文件#include <stdio.h>#include <malloc.h>#include <stdlib.h>#include <string.h>#include <time.h>//函数的返回值#define OK 1#define ERROR 0#define NULL 0#define OVERFLOW -2#define STACK_INIT_SIZE 100#define STACKINCREMENT 10//栈的顺序存储表示typedef struct{int x; /*列*/int y; /*行*/}PosType; //坐标位置类型typedef struct{int ord; //通道块在路径上的"序号"PosType seat; //通道块在迷宫中的"坐标位置"int di; //从此通道块走向下一通道块的"方向"}SElemType; //栈的元素类型typedef struct{SElemType *base;SElemType *top;int stacksize; //当前已分配的存储空间,以元素为单位}SqStack;//基本操作int InitStack(SqStack *S){S->base=(SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));if(!S->base)exit(OVERFLOW);S->top=S->base;S->stacksize=STACK_INIT_SIZE;return OK;}//若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERRORint GetTop(SqStack *S,SElemType *e){if(S->top==S->base)return ERROR;*e=*(S->top-1);return OK;}int Push(SqStack *S,SElemType *e)//插入元素e作为新的栈顶元素{if(S->top-S->base>=S->stacksize)/*栈满,追加存储空间*/{S->base=(SElemType*)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(SElemType));if(!S->base)exit(OVERFLOW);S->top=S->base+S->stacksize;S->stacksize+=STACKINCREMENT;}*S->top++=*e;return OK;}//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERRORint Pop(SqStack *S,SElemType *e){if(S->top==S->base)return ERROR;*e=*--S->top;return OK;}int StackEmpty(SqStack *S){return(S->top==S->base);}//迷宫程序typedef struct{int lie; /*列数*/int hang; /*行数*/char a[999][999];}MazeType; /*迷宫类型*//*随机生成迷宫*/int generatemaze( MazeType *maze){int i,j;maze->a[0][0]=2;maze->a[++maze->hang][++maze->lie]=3; /*设置外墙*/maze->a[0][maze->lie]='!';maze->a[maze->hang][0]='!';for(j=1;j<maze->lie;j++){maze->a[0][j]='!';maze->a[maze->hang][j]='!';}for(i=1;i<maze->hang;i++){maze->a[i][0]='!';maze->a[i][maze->lie]='!';}srand((unsigned)time( NULL ));rand();for(i=1; i <maze->hang; i++)for(j=1;j<maze->lie;j++){if (rand()>=RAND_MAX/4) maze->a[i][j] =' '; //' ' 暗示出路else maze->a[i][j] ='!'; //'!'暗示无出路}return OK;}int Pass(MazeType *maze, PosType curpos ) //判断当前位置可否通过{if ((curpos.x < 1) || (curpos.x >= maze->lie))return ERROR;if ((curpos.y < 1) || (curpos.y >= maze->hang))return ERROR;if (maze->a[curpos.y][curpos.x]==' ')return OK;else return ERROR;}int FootPrint(MazeType *maze,PosType curpos) //留下足迹{maze->a[curpos.y][curpos.x]='*';return OK;}int MarkPrint(MazeType *maze,PosType curpos) //留下不能通过的标记{maze->a[curpos.y][curpos.x]='@';return OK;}PosType NextPos(PosType curpos,int di)//返回当前位置的下一位置{PosType pos=curpos;switch(di){case 1: //右东pos.x++;break;case 2: //下南pos.y++;break;case 3: //左西pos.x--;break;case 4: //上北pos.y--;break;}return pos;}//若迷宫有解,则求得一条存放在栈中(从栈底到栈顶),并返回OK,否则返回ERROR int MazePath(MazeType *maze,PosType start,PosType end){PosType curpos;SqStack *S=(SqStack *)malloc(sizeof(SqStack));InitStack(S);SElemType *e;e=(SElemType *)malloc(sizeof(SElemType));curpos=start; //设定当前位置为入口位置int curstep = 1; //探索第一步do {if(Pass(maze,curpos)) //当前位置可通过{FootPrint(maze,curpos);e->ord=curstep;e->seat=curpos;e->di=1;Push(S,e);if(curpos.x==end.x&&curpos.y==end.y)return (OK);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);}if(e->di<4) //栈不空且栈顶位置四周有其他位置未探索{e->di++;Push(S,e);curpos=e->seat;curpos=NextPos(curpos,e->di);}}}}while(!StackEmpty(S));return ERROR;}void PrintMaze(MazeType *maze) //打印迷宫{int i,j,k,n;int c[999],d[999];for(i=0,k=0;i<=maze->hang;i++){for(j=0;j<=maze->lie;j++){printf("%c ",maze->a[i][j]);if(maze->a[i][j]=='*'){c[k]=i;d[k]=j;k++;}}printf("\n");}n=k;for(k=0;k<n;k++)printf("<%d,%d>",c[k],d[k]);printf("\n");printf("\n");}int main(){int zmg;char ch;printf(" 数据结构课程设计--迷宫问题求解\n\n");printf(" |----------------------------------------|\n");printf(" | |\n");printf(" | |\n");printf(" | |\n");printf(" | |\n");printf(" | XXXX XXXXXXXXXXXXXX |\n");printf(" | XXXXXXX |\n");printf(" |----------------------------------------|\n");getchar();do{system("cls");fflush(stdin);MazeType *maze=(MazeType *)malloc(sizeof(MazeType)); //设置迷宫的长宽不含外墙printf("请输入迷宫的列数(不含外墙时):");scanf("%d",&maze->lie);printf("请输入迷宫的行数(不含外墙时):");scanf("%d",&maze->hang);generatemaze(maze);printf("随机创建迷宫\n");PrintMaze(maze);getchar();getchar();PosType start,end;start.x=1;start.y=1;end.x=maze->lie-1;end.y=maze->hang-1;zmg=MazePath(maze,start,end);if(zmg){printf("此迷宫通路为\n");PrintMaze(maze);}elseprintf("此迷宫无通路\n"); //getchar();printf("再次尝试?(Y/N)?");scanf("%c",&ch);}while(ch=='Y'||ch=='y');return 0;}四、调试分析1.本程序界面设计合理,以空格为通路,感叹号!为障碍,笑脸为起始点,*为行走路线,心形为出口设计精巧,便于用户使用。

C语言实现数据结构迷宫实验

C语言实现数据结构迷宫实验

C语⾔实现数据结构迷宫实验本⽂实例为⼤家分享了C语⾔实现简单的数据结构迷宫实验,供⼤家参考,具体内容如下分析:迷宫实验主要有两部分操作,其⼀是对迷宫的⽣成,其⼆是寻路使⽤栈的操作。

步骤:⼀、.h⽂件1、⾸先是迷宫的⽣成,可以使⽤随机数种⼦⽣成,但主要逻辑部分并不在此,所以在这⾥直接写死,固定下来。

定义⼀个坐标类型的结构体,和⼆维数组迷宫:typedef struct {int x;int y;}Pos;//迷宫类型typedef struct {int square[10][10] ={{1,1,1,1,1,1,1,1,1,1},{1,0,0,0,0,0,0,0,0,1},{1,1,1,1,0,1,1,1,0,1},{1,0,0,0,0,1,0,1,0,1},{1,0,1,1,1,1,0,1,1,1},{1,0,0,0,0,1,0,0,0,1},{1,0,1,1,0,0,0,1,0,1},{1,0,1,1,1,0,1,1,1,1},{1,0,0,0,1,0,0,0,0,1},{1,1,1,1,1,1,1,1,1,1},};}Maze;typedef Pos SElemType;2、然后是对栈的声明,栈⾥储存的元素为坐标类型//顺序栈#define MAXSIZE 50typedef struct {SElemType *base;SElemType *top; //栈顶指针int stacksize;}SqStack;3、栈操作函数声明typedef int Status;#define OK 1;#define ERROR 0;//栈的相关操作//初始化栈Status initStack(SqStack &s);//压栈Status push(SqStack &s, SElemType e);//出栈SElemType pop(SqStack &s);//清空栈Status clearStack(SqStack &s);//摧毁栈void destroyStack(SqStack &s);//遍历栈Status stackTravel(SqStack s);4、迷宫操作函数声明//初始化迷宫(同时⽣成起始点和终点)void initMaze(Maze &maze);//寻找出路;传⼊⼀个迷宫和栈找出出路void findWay(Maze &maze,SqStack &s);//判断该点的四个⽅向是否有通路,有就前进Pos isExit(Pos p, Maze maze);⼆、.cpp⽂件1、导⼊所需头⽂件#include "pch.h"#include <iostream>#include<time.h>#include<stdlib.h>using namespace std;2、栈操作实现//构造空栈Status initStack(SqStack &s) {s.base = new SElemType[MAXSIZE];if (!s.base){exit(OVERFLOW);//分配失败}s.top = s.base;s.stacksize = MAXSIZE;return OK;}//⼊栈Status push(SqStack &s, SElemType e) {//判断栈满if (s.top-s.base == s.stacksize){return ERROR;}//存⼊元素,*为取指针的值s.top++;*s.top = e;return OK;}//出栈,⽤e返回栈顶值SElemType pop(SqStack &s) {SElemType e;//判断栈为空if (s.top == s.base){//若为空则返回⼀个(-1,-1)的点,判断由外部调⽤时进⾏ e.x = -1;e.y = -1;return e;}e = *s.top;s.top--;return e;}Status clearStack(SqStack &s) {s.top = s.base;return OK;}void destroyStack(SqStack &s) {s.top = NULL;s.stacksize = 0;free(s.base);}Status stackTravel(SqStack s) {while (s.top != s.base){s.base++;Pos p = *s.base;if ( p.x == 0 || p.y == 0|| p.x == 9 ||p.y == 9){//终点输出为“End”cout << "End";}}cout << endl;return 0;}3、迷宫操作实现///////////////////////////////////////迷宫操作//////////////////////////////////初始化函数,传⼊⼀个迷宫,随机⽣成起点和终点,由于起点有⼀定限制,所以这⾥起点也固定为⼏个最合适的点void initMaze(Maze &maze) {//⽣成随机数srand((unsigned)time(NULL));int index = rand() % 36 + 1;int start = index % 6 + 1;//⽣成起始点数值为‘s'switch (start){case 1:maze.square[1][1] = 's';break;case 2:maze.square[3][8] = 's';break;case 3:maze.square[3][6] = 's';break;case 4:maze.square[6][8] = 's';break;case 5:maze.square[8][3] = 's';break;case 6:maze.square[8][8] = 's';break;}//随机⽣成终点'e'表⽰while (index = rand()%36+1){//出⼝在顶部if (index >1 &&index<10 && maze.square[1][index-1]!='s'){maze.square[0][index-1] = 'e';break;}//出⼝在右侧else if (index>10 &&index <19){if (maze.square[index-10][8] != 1 && maze.square[index-10][8]!='s') {maze.square[index-10][9] = 'e';break;}}//底部出⼝else if (index >19&&index<28){if (maze.square[8][index - 19] != 's' && maze.square[8][index - 19] != 1) {maze.square[9][index - 19] = 'e';break;}}//左侧出⼝else if (index >28 && index <=36){if (maze.square[index-28][1] != 1 &&maze.square[index-28][1] != 's'){maze.square[index - 28][0] = 'e';break;}}}void showMaze(Maze maze) {for (int i = 0; i < 10; i++){for (int j = 0; j < 10; j++){if (maze.square[i][j] == 1){cout << "* ";}else if (maze.square[i][j] == 0){cout << " ";}else{cout << (char)maze.square[i][j]<<" ";}}cout << endl;}}//寻找迷宫路径void findWay(Maze &maze,SqStack &s) {//⾸先遍历找出起始点和终点并保存下来Pos start,end;for (int i = 0; i < 10; i++){for (int j = 0; j < 10; j++) {if (maze.square[i][j] == 's'){ //起点压⼊栈内start.x = i;start.y = j;push(s, start);}else if (maze.square[i][j] == 'e'){ //出⼝end.x = i;end.y = j;}}}//寻找路径Pos go = start;//直到找到出⼝才结束while ( s.top->x != end.x || s.top->y != end.y){//获得下⼀步坐标Pos path = isExit(go, maze);if (path.x != go.x || path.y != go.y){//前进maze.square[path.x][path.y] = 'p';push(s, path);go = path;}//如果所有放向都⾛不通(即返回的点是传⼊的点),则将其标为“@”,出栈到上⼀个点,继续判断else{//⾛不通popmaze.square[path.x][path.y] = '@';pop(s);go = *s.top;}}maze.square[end.x][end.y] = 'e';}//判断返回下⼀步路径(顺序:右下左上),传⼊所处位置,从右边开始判断是否⼜通路或者出⼝,有就返回哪个⽅向上的点Pos isExit(Pos p,Maze maze) {Pos tempP = p;if (maze.square[tempP.x][tempP.y+1] == 0 || maze.square[tempP.x][tempP.y + 1] == 'e'){tempP.y++;else if(maze.square[tempP.x+1][tempP.y] == 0 || maze.square[tempP.x +1][tempP.y] == 'e'){tempP.x++;}else if (maze.square[tempP.x][tempP.y - 1] == 0 || maze.square[tempP.x][tempP.y - 1] == 'e'){tempP.y--;}else if (maze.square[tempP.x - 1][tempP.y] == 0 || maze.square[tempP.x - 1][tempP.y] == 'e'){tempP.x--;}return tempP;}三、main函数调⽤int main(){while (true){//创建⼀个迷宫Maze maze;initMaze(maze);//初始化⼀个栈SqStack S;initStack(S);cout << "*****************************" << endl;cout << "* 1、⽣成迷宫 2、退出 *" << endl;cout << "*****************************" << endl;cout << "请输⼊你的选择:";int select = 0;cin >> select;if (select == 1){cout << "⽣成随机起点和出⼝迷宫:" << endl;showMaze(maze);cout << "⽣成迷宫路径:" << endl;findWay(maze, S);stackTravel(S);showMaze(maze);cout << endl;}if (select == 2){clearStack(S);break;}}return 0;}四、评价这是个叫简易的迷宫,但基本实现了迷宫的寻路逻辑,可改进的地⽅有:1、因为很多地⽅写死了,所以复⽤性不⾼,可以⽤循环遍历来随机⽣成起点,同理迷宫的⽣成也是这样2、判断路径可以⽤递归调⽤实现前进逻辑以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

迷宫求解实验报告

迷宫求解实验报告

迷宫求解实验报告迷宫求解实验报告引言:迷宫作为一种经典的智力游戏,一直以来都备受人们的喜爱。

在这个实验中,我们尝试使用计算机算法来解决迷宫问题。

通过设计并实现一个迷宫求解程序,我们将探索不同的算法和策略,以找到最佳路径解决迷宫。

实验设计:我们首先定义了迷宫的基本结构。

迷宫由一个二维矩阵表示,其中0代表通路,1代表墙壁。

我们使用了一个常见的5x5迷宫作为实验样本,其中包括了起点和终点。

接下来,我们尝试了两种不同的算法来解决迷宫问题。

算法一:深度优先搜索(DFS)深度优先搜索是一种常见的图搜索算法,在解决迷宫问题中也有广泛的应用。

该算法从起点开始,沿着一个路径一直向前探索,直到遇到死路或者到达终点。

如果遇到死路,则回溯到上一个节点,继续探索其他路径,直到找到一条通往终点的路径。

我们实现了一个递归函数来实现深度优先搜索算法。

通过不断调用该函数,我们可以找到一条从起点到终点的路径。

然而,由于深度优先搜索的特性,它并不能保证找到最短路径。

在我们的实验中,深度优先搜索找到的路径长度为8步。

算法二:广度优先搜索(BFS)广度优先搜索是另一种常见的图搜索算法,与深度优先搜索不同的是,它优先探索所有的相邻节点,再逐层向外扩展。

在解决迷宫问题时,广度优先搜索可以保证找到最短路径。

我们使用了一个队列数据结构来实现广度优先搜索算法。

通过不断将相邻节点加入队列,并记录每个节点的前驱节点,我们可以在找到终点后,追溯回起点,从而找到最短路径。

在我们的实验中,广度优先搜索找到的路径长度为6步。

实验结果:通过对比深度优先搜索和广度优先搜索的结果,我们可以看出广度优先搜索算法在解决迷宫问题时更加高效。

虽然深度优先搜索算法可以找到一条路径,但它并不能保证是最短路径。

而广度优先搜索算法通过逐层扩展的方式,可以保证找到的路径是最短的。

讨论与总结:通过这个实验,我们不仅学习了迷宫求解的基本算法,还深入了解了深度优先搜索和广度优先搜索的原理和应用。

《C++程序》迷宫游戏设计报告

《C++程序》迷宫游戏设计报告
x=i;y=j;
maze[x][y]=-1;//到达新点;
if(x==m && y==n)
{
cout<<"迷宫路径为:"<<endl;
cout<<"("<<m<<","<<n<<")<---";
Datetype t;
while(!st.empty())
{
t=st.top();
cout<<"("<<t.x<<","<<t.y<<")<---";
x=sq[front].x;
y=sq[front].y;
for(v=0;v<8;v++){
i=x+move[v].x;
j=y+move[v].y;
if(maze[i][j]==0){
rear++;
sq[rear].x=i;
sq[rear].y=j;
sq[rear].pre=front;
maze[i][j]=-1; //访问过的坐标点,入队;
《C++程序》迷宫游戏设计报告
信息科学与技术学院
专 业:电子信息工程
班 级:2班
姓 名:张喜
学 号:2011508217
指导教师:高攀
1
迷宫游戏设计。
2
编一个迷宫游戏程序,迷宫生成有用户输入和程序自动生成两种方式(迷宫以矩阵表示),要求输出迷宫和走出迷宫的路径。
3

迷宫求解实验报告

迷宫求解实验报告

数据结构(迷宫求解实验报告)一、【实验构思(Conceive)】(10%)(本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计、算法等相关知识)实验实现基本思路:若当前位置可通,则纳入当前路径,并继续朝下一个位置探索,即切换下一位置为当前位置,如此重复直至到达出口;若当前位置不可通,则应顺着来向退回到前一通道块,然后朝着除来向之外的其他方向继续探索;若该通道块的四周4个方块均不可通,则应从当前路径上删除该通道块。

设以栈记录当前路径,则栈顶中存放的是当前路径上最后一个通道块。

由此,纳入路径的操作即为当前位置入栈;从当前路径上删除前一通道块的才操作即为出栈。

二、【实验设计(Design)】(20%)(本部分应包括:抽象数据类型的功能规格说明、主程序模块、各子程序模块的伪码说明,主程序模块与各子程序模块间的调用关系)抽象数据类型:typedef struct{int x; //当前位置的横坐标int y; //当前位置的纵坐标char type; //当前位置的属性:墙壁或通道(0/1)bool isfoot; //判断当位置是否已走过, true代表已走过}Position; //当前位置信息typedef struct{int order; //脚步在地图上的序号Position seat; //行走的当前位置int aspect; //下一步的方向}Block; //脚步typedef struct{int width; //地图的长度int height; //地图的宽度Position* site; //地图内的各个位置}Maze; //地图typedef struct{Block* base;Block* top;int length;int stacksize;}Stack;主程序模块:int main(int argc, _TCHAR* argv[]){Position start,end;Block blk;Stack S;int width,height;printf("输入迷宫比例X*Y\n");printf("输入X:");scanf("%d",&width);printf("输入Y:");scanf("%d",&height);Maze* maze=GreatMaze(width,height);PrintMaze(maze);printf("\n");printf("请输入入口坐标X:");scanf(" %d",&start.x);printf("请输入入口坐标Y:");scanf(" %d",&start.y);printf("请输入出后坐标X:");scanf(" %d",&end.x);printf("请输入出口坐标Y:");scanf(" %d",&end.y);MazePath(maze,start,end,S);printf("走完所需路径长度为:%d",S.length);printf("\n");Stack Sa;InitStack(Sa);while(S.length!=0){Pop(S,blk);Push(Sa,blk);}while(Sa.length!=0){Pop(Sa,blk);if(Sa.length!=0)printf("[%d,%d]->",blk.seat.x,blk.seat.y); //打印足迹elseprintf("[%d,%d]",blk.seat.x,blk.seat.y); //打印最后一步}}各子程序函数:Maze* GreatMaze(int width,int height) //创建地图void PrintMaze(Maze* maze) //打印地图int PositionComparison(Position maze,Position pos) //判断当前位置是否合法int Pass(Maze* maze,Position curpos)//判断当前位置是否可以前进或者是否走过void FootSet(Maze* maze,Position site) //留下足迹Position NextPos(Position &cur,int aspect)//判断方向Int MazePath(Maze* maze,Position start,Position end,Stack &S)//搜索从入口到出口的路径三、【实现描述(Implement)】(30%)(本部分应包括:抽象数据类型具体实现的函数原型说明、关键操作实现的伪码算法、函数设计、函数间的调用关系,关键的程序流程图等,给出关键算法的时间复杂度分析。

实验报告No2-迷宫

实验报告No2-迷宫

实验报告No.2题目:迷宫实验一.需求分析1、以二维数组migong[M][N]表示迷宫,其中migong[0][j]和migong[i][0](0<=j,i<=N)为添加的一圈障碍。

数组中以元素1表示通路,0表示障碍,迷宫的大小理论上可以不限制。

2、迷宫数据由程序提供,用户只需要进行选择迷宫就行。

迷宫的入口和出口由程序提供。

3、若设定的迷宫存在通路,则以长方形矩阵的形式将迷宫及其通路输出到标准终端上,其中“0”表示障碍,“2”表示通过的路径,“3”表示死胡同,没有显示的区域表示没有到达过的地方。

4、本程序只求出一条成功的通路。

但是只要对函数进行小量的修改,就可以求出其他全部的路径。

5、程序执行命令为:(1)、创建迷宫;(2)、求解迷宫;(3)、输出迷宫。

6、迷宫问题具体描述:以一个m x n的长方矩阵表示迷宫,1和0分别表示迷宫中的通路和障碍。

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

二.概要设计1设定栈的抽象数据类型定义ADT Stack {数据对象:D={ai|aiπcharSet,i=1,2,……,n,n≥0}数据关系:R1=<ai-1,ai>|ai-1,aiπD,i=2,……,n}基本操作:InitStack(&S)操作结果:构造一个空栈SDestoryStack(&S)初始条件:栈S已经存在操作结果:销毁栈SClearStack(&S)初始条件:栈S已经存在操作结果:将S清为空栈StackLength(S)初始条件:栈S已经存在操作结果:返回栈S的长度StackEmpty(S)初始条件:栈S已经存在操作结果:若栈空,则返回TRUE,否则返回FLASE2.、设定迷宫的抽象数据类型为:ADT maze{数据对象:D={ai,j|aij<{‘‘,’#’,’@’},0<=i<=m+1,0<=j<=n+1;m,n<=10;}数据关系:R={ROW,COL}ROW={<ai-1,j;ai,j>|ai-1,ai,j<D,i=1,….,m+1,j=0,…,n+1}COL={<ai,j-1,ai,j>|ai,j-1,ai,j<D,i=0,…,m+1,j=1,…,n+1}三.程序设计主函数main()createMaze()信息读入MazePath()寻找路径InitStack()Push()Pop()Empty()canPos()MarkPos()NextPos()一、测试分析1.在写代码的过程中,没有弄清使用指针与引用之后,结构体如何使用。

c课程设计报告迷宫

c课程设计报告迷宫

c 课程设计报告迷宫一、教学目标本课程的教学目标是让学生掌握迷宫问题的基本概念、算法和编程技巧。

通过本课程的学习,学生应能理解迷宫问题的数学模型,掌握常用的迷宫算法,并能够运用编程语言实现迷宫的求解。

此外,学生还应培养解决问题的能力和创新思维,提高对计算机科学和编程的兴趣。

具体来说,知识目标包括:1.了解迷宫问题的背景和应用场景。

2.掌握迷宫问题的数学模型和基本概念。

3.熟悉常用的迷宫算法及其特点。

4.理解编程语言在解决迷宫问题中的应用。

技能目标包括:1.能够运用迷宫算法求解简单迷宫问题。

2.能够运用编程语言实现迷宫算法的求解。

3.能够对迷宫算法进行优化和改进。

情感态度价值观目标包括:1.培养学生对计算机科学和编程的兴趣。

2.培养学生解决问题的能力和创新思维。

3.培养学生的团队合作意识和沟通能力。

二、教学内容本课程的教学内容主要包括迷宫问题的基本概念、算法和编程技巧。

具体内容包括:1.迷宫问题的背景和应用场景。

2.迷宫问题的数学模型和基本概念。

3.常用的迷宫算法及其特点。

4.编程语言在解决迷宫问题中的应用。

教学大纲安排如下:第一课时:介绍迷宫问题的背景和应用场景,引入迷宫问题的数学模型和基本概念。

第二课时:介绍常用的迷宫算法及其特点,引导学生理解编程语言在解决迷宫问题中的应用。

第三课时:通过案例分析,让学生运用迷宫算法求解简单迷宫问题,培养学生的编程能力。

第四课时:引导学生对迷宫算法进行优化和改进,提高学生的解决问题的能力。

第五课时:进行课程总结和回顾,让学生展示自己的迷宫求解成果,进行交流和评价。

三、教学方法本课程的教学方法采用讲授法、讨论法和实验法相结合的方式。

通过讲授法,向学生传授迷宫问题的基本概念、算法和编程技巧;通过讨论法,引导学生进行思考和交流,培养学生的创新思维;通过实验法,让学生动手实践,培养学生的编程能力和解决问题的能力。

在教学过程中,教师应根据学生的实际情况,灵活运用不同的教学方法,以激发学生的学习兴趣和主动性。

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

一、内容:1、本游戏主要实现了人控制键盘方向键使小人(*)走出迷宫。

2、具有的功能:1)、在游戏菜单里人可以选择不同难度的游戏进行游戏;2)、在游戏过程中,可以通过键盘方向键使小人移动,走出迷宫;3)、在游戏过程中,当人碰到墙壁(#)的时候小人过不去;4)、当人顺利完成游戏之后,输出“========you are win!======”字样,30秒钟后自动返回到游戏菜单;5)、在游戏过程中,人可以通过按Esc键返回游戏菜单;也可以可以按0直接退出游戏;6)、在游戏菜单里,按0键可以退出游戏。

3、具体应用:1)、人主要同过键盘的1,2,3数字键来选择游戏难度;2)、在游戏中通过Esc键来返回菜单;3)、同过0键退出游戏。

二、上机环境操作系统:windows7开发工具:VC6.0三、函数调用关系图四、各函数功能说明main() 主函数;menu() 游戏菜单;roadcake() 消去小人路径;introduce() 游戏介绍;system(“cls”) 消屏函数;exit(0) 退出游戏;drawmg1() 画初级难度迷宫;drawmg2() 画中级难度迷宫;drawmg3() 画高级难度迷宫;control1() 控制初级难度游戏;control2() 控制中级难度游戏;control3() 控制高级难度游戏;五、算法流程图首先定义三个全局数组mg1[20][20]、mg2[30][30]、mg3[30][30]用于画出迷宫的地图;1表示墙(#),0表示空地();Introduce( )函数里如果按Enter键,则调用menu( )函数,从键盘中输入相应的提示数字,进入难度不同的游戏;游戏的执行在此只初级难度进行描述,其余的难度与其类似;选了1后调用system(”cls”)进行清屏;drawmg1()函数进行迷宫的地图的绘制,for(i=0;i<20;i++){printf("\t\t\t");for(j=0;j<20;j++){ch=mg1[i][j];switch(ch){case 4: printf("*");break;case 0: printf(" ");break;case 1: printf("#");break;}if(num++%20==0) /*每行只能输出20个字符*/printf(”\n”);}}之后调用控制函数control1()进行控制小人移动路径,在control1()函数里用do—while()语句进行循环,while(1)进行死循环,再定义四个整型a,b,m,n即:for(n=0;n<30;n++)for(m=0;m<30;m++)if(mg3[n][m]==4){a=n; /*为后面调用roadcake()实现消除小人路径进行初始赋值*/b=m;break;}用switch()语句选择方向键,在调用roadcake()函数进行消除小人路径void roadcake(int *i,int *j){int temp;temp=*i; /*进行值交换,即数组值为0和值为4进行交换*i=*j;*j=temp;}完成第一个控制之后进行清屏和画新的游戏状态图,若在游戏进行中要退出游戏,只需按0键,调用exit(0)函数结束;若要返回游戏菜单,按Esc键掉用menu ()函数即可,重复以上步骤,直达游戏结束,此时掉用menu()函数自动返回菜单。

六、程序运行效果图开始执行程序:按Enter键后:选择2后进入中级难度游戏:按键盘方向键进行游戏,当顺利结束后:与游戏菜单相同,选择不同的级别进行游戏。

七、总结本次课设在设计算法和运用语言在一定程度上遇到困难,同时有些以前不知道的函数和算法,在这次实习中通过查找资料学到了许多;觉得紧紧学好语言是不够的,得要知道怎样运用,即算法很重要;八、参考文献李春葆曾平喻丹丹《c语言程序设计(第2版)》清华大学出版社2011 九、程序清单#include<stdio.h>#include<conio.h>#include<time.h>#include<stdlib.h>void drawmg1(void);/*定义画迷宫函数*/void drawmg2(void);void drawmg3(void);void control1(void);/*定义控制函数*/void control2(void);void control3(void);void roadcake(int *i,int *j);/*定义交换函数*/void menu(void);/*定义菜单函数*/void introduce(void);/*定义游戏介绍函数*/intmg1[20][20]={{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} ,{4,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1},{1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,0,1,0,0,1},{1,1,1,0,0,1,1,1,0,0,1,1,1,1,0,0,1,0,0,1},{1,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,1,0,0,1},{1,0,0,1,1,1,1,1,1,0,0,1,1,1,0,0,1,0,0,1},{1,0,0,1,1,1,1,1,1,0,0,1,0,0,0,0,1,0,0,1},{1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1},{1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,1},{1,0,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1},{1,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,1,1,1},{1,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,1,1,1},{1,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1},{1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,1},{1,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,1,0,0,1},{1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,1},{1,0,0,1,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,1},{1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1},{1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,3},{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, };intmg2[30][30]={{1,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1},{1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0, 1,1,0,0,1},{1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,0, 1,0,0,0,1},{1,0,0,0,1,0,0,0,0,1,0,1,0,1,1,1,0,1,0,1,1,0,1,1,0, 1,0,1,0,1},{1,0,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,1,0,1,1,0,1,1,0, 1,0,1,0,1},{1,0,1,0,1,0,1,0,0,1,0,0,0,0,1,1,0,0,1,0,0,0,1,1,0, 0,1,1,0,1},{1,0,1,0,0,0,0,1,1,1,1,1,1,0,1,1,1,0,1,0,1,1,1,0,0, 1,1,0,0,1},{1,0,1,1,1,1,0,0,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,0,1, 1,1,0,1,1},{1,0,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1,1,1,0,0,1,1,0,0, 0,0,0,0,1},{1,1,1,1,0,1,0,0,0,1,1,0,1,0,1,0,0,0,0,1,0,0,1,1,1, 1,0,1,1,1},{1,0,0,0,0,0,1,1,0,1,1,0,1,0,1,0,0,0,0,1,0,0,1,1,1, 1,0,1,1,1},{1,0,1,1,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0, 0,0,0,0,1},{1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,1,1,0,0,0, 0,1,1,0,1},{1,1,1,0,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1, 1,0,0,0,1},{1,1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,1,0, 0,0,1,1,1},{1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0, 1,1,1,1,1},{1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,0, 1,1,1,1,1},{1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0, 0,0,0,0,1},{1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1, 1,1,1,0,1},{1,0,0,1,0,1,0,1,1,1,1,1,1,1,1,0,1,0,1,0,0,0,1,0,1, 1,1,1,0,1},{1,1,0,1,0,1,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1, 0,0,0,0,1},{1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1, 0,1,1,1,1},{1,1,1,1,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1, 0,0,0,0,1},{1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1, 0,1,1,0,1},{1,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,1,0,0,0,0,1,1,0, 0,0,1,0,1},{1,0,0,1,1,1,1,0,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1},{1,1,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0, 0,1,0,0,1},{1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1, 1,0,0,1,1},{1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0, 0,0,1,1,1},{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1, 1,1,1,1,1},};intmg3[30][30]={{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1, 1,1,1,1,1,1,1,1,1,1},{1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0, 1,1,0,0,1},{1,0,1,1,1,1,0,1,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,0, 1,0,0,0,1},{1,0,0,0,1,0,0,0,0,1,0,1,0,1,1,1,0,1,0,1,1,0,1,1,0, 1,0,1,0,1},{1,0,1,0,1,0,1,1,0,1,0,1,0,1,0,0,0,1,0,1,1,0,1,1,0, 1,0,1,0,1},{1,0,1,0,1,0,1,0,0,1,0,0,0,0,1,1,0,0,1,0,0,0,1,1,0, 0,1,1,0,1},{1,0,1,0,0,0,0,1,1,1,1,1,1,0,1,1,1,0,1,0,1,1,1,0,0, 1,1,0,0,1},{1,0,1,1,1,1,0,0,0,0,1,1,0,0,1,0,0,0,1,0,1,0,0,0,1, 1,1,0,1,1},{1,0,0,0,0,1,1,1,0,0,0,0,1,0,1,0,1,1,1,0,0,1,1,0,0, 0,0,0,0,1},{1,1,1,1,0,1,0,0,0,1,1,0,1,0,1,0,0,0,0,1,0,0,1,1,1,1,0,1,1,1},{1,0,0,0,0,0,1,1,0,1,1,0,1,0,1,0,0,0,0,1,0,0,1,1,1, 1,0,1,1,1},{1,0,1,1,1,0,1,1,0,1,1,0,0,0,1,0,1,1,0,1,0,0,0,0,0, 0,0,0,0,1},{1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,1,1,0,1,1,1,0,0,0, 0,1,1,0,1},{1,1,1,0,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,1,1, 1,0,0,0,1},{1,1,1,0,0,1,1,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,0,1,0, 0,0,1,1,1},{1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0, 1,1,1,1,1},{1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,0, 1,1,1,1,1},{1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0, 0,0,0,0,1},{1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1, 1,1,1,0,1},{1,0,0,1,0,1,0,1,1,1,1,1,1,1,1,0,1,0,1,0,0,0,1,0,1, 1,1,1,0,1},{1,1,0,1,0,1,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1, 0,0,0,0,1},{1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1, 0,1,1,1,1},{1,1,1,1,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1, 0,0,0,0,1},{1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1, 0,1,1,0,1},{1,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,1,0,0,0,0,1,1,0, 0,0,1,0,1},{1,0,0,1,1,1,1,0,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1,0, 1,1,1,0,1},{1,1,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0, 0,1,0,0,1},{1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,1, 1,0,0,1,1},{1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0, 0,0,0,0,4},{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1},};int road[20][20];void main(){introduce();}/*-----------------------------------------------------------------------------*//*初级游戏控制函数*/void control1(void){int a,b,m,n;char num;do /*循环取得空制键*/{for(n=0;n<20;n++)for(m=0;m<20;m++)if(mg1[n][m]==4){a=n;b=m;break;}num=getch();switch(num){case 72:if(mg1[a-1][b]!=1){roadcake(&mg1[a][b],&mg1[a-1][b]);system("cls");drawmg1();break;}case 80:if(mg1[a+1][b]!=1){roadcake(&mg1[a][b],&mg1[a+1][b]);system("cls");drawmg1();break;}case 75:if(mg1[a][b-1]!=1){roadcake(&mg1[a][b],&mg1[a][b-1]);system("cls");drawmg1();break;}case 77:if(mg1[a][b+1]!=1){roadcake(&mg1[a][b],&mg1[a][b+1]);system("cls");drawmg1();break;}case 27:system("cls");menu();break;case 48:exit(0);}if(mg1[18][19]==4){printf("\n\t------------------you are win!--------------------\n\n\n");menu();}}while(1); /*直到出口*/}/*-----------------------------------------------------------------------------*//*中级游戏控制函数*/void control2(void){int a,b,m,n;char num;do /*循环取得空制键*/{for(n=0;n<30;n++)for(m=0;m<30;m++)if(mg2[n][m]==4){a=n;b=m;break;}num=getch();switch(num){case 72:if(mg2[a-1][b]!=1){roadcake(&mg2[a][b],&mg2[a-1][b]);system("cls");drawmg2();break;}case 80:if(mg2[a+1][b]!=1){roadcake(&mg2[a][b],&mg2[a+1][b]);system("cls");drawmg2();break;}case 75:if(mg2[a][b-1]!=1){roadcake(&mg2[a][b],&mg2[a][b-1]);system("cls");drawmg2();break;}case 77:if(mg2[a][b+1]!=1){roadcake(&mg2[a][b],&mg2[a][b+1]);system("cls");drawmg2();break;}case 27:system("cls");menu();break;case 48:exit(0);}if(mg2[29][15]==4){printf("\n\t------------------you are win!--------------------\n\n\n");menu();}}while(1); /*直到出口*/}/*-----------------------------------------------------------------------------*//*高级游戏控制函数*/void control3(void){int a,b,m,n;char num;do /*循环取得空制键*/{for(n=0;n<30;n++)for(m=0;m<30;m++)if(mg3[n][m]==4){a=n;b=m;break;}num=getch();switch(num){case 72:if(mg3[a-1][b]!=1){roadcake(&mg3[a][b],&mg3[a-1][b]);system("cls");drawmg3();break;}case 80:if(mg3[a+1][b]!=1){roadcake(&mg3[a][b],&mg3[a+1][b]);system("cls");drawmg3();break;}case 75:if(mg3[a][b-1]!=1){roadcake(&mg3[a][b],&mg3[a][b-1]);system("cls");drawmg3();break;}case 77:if(mg3[a][b+1]!=1){roadcake(&mg3[a][b],&mg3[a][b+1]);system("cls");drawmg3();break;}case 27:system("cls");menu();break;case 48:exit(0);}if(mg3[0][15]==4){printf("\n\t------------------you are win!--------------------\n\n\n");menu();}}while(1); /*直到出口*/}/*--------------------------------------------------------------------------------*//*画初级谜宫函数*/void drawmg1(void){int i,j,ch,num=1;for(i=0;i<20;i++){printf("\t\t\t");for(j=0;j<20;j++){ch=mg1[i][j];switch(ch){case 4: printf("*");break;case 0: printf(" ");break;case 1: printf("#");break;}if(num++%20==0)printf("\n");}}}/*--------------------------------------------------------------------------------*//*画中级谜宫函数*/void drawmg2(void){int i,j,ch,num=1;for(i=0;i<30;i++){printf("\t\t\t");for(j=0;j<30;j++){ch=mg2[i][j];switch(ch){case 4: printf("*");break;case 0: printf(" ");break;case 1: printf("#");break;}if(num++%30==0)printf("\n");}}}/*--------------------------------------------------------------------------------*//*画高级谜宫函数*/void drawmg3(void){int i,j,ch,num=1;for(i=0;i<30;i++){printf("\t\t\t");for(j=0;j<30;j++){ch=mg3[i][j];switch(ch){case 4: printf("*");break;case 0: printf(" ");break;case 1: printf("#");break;}if(num++%30==0)printf("\n");}}}/*---------------------------------------------------------------------------*//*交换函数*/void roadcake(int *i,int *j){int temp;temp=*i;*i=*j;*j=temp;}/*---------------------------------------------------------------------------*//*游戏介绍函数*/void introduce(void){ char ch;printf("\t>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>welcome<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \n\n");printf("\t这是一个迷宫小游戏,你可以选择不同的难度进行游戏\n\n");printf("\t具体游戏操作如下:\n\n");printf("\t\t通过键盘方向↑→←↓来控制小人(*)上、右、左、下移动;\n");printf("\t\t在游戏过程中可以按Esc键返回菜单栏,按0键结束游戏!\n\n");printf("\t\t\t\t\t\t\t请按Enter键进入游戏\n");ch=getch();if(ch==13)system("cls");menu();}/*----------------------------------------------------------------------------*//*游戏菜单函数*/void menu(void){char ch;printf("\n\n\n请选择游戏难度:");printf("\t\t1:初级\n\n");printf("\t\t\t2:中级\n\n");printf("\t\t\t3:高级\n\n");printf("\t\t\t0:退出\n\n");scanf("%d",&ch);switch(ch){case 1:system("cls");drawmg1();/*初级游戏*/control1();break;case 2:system("cls");drawmg2(); /*中级游戏*/control2();break;case 3:system("cls");drawmg3(); /*高级游戏*/control3();break;case 0:exit(0);}}/*------------------------------------------------------------------------------*/还有很多功能么有实现,惭愧啊……。

相关文档
最新文档