最简单的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.编程语言在解决迷宫问题中的应用。

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

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

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

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

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

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

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

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

迷宫问题C 实验报告

迷宫问题C  实验报告

printf("输入迷宫列数 n(0<n<=20 输入 0 时退出) :\n"); scanf("%d",&n); if(m==0||n==0||m>20||n>20) { printf("行列数输入不合要求!"); break; } int move[4][2]={{0,1},{1,0},{0,-1},{-1, 0}}; typedef struct { int x,y; }position; char maze[22][22]; position stack[10000]; int x,y,i,ok; int top; position p; srand(time(0)); for(x=1;x<=m;x++) for(y=1;y<=m;y++) maze[x][y]=48+rand()%2; maze[1][1]='0';maze[m][n]='0'; for(x=0;x<=m+1;x++) { maze[x][0]='1';maze[x][n+1]='1'; } for(y=0;y<=m+1;y++) { maze[0][y]='1';maze[m+1][y]='1'; } p.x=1;p.y=1; top=1;stack[top]=p; maze[1][1]='.'; do{ p=stack[top]; ok=0;i=0; while((ok==0)&&(i<4)) { x=p.x+move[i][0]; y=p.y+move[i][1]; if(maze[x][y]=='0') { p.x=x;p.y=y;

c走迷宫课程设计报告

c走迷宫课程设计报告

c 走迷宫课程设计报告一、课程目标知识目标:1. 学生能理解并掌握走迷宫的基本概念,包括迷宫的构成元素、规则及解决策略。

2. 学生能够运用方向辨别、空间想象力以及逻辑推理能力,解决迷宫问题。

3. 学生能够结合数学知识,如坐标系、路径选择等,分析并优化迷宫走法。

技能目标:1. 培养学生运用观察、分析、推理等解决问题的能力,提高解决复杂迷宫问题的效率。

2. 培养学生团队协作和沟通能力,通过小组讨论,共同探索迷宫解法。

3. 提高学生的动手操作能力,通过制作简易迷宫,加深对迷宫结构的理解。

情感态度价值观目标:1. 培养学生对迷宫探索的兴趣,激发学习数学的热情,增强自信心。

2. 培养学生面对困难时保持耐心、细心的态度,勇于尝试,善于总结经验。

3. 培养学生合作意识,学会尊重他人,分享学习成果。

课程性质:本课程为趣味数学课程,旨在通过走迷宫活动,将数学知识与实践相结合,提高学生的综合素养。

学生特点:学生处于小学高年级阶段,具有一定的方向感、空间想象力和逻辑推理能力,但需加强合作与沟通能力的培养。

教学要求:注重培养学生的动手实践能力,将理论知识与实际操作相结合,使学生在轻松愉快的氛围中学习,提高学习效果。

通过分解课程目标为具体学习成果,为教学设计和评估提供明确方向。

二、教学内容本课程教学内容紧密结合课程目标,选取以下内容进行组织教学:1. 迷宫基础知识:包括迷宫的起源、构成元素、分类及规则,让学生了解迷宫的背景知识,为解决迷宫问题奠定基础。

2. 方向辨别与空间想象力:运用教材中关于方向的知识,培养学生的空间想象力,通过实际操作,让学生学会在迷宫中正确判断方向。

3. 逻辑推理与路径选择:结合教材中逻辑推理内容,指导学生运用排除法、递推法等方法,寻找迷宫的最佳路径。

4. 数学知识在实际中的应用:运用坐标系、几何图形等数学知识,分析迷宫结构,提高解决问题的效率。

5. 小组合作与沟通:组织学生进行小组讨论,共同解决迷宫问题,培养学生的团队协作能力和沟通能力。

走迷宫实训报告

走迷宫实训报告

目录一、课题需求描述 (2)1.1走迷宫游戏 (2)二、总体功能与数据结构设计 (2)2.1总体功能结构 (2)2.2 数据结构设计 (2)三、算法设计和程序设计 (3)3.1 原理 (3)3.2 流程图 (3)3.3 算法设计 (4)四、调试与测试 (9)五、设计总结 (11)5.1 收获 (11)5.2 存在问题 (11)一、课题需求描述1.1走迷宫游戏程序开始运行时显示一个迷宫地图,迷宫中央有一只老鼠,迷宫的右下方有一个粮仓。

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

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

利用序列化功能实现迷宫地图文件的存盘和读出等功能。

二、总体功能与数据结构设计2.1总体功能结构实现概要设计中定义的所有数据类型及操作的伪代码算法节点类型和针类型;迷宫矩阵类型:int maze[M+2][N+2];为方便操作使其为全局变量;迷宫中节点类型及队列类型:struct point{int row,col,predecessor} que[512] 。

2.2 数据结构设计①屏幕上显示操作菜单②构建一个二维数组maze[M+2][N+2]用于存储迷宫矩阵③自动或手动生成迷宫,即为二维数组maze[M+2][N+2]④构建一个队列用于存储迷宫路径⑤建立迷宫节点struct point,用于存储迷宫中每个节点的访问情况⑥实现搜索算法三、算法设计和程序设计3.1 原理①屏幕上显示操作菜单②构建一个二维数组maze[M+2][N+2]用于存储迷宫矩阵③自动或手动生成迷宫,即为二维数组maze[M+2][N+2]④构建一个队列用于存储迷宫路径⑤建立迷宫节点struct point,用于存储迷宫中每个节点的访问情况⑥实现搜索算法3.2 流程图3.3 算法设计①主函数main()②手动生成迷宫函数shoudong_maze()③自动生成迷宫函数zidong_maze()④将迷宫打印成图形print_maze()⑤打印迷宫路径(若存在路径) result_maze()⑥入队enqueue()⑦出队dequeue()⑧判断队列是否为空is_Empty()⑨访问节点visit()⑩搜索迷宫路径mgpath()数据结构算法设计:①手动生成迷宫void shoudong_maze(int m,int n) { int i,j;cout<<endl;cout<<"请按行输入迷宫,0表示通路,1表示障碍(每输入一个数字请按空格或回车):";cout<<endl;for(i=0;i<m;i++)for(j=0;j<n;j++)cin>>maze[i][j]; //为二维数组maze[M+2][N+2]赋值}②系统自动生成迷宫void zidong_maze(int m,int n){int i,j;cout<<"迷宫生成中......"<<endl;system("pause");for(i=0;i<m;i++)for(j=0;j<n;j++)maze[i][j]=rand()%2; //为二维数组maze[M+2][N+2]赋值//由于rand()产生的随机数是从0到RAND_MAX//RAND_MAX是定义在stdlib.h中的,其值至少为32767)//要产生从X到Y的数,只需要这样写:k=rand()%(Y-X+1)+X;}③搜索迷宫路径int mgpath(int maze[41][41],int m,int n){X=1;struct point p={0,0,-1};if(maze[p.row][p.col]==1){cout<<"========================================"<<endl;cout<<"此迷宫无解"<<endl;X=0;return 0;}maze[p.row][p.col]=2;enqueue(p);while(!is_Empty()){p=dequeue();if((p.row==m-1)&&(p.col==n-1))break;if((p.col+1<n)&&(maze[p.row][p.col+1]==0))visit(p.row,p.col+1,maze);if((p.row+1<m)&&(maze[p.row+1][p.col]==0))visit(p.row+1,p.col,maze);if((p.col-1>=0)&&(maze[p.row][p.col-1]==0))visit(p.row,p.col-1,maze);if((p.row-1>=0)&&(maze[p.row-1][p.col]==0))visit(p.row-1,p.col,maze);}if(p.row==m-1&&p.col==n-1){cout<<"========================================"<<endl;cout<<"迷宫路径为:"<<endl;cout<<p.row<<p.col;maze[p.row][p.col]=3;while(p.predecessor!=-1){p=queue[p.predecessor];cout<<p.row<<p.col;maze[p.row][p.col]=3;}}else{ cout<<"========================================"<<endl;cout<<"此迷宫无解!"<<endl;X=0;} return 0;}④将迷宫打印成图形void print_maze(int m,int n){int i,j;cout<<"迷宫生成结果如下:"<<endl;cout<<"迷宫入口"<<endl;cout<<"↓";for(i=0;i<m;i++){cout<<endl;for(j=0;j<n;j++){if(maze[i][j]==0)cout<<"□";//通路if(maze[i][j]==1)cout<<"■";//此路不通}}cout<<"→迷宫出口"<<endl;}⑤通路路径示意图void result_maze(int m,int n){int i,j;cout<<"迷宫通路(用“鼠”表示)如下所示:"<<endl;for(i=0;i<m;i++){cout<<endl;for(j=0;j<n;j++){if(maze[i][j]==0||maze[i][j]==2)cout<<"□";if(maze[i][j]==1)cout<<"■";if(maze[i][j]==3)cout<<"鼠";}}}void enqueue(struct point p)//入队{queue[tail]=p;tail++;}struct point dequeue()//出队{head++;return queue[head-1];}bool is_Empty() //判断队列是否为空{return head==tail;}⑥主函数int main(){int i,m,n,cycle=0;system("cls");system("color 0D");while(cycle!=(-1)){ //此处省略主界面设计代码cout<<endl<<endl;cout<<"Please input your selection>>>>>>>>>>"<<endl;cin>>i;switch(i){case 1:cout<<"请输入行数>>>>>>>>>>"<<endl;cin>>m;cout<<endl;cout<<"请输入列数>>>>>>>>>>"<<endl;cin>>n;while((m<=0||m>39)||(n<=0||n>39)){cout<<"您输入的行列数超出范围,请输入0-39的数!"<<endl;cout<<"请输入行数>>>>>>>>>>"<<endl;cin>>m;cout<<endl;cout<<"请输入列数>>>>>>>>>>"<<endl;cin>>n;}shoudong_maze(m,n);print_maze(m,n);mgpath(maze,m,n);if(X!=0)result_maze(m,n);cout<<"Press Enter Contiue!"<<endl;getchar();while(getchar()!='\n');break;case 2:cout<<"请输入行数>>>>>>>>>>"<<endl;cin>>m;cout<<endl;cout<<"请输入列数>>>>>>>>>>"<<endl;cin>>n;while((m<=0||m>39)||(n<=0||n>39)){cout<<"您输入的行列数超出范围,请输入0-39的数!"<<endl;cout<<"请输入行数>>>>>>>>>>"<<endl;cin>>m;cout<<endl;cout<<"请输入列数>>>>>>>>>>"<<endl;cin>>n;}zidong_maze(m,n);print_maze(m,n);mgpath(maze,m,n);if(X!=0)result_maze(m,n);cout<<"Press Enter Contiue!"<<endl;getchar();while(getchar()!='\n');break;case 3:cycle=(-1);break;default:cout<<"\n";cout<<"您的输入有误!请重新输入!"<<endl;cout<<"Press Enter Contiue!"<<endl;getchar();while(getchar()!='\n');break;}}return 0;}四、调试与测试1.主界面如图所示:2.手动生成迷宫(图为输入过程):3.执行后如图所示:4.系统自动生成迷宫(图为输入过程)5.执行后如图所示:五、设计总结5.1 收获通过这几个星期的算法设计技能训练,使我对数据结构这门课程有了更进一步的了解,对计算机方面的基础知识等也有了进一步的了解,在算法设计的过程中,往往程序本身不是最主要的,而最重要的则是如何在编写完成能够运行程序之后想出更好解决办法来解决某个问题,算法设计技能训练让我的思维变得更加开阔,考虑问题也更加全面了。

迷宫问题实验报告(c++编写,附源代码)

迷宫问题实验报告(c++编写,附源代码)

迷宫问题实验报告级班年月日姓名学号_1.实验题目以一个mXn的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。

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

2.需求分析本程序使用VC编写,实现设定迷宫或自动生成迷宫长方阵表的功能,并且求出一条从指定入口到指定出口的通路,或得出没有通路的结论。

①输入的形式和输入值的范围:A.输入指定的数字,以此选择迷宫的创建方式,分为手动创建迷宫和自动创建迷宫B. 输入迷宫阵表的行数和列数,行数和列数不超过40行C. 手动创建迷宫时,需要输入迷宫结点的通畅和障碍情况,0和1分别表示迷宫中的通路和障碍。

②输出的形式:输出没有通路的结论,或者输出一个长方阵表,其中路径的每个结点都输出→、↓、←、↑之一,表示从当前结点到下一个结点的方向。

③程序所能达到的功能:实现设定迷宫或自动生成迷宫长方阵表的功能,并且求出一条从指定入口到指定出口的通路(迷宫的入口指定为坐标为(1,1)的结点,迷宫的出口指定为坐标为(迷宫最大行,迷宫最大列)的结点),或得出没有通路的结论。

④测试数据:输入数据:A.出现选择生成迷宫方式的菜单时,输入1(即手动输入数据,生成迷宫);B.输入迷宫的行数和列数,行数输入3,列数输入3;C.输入每个迷宫结点的信息:0 0 11 0 01 0 0输出结果:→↓ 11 →↓1 0 03.概要设计1)为了实现上述程序功能,需要定义迷宫的抽象数据类型:typedef struct//定义迷宫结构体{int maze_array[maxsize][maxsize];//二维数组存放迷宫每个点是通畅或阻隔的信息int max_x,max_y; //迷宫的行数和和列数}2)定义迷宫中点的指针的结构体typedef struct point{int vex_x,vex_y; //结点的横纵坐标(横坐标为行号,纵坐标为列号)struct point *ahead;//在链栈中,指向前一个结点的指针int direction; //从当前结点走至下一个结点的方向};基本操作:A. Maze creat_manual()初始条件:无操作结果:手动创建一个迷宫。

迷宫实验报告

迷宫实验报告

一、实验内容3、迷宫问题。

假设迷宫由m行n列构成,有一个出口和一个入口,入口坐标为(1,1),出口坐标为(m,n),试设计并验证以下算法:找出一条从入口通往出口的路径,或报告一个“无法通过”的信息。

(1)用C语言实现顺序存储队列上的基本操作,然后利用该队列的基本操作找出迷宫的一条最短路径。

(2)设计一个二维数组MAZE[m+2][n+2]表示迷宫,数组元素为0表示该位置可以通过,数组元素为1表示该位置不可以通行。

MAZE[1][1]、MAZE[m][n]分别为迷宫的入口和出口。

(3)输入迷宫的大小m行和n列,动态生成二维数组;由随机数产生0或1,建立迷宫,注意m*n的迷宫需要进行扩展,扩展部分的元素设置为1,相当于在迷宫周围布上一圈不准通过的墙。

(4)要求输出模拟迷宫的二维数组;若存在最短路径,则有出口回溯到入口(出队列并利用栈实现),再打印从入口到出口的这条路径,例如(1,1),......,(i,j),......,(m,n);若没有路径,则打印“No path”。

(5)迷宫的任一位置(i,j)上均有八个可移动的方向,用二维数组Direction存放八个方向的位置偏移量。

Direction[8][2]={{0,1},{1,1},{0,-1},{-1,-1},{1,-1},{1,0},{-1,0},{-1,1}};(6)为避免出现原地踏步的情况需要标志已经通过的位置,采用一个标志数组MARK[m+2][n+2],初值均为0,在寻找路径的过程中,若通过了位置(i,j),则将MARK[i][j]置为1。

(7)为了记录查找过程中到达位置(i,j)及首次到达(i,j)的前一位置(i_pre,j_pre),需要记住前一位置(i_pre,j_pre)在队列中的序号pre,即队列中数据元素应该是一个三元组(i,j,pre)。

(8)搜索过程简单下:将入口MAZE[1][1]作为第一个出发点,依次在八个方向上搜索可通行的位置,将可通行位置(i,j,pre)入队,形成第一层新的出发点,然后依次出队,即对第一层中各个位置分别搜索它所在八个方向上的可通行位置,形成第二层新的出发点,...,如此进行下去,直至达到出口MAZE[m][n]或者迷宫所有位置都搜索完毕为止。

迷宫-实验报告

迷宫-实验报告

电子科技大学计算机学院标准实验报告(实验)课程名称数据结构与算法分析电子科技大学教务处制表电子科技大学第二次独立项目一、实验项目名称:迷宫二、实验要求1.创建迷宫,并且能够打印出通路。

2.要求速度尽量快三、具体分工蒋程:主要代码的编写,prim算法的实现。

孙翔宇:A* 算法的实现。

赵毅卓:测试项目功能,撰写了实验报告。

四、实验步骤1.数据结构分析A* 算法部分的PathNode使用了单链表来记录整个路径。

prim算法生成迷宫的时候需要用到队列来存储随机移动的方向。

2.算法分析与设计1、prim算法用于生成迷宫。

2、A* 算法用于寻路。

prim算法思路:随机选择一个白色格子[i,j] (实际位置为i*2+1,j*2+1)作为当前正在访问的格子,同时把该格子放入一个已经访问的列表中。

循环以下操作,直到所有的格子都被访问到:1.搜索当前访问格子的四周(上下左右)的格子,在这些格子中随机选择一个未访问的格子,如果找到,则把该格子和当前访问的格子中间的墙打通(置为1,因为初始化0比较简单),并把该格子作为当前访问的格子,并放入访问列表。

2.如果周围所有的格子都已经访问过,则从已访问的列表中,随机选取一个作为当前访问的格子。

当出现可能为死点的节点的时候,把它与周围可相连的墙都打通。

A*算法思路:一、在开始列表中查找具有最小F值的节点,并把查找到的节点作为当前节点;二、把当前节点从OPEN列表中删除,并加入到CLOSE列表中;三、对当前节点相邻的每一个节点依次执行以下步骤:1、遍历所有节点,如果相邻节点不可通行或者该节点已经在CLOSE列表中,则什么操作也不执行;2、如果该相邻节点不在OPEN列表中,则将该节点添加到OPEN列表中,并将该相邻节点的父节点设置当前节点,同时计算保存相邻节点的F值;3、如果该相邻节点在OPEN表中, 则判断若经由当前节点到达该相邻节点的F值是否小于原来保存的F值,若小于,则将该相邻节点的父节点设为当前节点,并重新设置该相邻节点的F值.四、若当终点节点被加入到开发列表作为待检验节点时,表示路径已找到,此时应终止循环;若当开放列表为空,表示没有中开始节点到终点节点的路径,此时循环结束;3.算法时间复杂度分析prim算法:O(n^2)A* 算法:O(n^2)4.核心程序(1)打包的应用:maze.apk(2)项目源码:Maze\main\java\com\pigrange\maze5.测试结果:一.主要界面1.根据输入的迷宫尺寸(10-80)自动生成随机迷宫。

迷宫游戏实习报告

迷宫游戏实习报告

迷宫游戏实习报告一、引言随着电子游戏的普及,越来越多的人开始游戏的设计与开发。

为了深入了解游戏开发的过程,我参与了一个迷宫游戏的设计与开发项目。

在这份实习报告中,我将详细介绍我在这个项目中的工作经历、所学到的技能和经验,以及对我对游戏开发的理解。

二、项目背景这个迷宫游戏项目是由我的导师和一家游戏公司合作开展的。

目标是设计并开发一款适合儿童玩的迷宫游戏,帮助他们在娱乐中学习。

我作为项目团队的一员,负责了游戏的部分设计和程序编写工作。

三、工作经历1、游戏设计在游戏设计阶段,我主要负责了迷宫游戏的结构设计、角色设定和游戏关卡的设计。

我首先绘制了迷宫的草图,然后设计了游戏中的角色和场景,最后制定了游戏关卡的难度和分布。

这个过程中,我学到了如何从玩家的角度出发,设计有趣且富有挑战性的游戏关卡。

2、程序编写在程序编写阶段,我使用了一种面向对象的编程语言,实现了游戏的核心逻辑。

我首先编写了游戏的主程序,然后实现了角色的移动和迷宫的渲染。

我通过编写测试用例,确保了游戏的稳定性和可玩性。

这个过程中,我深刻体会到了编程的乐趣和挑战。

四、技能与经验通过这个项目,我掌握了一些关键的游戏开发技能和经验。

我学会了如何使用绘图软件进行游戏设计和原型制作。

我掌握了面向对象编程的基本知识和实践技巧。

我还学会了如何与团队成员有效沟通,协作完成项目任务。

我学会了如何对游戏进行测试和优化,确保游戏的稳定性和可玩性。

五、结论与展望通过参与这个迷宫游戏项目,我对游戏开发有了更深入的理解。

我相信这个经验将对我的未来职业发展产生积极影响。

未来,我计划继续学习和掌握更多的游戏开发技能,并尝试开发自己的游戏作品。

同时,我也希望能与其他游戏开发者进行更深入的交流和学习,共同推动游戏行业的发展。

六、致谢我要感谢我的导师和项目团队的所有成员,他们的支持和帮助使这个项目得以成功完成。

我也要感谢那家游戏公司给予我们的宝贵机会,让我们能够亲身参与到游戏开发的过程中。

C程序课程设计报告—走迷宫

C程序课程设计报告—走迷宫

C程序课程设计报告—走迷宫一课题分析1.1 设计要求走迷宫:绘制和选择迷宫地图,系统能够自动寻找出口,支持鼠标和键盘操作。

通过画图函数设定迷宫,运用数据结构的相关知识,利用一定的算法,实现单步找寻迷宫出口的操作。

1.2 实现功能小游戏,游戏者从左侧入口处走到右侧的出口处,则胜;中途退出,则败。

二整体设计2.1框架设计1.定义操作键键码,用#define实现。

2.系统BGI初始化模块:3.画出迷宫模块:其中包括边框、出口、入口、墙壁等相关信息;用函数drawmaze()实现此操作。

4.定义迷宫中的人模块:用函数move()实现此操作。

实现点的移动,并判断是否到达出口。

5.退出系统模块:用if函数进行判断,如胜则输出-You win,如败则输出you lose.用函数getch()查看结果。

三详细设计3.1界面设计此游戏界面采用图形设计。

主界面设计如下:图1 走迷宫图3.2结构设计:用if语句实现人的坐标移动和判断游戏者输赢。

四总结参考文献暂无附录#include<stdlib.h>#include<graphics.h>/*定义操作键键码*/#define UP 0x4800/*上移--方向键up*/#define DOWN 0x5000/*下移--方向键down*/#define LEFT 0x4b00/*左移--方向键left*/#define RIGHT 0x4d00/*右移--方向键right*/#define ESC 0x011b#define midx getmaxx()/2#define midy getmaxy()/2河北大学电子信息工程学院2008级C程序设计课程设计报告void initgr(void) /* BGI初始化*/{int gd = DETECT, gm = 0; /* 和gd = VGA,gm = VGAHI是同样效果*/registerbgidriver(EGA VGA_driver);/* 注册BGI驱动后可以不需要.BGI文件的支持运行*/initgraph(&gd, &gm, "");}void drawmaze()/* 画出迷宫*/{rectangle(midx-200,midy-200,midx+200,midy+200);/* 画出边框*/setcolor(BLACK);line(midx-200,200,midx-200,226);/* 画出迷宫入口*/line(midx+200,300,midx+200,326);/* 画出迷宫出口*/setcolor(WHITE);line(midx-150,midy-200,midx-150,midy-150);/* 画出迷宫内的墙壁*/line(midx-150,midy-150,midx-170,midy-150);line(midx-170,midy-150,midx-170,midy-100);line(midx-170,midy-75,midx-170,midy+170);line(midx-170,midy+170,midx+100,midy+170);line(midx+120,midy+170,midx+170,midy+170);line(midx+120,midy+170,midx+120,midy+30);line(midx+120,midy,midx+120,midy-50);line(midx+120,midy-50,midx+70,midy-50);line(midx+100,midy+170,midx+100,midy+80);line(midx+70,midy+170,midx+70,midy-200);line(midx,midy+170,midx,midy);line(midx,midy-30,midx,midy-130);line(midx,midy-130,midx-50,midy-130);line(midx-50,midy-130,midx-50,midy-200);line(midx-170,midy+30,midx-100,midy+30);line(midx-70,midy+30,midx,midy+30);line(midx-100,midy+30,midx-100,midy+100);第 3 页共 6 页line(midx-100,midy+130,midx-100,midy+170);line(midx-130,midy+30,midx-130,midy+150);line(midx-110,midy-200,midx-110,midy-50);line(midx-110,midy-50,midx-50,midy-50);line(midx-50,midy-50,midx-50,midy+30);line(midx-170,midy,midx-65,midy);line(midx+150,midy-200,midx+150,midy+170);}void move(){int yes=1;/* 循环的条件*/int x,y;/* 点的坐标,点相当于迷宫中的人*/int key;x=midx-200;y=214;putpixel(x,y,WHITE);while(yes)/* 实现点的重复移动*/{key=bioskey(0);if(key==UP)/* 如果键入上键,位置上移*/{putpixel(x,y,BLACK);y-=5;if(getpixel(x,y)==WHITE)/* 如果改变后的坐标是墙壁,将坐标回到原先的位置,点不会移动*/ y+=5; /* 如果不是墙壁,实现点的移动*/putpixel(x,y,WHITE);/* 在坐标处画点*/}if(key==DOWN)/* 如果键入下键,位置下移?*/{河北大学电子信息工程学院2008级C程序设计课程设计报告putpixel(x,y,BLACK);y+=5;if(getpixel(x,y)==WHITE)y-=5;putpixel(x,y,WHITE);}if(key==LEFT)/* 如果键入左键,位置左移*/{putpixel(x,y,BLACK);x-=5;if(getpixel(x,y)==WHITE)x+=5;putpixel(x,y,WHITE);}if(key==RIGHT)/* 如果键入上键,位置上移*/{putpixel(x,y,BLACK);x+=5;if(getpixel(x,y)==WHITE)x-=5;putpixel(x,y,WHITE);}if(key==ESC){cleardevice();setcolor(WHITE);settextstyle(0,0,3);outtextxy(midx-100,midy,"You lose!");sleep(2);yes=0;}if(x==midx+200&&y>300&&y<326)/* 判断是否到出口位置*/{sleep(1);cleardevice();第 5 页共 6 页setcolor(WHITE);settextstyle(0,0,3);outtextxy(midx-100,midy,"You win!");/* 找到出口位置,输出文本“You win!”*/ setcolor(GREEN);settextstyle(0,0,1);outtextxy(400,400,"Designed by");outtextxy(500,430,"Jianing");outtextxy(500,460,"Jiqiaoyao");sleep(2);yes=0;}}}int main(void){initgr(); /* BGI初始化*/drawmaze();move();getch(); /* 暂停一下,看看前面绘图代码的运行结果*/closegraph(); /* 恢复TEXT屏幕模式*/return 0;}。

c课程设计迷宫小游戏

c课程设计迷宫小游戏

c 课程设计迷宫小游戏一、课程目标知识目标:1. 学生能理解并掌握迷宫小游戏的基本概念,包括迷宫结构、路径搜索等。

2. 学生能够运用所学知识,设计并实现一个简单的迷宫小游戏。

技能目标:1. 学生能够运用编程语言,实现迷宫的生成、路径的寻找及游戏逻辑。

2. 学生通过合作实践,提高问题解决能力和团队协作能力。

情感态度价值观目标:1. 学生培养对编程和游戏的兴趣,激发创新思维和探究精神。

2. 学生在合作过程中,学会尊重他人意见,培养良好的沟通能力和团队精神。

3. 学生通过课程学习,认识到计算机科学在实际应用中的重要性,增强学习动力。

分析:本课程为五年级计算机科学课程,结合学生年龄特点和已有知识水平,注重培养实际操作能力和团队协作能力。

课程性质为实践性较强的项目式学习,以迷宫小游戏为载体,引导学生掌握计算机编程基础,培养解决问题的能力。

通过分解课程目标,使学生在完成具体学习成果的过程中,达到预期知识、技能和情感态度价值观的全面提升。

二、教学内容1. 迷宫理论基础知识:- 迷宫的定义、分类及特点- 迷宫的数学原理,如欧拉路径、连通图等2. 编程语言基础:- 控制结构(条件语句、循环语句)- 数据结构(数组、列表)- 函数定义与调用3. 迷宫小游戏设计与实现:- 迷宫地图的创建与显示- 角色移动与碰撞检测- 路径搜索算法(如深度优先搜索、广度优先搜索)- 游戏逻辑设计与实现4. 项目实践与团队协作:- 分组合作,明确角色分工- 项目计划与进度管理- 代码编写与调试- 成果展示与评价教学内容安排与进度:第一课时:迷宫理论基础知识学习,了解迷宫的数学原理第二课时:编程语言基础知识回顾,为迷宫游戏编写做准备第三课时:迷宫地图的创建与显示,学习相关编程技巧第四课时:角色移动与碰撞检测,实践编程知识第五课时:路径搜索算法学习,为游戏逻辑打基础第六课时:游戏逻辑设计与实现,分组实践第七课时:项目展示与评价,总结反思教学内容与教材关联:本章节教学内容与教材中关于编程基础、数据结构、控制结构等内容紧密相关,结合迷宫游戏项目,使学生在实践中掌握计算机科学知识。

走迷宫-实验报告

走迷宫-实验报告

数据结构课程设计报告题目:迷宫问题院系名称:专业名称:班级:学号:学生姓名:指导教师:时间:一、课程设计目的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;确定放入栈中的元素的存储结构,表明通道块在路径上的“序号”,通道块的坐标位置以及下一步要走的方向。

  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);}}/*------------------------------------------------------------------------------*/还有很多功能么有实现,惭愧啊……。

相关文档
最新文档