迷宫

2016-02-19 13:27 17 1 收藏

图老师设计创意栏目是一个分享最好最实用的教程的社区,我们拥有最用心的各种教程,今天就给大家分享迷宫的教程,热爱PS的朋友们快点看过来吧!

【 tulaoshi.com - 编程语言 】

迷宫程序1.10版
  作者:董乘宇程序目的:
  输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并
  显示在屏幕上。
  程序实现:
  可以实现载入迷宫和保存迷宫,附带文件中有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版的迷宫游戏全部代码
       
  ----------------------------------------------------------------------------------
  /*
   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 10typedef 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
  

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

延伸阅读
《勇者闯迷宫》刷初始攻略 事先声明,此方法是从波可龙迷宫wiki上看到的,因为在巴哈没看到有人发才会转过来,如果使用后无效我也没有办法,小弟并非Android程式高手......需要ROOT!!!! 1.先关闭游戏 2. (用 ES File Explorer或其他软件) 到/data/data/jp.grenge.pocolondungeon...
标签: 育儿知识
治理挑食宝宝 从早饭开始   妈咪们可别小看了早餐,你要为孩子提供她需要的营养来维持能量和适当的增长,并帮助防止一会之后孩子的饥饿。有些孩子天生挑剔,可能是先天偏好或者是口感更加敏感。但是你的孩子的挑剔并不意味着你必须跳过这一天最关键的一餐。   1、在同一时间吃早餐   你的小家伙的大脑和身...
3DS《世界树迷宫4:传承的巨神》剑士技能一览 3DS《世界树迷宫4:传承的巨神》剑士技能一览 一、NOVICE 二、VETERAN 三、MASTER NDS《世界树迷宫》各职业加点方法 初期有人不知道该怎么加点 这里推荐一下我的方法 ...
《波可龙迷宫》宠物级装备强化心得 《波可龙迷宫》中的中午与武器等装备是可以强化的,而强化宠物除了素材还需要钱,所以强化宠物时要有选择,而武器装备因为需要石头,更加需要有计划性,下面是详解强化心得。 平常的素材and不需要的宠物请直接卖掉,只用强化宠来升级,至少要有可进5星宠在...
老调重提,利用 SDK 实现迷宫算法 作者:赖锋 下载本文示例源代码 我近来重看了数据结构的书,现在的教材还是使用C/C++的编写的算法,编译还是在console mode进行, 如果能把这些数据结构的算法使用在SDK上,那么就可以开发出 Windows 程序的算法程序提高学习,不用在 单调的con...

经验教程

879

收藏

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