董乘宇--迷宫程序1.10版

2016-02-19 13:10 9 1 收藏

今天图老师小编给大家精心推荐个董乘宇--迷宫程序1.10版教程,一起来看看过程究竟如何进行吧!喜欢还请点个赞哦~

【 tulaoshi.com - 编程语言 】

程序目的:
  输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并
  显示在屏幕上。
  程序实现:
  可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的
  文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载
  入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫
  时一定要注重:迷宫大小是有限制的,不小于4*3,不大于30*20。
  否则会出现错误信息。输入开始时全是墙,用上下左右键移动,
  用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以
  将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,
  找到路径时,屏幕下方会出现Path found,否则出现Path not found。
   程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。
   不可以在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 stdio.h
   #include stdlib.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_IN99v_SIZE 200
   #define STACKINCREMENT 10
   typedef int Boolean;
   typedef int Status;
   typedef strUCt {
   int x;
   int y;
   } PosType;
   typedef struct {
   int ord;
   PosType seat;
   int di;
   } SElemType;
   typedef struct {
   int td;
   int foot;
   int mark;
   } MazeType;
   typedef struct {
   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 DestroyStack(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:");
   printf("1.Load Mazefile:(*.dd)");
   printf("2.Input Maze:");
   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("LoadName: ");
   scanf("%s",loadname);
   if(LoadMaze(loadname))
   {
   sleep(1); load=TRUE;
   }
   else { gotoxy(1,9); printf("Load fail! "); }
   }
   if(!load)
   {
   printf("Input the maze''''''''''''''''''''''''''''''''s size:");
   printf("Input Length :");
   scanf("%d",&m);
   printf("Input Width :");
   scanf("%d",&n);
   if(m4n4) Error("Input");
   if(m30n20) Error("Maze too large");
   for(i=0;i30;i++)
   for(j=0;j20;j++)
   Maze[j][i]=2;
   StartPlace.x=0;
   StartPlace.y=0;
   EndPlace.x=0;
   EndPlace.y=0;
   clrscr();
   printf("");
   for(i=1;i=n;i++)
   {
   for(j=1;j=m;j++)
   {
   printf(" #");
   Maze[i-1][j-1]=0;
   }
   printf("");
   }
   }
   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(y3) { y--; gotoxy(x,y); }
   break;
   case Down: if(yn) { y++; gotoxy(x,y); }
   break;
   case Left: if(x4) { x-=2; gotoxy(x,y); }
   break;
   case Right: if(x2*m-2) { x+=2; gotoxy(x,y); }
   break;
   case Del: if(y-2==StartPlace.y&&x/2-1==StartPlace.x) b_start=FALSE;
   if(y-2==EndPlace.y&&x/2-1==EndPlace.x) b_end=FALSE;
   putch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);
   break;
   case Enter: if(y-2==StartPlace.y&&x/2-1==StartPlace.x) break;
   if(y-2==EndPlace.y&&x/2-1==EndPlace.x) break;
   putch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);
   break;
   case Home: if(Maze[y-2][x/2-1]&&!b_start)
   {
   StartPlace.x=x/2-1;
   StartPlace.y=y-2;
   putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
   gotoxy(x,y);
   b_start=TRUE;
   }
   break;
   case End: if(Maze[y-2][x/2-1]&&!b_end)
   {
   EndPlace.x=x/2-1;
   EndPlace.y=y-2;
   putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
   gotoxy(x,y);
   b_end=TRUE;
   }
   break;
   case Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);
   case F9: if(b_start&&b_end) flag=TRUE; break;
   case F2: gotoxy(2,22);
   printf("Savename:");
   scanf("%s",savename);
   gotoxy(2,22);
   if(SaveMaze(savename)) printf("Save OK! ");
   else printf("Save fail! ");
   sleep(1);
   gotoxy(2,2

来源:http://www.tulaoshi.com/n/20160219/1603222.html

延伸阅读
标签: 周公解梦 解梦
梦见迷宫 梦见迷宫,你将发现一切都显得很糟糕:自己的境遇尚且复杂多变不能自救,妻子偏偏又使自己的家庭充满矛盾,加上孩子和情人又生性顽劣令人生厌,生活简直就成了一团乱麻。 梦见自己在漆黑的迷宫中,预示苦恼及很短暂的麻烦和疾病会光顾你。 梦见生长着绿色藤蔓和树木的迷宫,表示山重水复疑无路,柳岸花明又一村...
《森林迷宫》完美心得 《森林迷宫》完美心得 这个森林可以理解为一层层的迷宫,不按照NPC说的路线就会随机传送到上一层,这点越是按NPC路线图后面越是明显,甚至会出现进去一个点,再回来就不是原路。 要找小屋的话还是严格按照NPC的路线来走比较简单。进入森林后往左到尽头,之后往...
    对《迷宫探路》做了一点改进。小人在行走过程中不走回头路,即不重复经过同一点。                      /* crazymaze.c*/ /* 2003-8-26 */ #include stdlib.h #include time.h #include math.h ...
《魔幻迷宫》菜单中文翻译对照 《武林群侠传》史燕八卦迷宫 史燕的八卦迷宫需要懂一点八卦图象 八卦共分干天卦,兑泽卦,离火卦,震雷卦,巽风卦,坎水卦,艮山卦,坤地卦等八卦。...
《换装迷宫2》敌人及服装推荐 《换装迷宫2》是GBA上面的一款游戏,虽然这个作品类似于RPG,但与传统的RPG有很大的区别,主要是攻击系统和服装系独树一帜,显得创新十足,而且不同服装能够让角色变成不同的职业是游戏的最大亮点。 各迷宫推荐敌人及服装 地点:万年冰洞 最佳服装:剑士 敌...

经验教程

845

收藏

72
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部