|
迷宫程序1.10版
迷宫程序1.10版(1)
程序目的: 输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并 显示在屏幕上。 程序实现: 可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的 文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载 入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫 时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。 否则会出现错误信息。输入开始时全是墙,用上下左右键移动, 用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以 将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果, 找到路径时,屏幕下方会出现Path found,否则出现Path not found。 程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。 不可以在/data/vc/VC上编译。 下载DOS版和windows版的迷宫游戏全部代码 用户名:migong ---------------------------------------------------------------------------------- /* MazePath Demo BY Turbo C 2.0 Copyright(c) RoverUnion. All right reserved. Filename: Maze.c Author Dongchengyu. Ver 1.10 */ #include <sio.h> #include <slib.h> #include <malloc.h> #include <conio.h> #include <dos.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define F9 0x43 #define Esc 0x1b #define Del 0x53 #define Home 0x47 #define End 0x4f #define Space 0x20 #define Up 0x48 #define Down 0x50 #define Left 0x4b #define Right 0x4d #define Enter 0x0d #define F2 0x3c #define F3 0x3d #define STACK_INIT_SIZE 200 #define STACKINCREMENT 10 typedef int Boolean; typedef int Status; typedef suct { int x; int y; } PosType; typedef suct { int ord; PosType seat; int di; } SElemType; typedef suct { int ; int foot; int mark; } MazeType; typedef suct { SElemType *base; SElemType *top; int stacksize; } Stack; int Maze[20][30]; MazeType maze[20][30]; PosType StartPlace; PosType EndPlace; int count; int m,n; Boolean b_start=FALSE,b_end=FALSE; void CreatMaze(void); Status SaveMaze(char *filename); Status LoadMaze(char *filename); void Error(char *message); Status InitStack(Stack *s); Status DesoyStack(Stack *s); Status ClearStack(Stack *s); Boolean StackEmpty(Stack *s); int StackLength(Stack *s); Status Push(Stack *s,SElemType e); SElemType Pop(Stack *s,SElemType e); Status GetTop(Stack *s,SElemType *e); Status StackTraverse(Stack *s,Status (* visit)(SElemType *se)); Boolean Pass(PosType curpos); void MarkPrint(PosType seat); void FootPrint(PosType curpos); PosType NextPos(PosType seat,int di); Status MazePath(PosType start,PosType end); void CreatMaze(void) /* Form the maze. */ { void Error(char *message); Status SaveMaze(char *filename); Status LoadMaze(char *filename); int i,j; int x,y; char c; char savename[12],loadname[12]; Boolean flag=FALSE,load=FALSE; clrscr(); printf("Menu:\n\n"); printf("1.Load Mazefile:(*.dd)\n\n"); printf("2.Input Maze:\n\n"); printf("Input your choice: "); do { c=getch(); switch(c) { case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break; case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break; case Esc: sleep(1); exit(1); default: break; } } while(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&&c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ; if(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''') { printf("\n\nLoadName: "); scanf("%s",loadname); if(LoadMaze(loadname)) { sleep(1); load=TRUE; } else { gotoxy(1,9); printf("Load fail! "); } } if(!load) { printf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n"); printf("\nInput Length :\n"); scanf("%d",&m); printf("\nInput Width :\n"); scanf("%d",&n); if(m<4||n<4) Error("Input"); if(m>30||n>20) Error("Maze too large"); for(i=0;i<30;i ) for(j=0;j<20;j ) Maze[j][i]=2; StartPlace.x=0; StartPlace.y=0; EndPlace.x=0; EndPlace.y=0; clrscr(); printf("\n");<
BR> for(i=1;i<=n;i ) { for(j=1;j<=m;j ) { printf(" #"); Maze[i-1][j-1]=0; } printf("\n"); } } gotoxy(65,5); printf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall"); gotoxy(65,7); printf("Start:Home"); gotoxy(65,9); printf("End:End"); gotoxy(65,11); printf("Delete Wall:Del"); gotoxy(65,13); printf("Enter Wall:Enter"); gotoxy(65,15); printf("Save Maze:F2"); gotoxy(65,17); printf("Complete:F9"); gotoxy(65,19); printf("Exit:Esc"); gotoxy(4,3); x=4;y=3; do { c=getch(); switch(c) { case Up: if(y>3) { y--; gotoxy(x,y); } break; case Down: if(y<n) { y ; gotoxy(x,y); } break; case Left: if(x>4) { x-=2; gotoxy(x,y); }
来源:十度教育 作者: 关键字:迷宫程序1.10版 发表日期:2006-6-11 2:02:14 网页显示有限 阅读全文请下载本文完整版WORD文档
上一篇: 下一篇:排序算法演示:冒泡法
共5页 9 7 [1] [2] [3] [4] [5] 8 :>
2008-11-23 20:29:46
|