/************************************************************************\ 迷宫路径搜索的过程显示,编译环境 : TC Author : Deng Lanzhong / 江南孤峰 Time : 07--6--14 Link me : Email: lingdlz@163.com qq: 403324669\************************************************************************/ #include <stdio.h>#include <graphics.h>#include <time.h>#include <setjmp.h> #define MAZE_X 15 /* 迷宫宽度 */#define MAZE_Y 10 /* 迷宫高度 */ char maze[MAZE_Y+2][MAZE_X+2]; /* 定义迷宫 */int maze_x_s = (640 - MAZE_X * 20) / 2; /* 迷宫起始横坐标 */int maze_y_s = (480 - MAZE_Y * 20)/2-40; /* 迷宫起始纵坐标 */int search_result = 1; /* 迷宫搜索结果 */jmp_buf jumper; /* 非局部跳转 */ /* 创建随机迷宫 */void CreateRandMaze(void){ int i,j; for(i = 0; i < MAZE_X+2; i++){ maze[MAZE_Y+1][i] = maze[0][i] = 1; maze[i][0] = maze[i][MAZE_X+1] = 1; } srand(time(NULL)); for(i=1; i <= MAZE_Y; i++) for(j=1; j <= MAZE_X; j++){ if(rand()%4) maze[i][j] = 0; else maze[i][j] = 1; } maze[MAZE_Y][MAZE_X] = 0;} /* 初始化界面 */void InitFace(){ int i,j,x,y,color; setcolor(BLUE); x = maze_x_s; y = maze_y_s; outtextxy(x+10,y-20," MAZE PATH SEARCHING (c) Deng LanZhong"); outtextxy(x+10,y+50+MAZE_Y*20,"QQ:403324669 Email:lingdlz@163.com"); setcolor(YELLOW); for(i=0; i < MAZE_Y+2; i++) for(j=0; j < MAZE_X+2; j++){ if(maze[i][j]) setfillstyle(HATCH_FILL, YELLOW); else setfillstyle(EMPTY_FILL, YELLOW); bar(x+j*20,y+i*20,x+20+j*20,y+20+i*20); }} /* 闲置时间处理 */void OnIdle(void){ if(kbhit()){ if(getch()==27) longjmp(jumper,1); } sleep(1);} /* 搜索迷宫路径 */void SearchPath(int x, int y){ OnIdle(); maze[y][x] = 2; setfillstyle(SOLID_FILL, RED); bar(maze_x_s+x*20,maze_y_s+y*20,maze_x_s+x*20+20,maze_y_s+y*20+20); if(x == MAZE_X && y == MAZE_Y){ search_result = 0; longjmp(jumper,1); } if(!maze[y][x+1]) SearchPath(x+1,y); if(!maze[y+1][x]) SearchPath(x,y+1); if(!maze[y-1][x]) SearchPath(x,y-1); if(!maze[y][x-1]) SearchPath(x-1,y); OnIdle(); setfillstyle(EMPTY_FILL, YELLOW); bar(maze_x_s+x*20,maze_y_s+y*20,maze_x_s+x*20+20,maze_y_s+y*20+20);} /* 显示搜索结果 */void PrintResult(void){ int x = maze_x_s + 40; int y = maze_y_s + MAZE_Y * 20 + 80; setcolor(RED); if(search_result == 1) outtextxy(x,y,"THE MAZE HAVE NO PATH !"); else outtextxy(x,y,"FIND PATH SUCCESS !");} int main(void){ int gdriver=DETECT,gmode,flag; registerbgidriver(EGAVGA_driver); initgraph(&gdriver,&gmode,"d:\\tc"); CreateRandMaze(); /* 创建随机迷宫 */ InitFace(); /* 初始化界面 */ flag = setjmp(jumper); if(flag == 0) SearchPath(1,1); /* 搜索迷宫路径 */ PrintResult(); getch(); closegraph(); return 0;}

评论