数据结构与算法课程设计说明书-走迷宫游戏_第1页
数据结构与算法课程设计说明书-走迷宫游戏_第2页
数据结构与算法课程设计说明书-走迷宫游戏_第3页
数据结构与算法课程设计说明书-走迷宫游戏_第4页
数据结构与算法课程设计说明书-走迷宫游戏_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

PAGEPAGE1数据结构与算法课程设计说明书

学院、系:软件学院专业软件工程设计题目:走迷宫游戏需求分析设计内容:程序开始运行时显示一个迷宫地图,迷宫中央有一只老鼠,迷宫的右下方有一个粮仓。游戏的任务是使用键盘上的方向键操纵老鼠在规定的时间内走到粮仓处。设计要求:1)

老鼠形象可辨认,可用键盘操纵老鼠上下左右移动;2)

迷宫的墙足够结实,老鼠不能穿墙而过;3)

正确检测结果,若老鼠在规定时间内走到粮仓处,提示成功,否则提示失败;4)

添加编辑迷宫功能,可修改当前迷宫,修改内容:墙变路、路变墙;5)

找出走出迷宫的所有路径,以及最短路径。利用序列化功能实现迷宫地图文件的存盘和读出等功能2系统设计设定栈的抽象数据类型定义为;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)//操作结果:构造一个空栈S。DestroyStack(&S)//初始条件:栈S已存在。//操作结果:销毁栈S。ClearStack(&S)

/初始条件:栈S已存在。

//操作结果:将S清为空栈。StackLength(&S)

//初始条件:栈S已存在。

//操作结果:返回栈S的长度。GetTop(S,&e)

//初始条件:栈S已存在。

//操作结果:若栈S不空,则以e返回栈顶元素。Push(&S,e)

//初始条件:栈S已存在。

//操作结果:在栈S的栈顶插入新的栈顶元素e。Pop(&S,&e)

//初始条件:栈S已存在。

//操作结果:删除S的栈顶元素,并以e返回其值。StackTraverse(S,visit(

))

//初始条件:栈S已存在。

//操作结果:从栈底到栈顶依次对S中的每个元素调用函数visit(

).}ADTstack3:源代码#include<stdlib.h>#include<stdio.h>#defineN39#defineM39intX;intmaze[N+2][M+2];structpoint{introw,col,predecessor;}queue[512];inthead=0,tail=0;voidshoudong_maze(intm,intn){inti,j;printf("\n\n");printf("请按行输入迷宫,0表示通路,1表示障碍:\n\n");for(i=0;i<m;i++)for(j=0;j<n;j++)scanf("%d",&maze[i][j]);}voidzidong_maze(intm,intn){inti,j;printf("\n迷宫生成中,,,,\n\n");system("pause");for(i=0;i<m;i++)for(j=0;j<n;j++)maze[i][j]=rand()%2;}voidprint_maze(intm,intn){inti,j;printf("\n迷宫生成结果如下:\n\n");printf("迷宫入口\n");printf("↓");for(i=0;i<m;i++){printf("\n");for(j=0;j<n;j++){if(maze[i][j]==0)printf("□");if(maze[i][j]==1)printf("■");}}printf("→迷宫出口\n");}voidresult_maze(intm,intn){inti,j;printf("迷宫通路(用“鼠”表示)如下所示:\n\t");for(i=0;i<m;i++){printf("\n");for(j=0;j<n;j++){if(maze[i][j]==0||maze[i][j]==2)printf("□");if(maze[i][j]==1)printf("■");if(maze[i][j]==3)printf("鼠");}}}voidenqueue(structpointp){queue[tail]=p;tail++;}structpointdequeue(){head++;returnqueue[head-1];}intis_empty(){returnhead==tail;}voidvisit(introw,intcol,intmaze[41][41]){structpointvisit_point={row,col,head-1};maze[row][col]=2;enqueue(visit_point);}intmgpath(intmaze[41][41],intm,intn){X=1;structpointp={0,0,-1};if(maze[p.row][p.col]==1){printf("\n\n");printf("此迷宫无解\n\n");X=0;return0;}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){printf("\n\n");printf("迷宫路径为:\n");printf("(%d,%d)\n",p.row,p.col);maze[p.row][p.col]=3;while(p.predecessor!=-1){p=queue[p.predecessor];printf("(%d,%d)\n",p.row,p.col);maze[p.row][p.col]=3;}}else{printf("\n\n");printf("此迷宫无解!\n\n");X=0;}return0;}intmain(){inti,m,n,cycle=0;system("cls");system("color1f");printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");printf("┃必做题:走迷宫游┃\n");printf("┃姓名:智怡┃\n");printf("┃学号:1314010208┃\n");printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");while(cycle!=(-1)){printf("╔══════════════════════════════════╗\n");printf("║欢迎进入走迷宫游戏演示系统║\n");printf("║║\n");printf("║1.手动生成迷宫║\n");printf("║2.系统自动生成迷宫║\n");printf("║3.退出系统║\n");printf("╚══════════════════════════════════╝\n");printf(">>>>>>>\n");printf("请选择你的操作[]\b\b");scanf("%d",&i);switch(i){case1:printf("\n请输入行数[]\b\b");scanf("%d",&m);printf("\n");printf("请输入列数[]\b\b");scanf("%d",&n);while((m<=0||m>39)||(n<=0||n>39)){printf("\n抱歉,你输入的行列数超出预设范围(0-39,0-39),请重新输入:\n\n");printf("请输入行数[]\b\b");scanf("%d",&m);printf("\n");printf("请输入列数[]\b\b");scanf("%d",&n);}shoudong_maze(m,n);print_maze(m,n);mgpath(maze,m,n);if(X!=0)result_maze(m,n);printf("\n\nPressEnterContiue!\n");getchar();while(getchar()!='\n');break;case2:printf("\n请输入行数[]\b\b");scanf("%d",&m);printf("\n");printf("请输入列数[]\b\b");scanf("%d",&n);while((m<=0||m>39)||(n<=0||n>39)){printf("\n抱歉,你输入的行列数超出预设范围(0-39,0-39),请重新输入!\n\n");printf("请输入行数[]\b\b");scanf("%d",&m);printf("\n");printf("请输入列数[]\b\b");scanf("%d",&n);}

温馨提示

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

评论

0/150

提交评论