• 当前位置:首页>>C语言>>C语言编程实例>>小迷宫
  • 小迷宫
  • # define m2 50
    # define n2 50
    # define maxlen 200                 /*栈长度*/
    # define true 1
    # define false 0
    # define null 0
    # include "stdio.h"
    # include "graphics.h"
    # include "stdlib.h"
    # include "dos.h"
    int m,n;

    typedef struct                   
    { int x,y,dir;}elemtype;
    typedef struct
    { elemtype stack[maxlen];         
      int top;
    }sqs;
    typedef struct                   

    { int dx,dy;}moved;
    void inimaze (int maze[][n2])    
    { int i,j;
      for(i=1;i<=m;i++)
        {
          for(j=1;j<=n;j++)maze[i][j]=rand()/16383;
        }
    for (i=0,j=0;i<=m+1;i++)
        maze[i][j]=1;
    for (i=0,j=n+1;i<=m+1;i++)
        maze[i][j]=1;
    for (i=0,j=0;j<=n+1;j++)
        maze[i][j]=1;
    for (i=m+1,j=0;j<=n+1;j++)
        maze[i][j]=1;
    }
    void picture (int maze[][n2])                   
    {
      int i,j;
      setbkcolor(BLACK);
      for(i=0;i<m+2;i++)
      { for (j=0;j<n+2;j++)
         { if(maze[i][j]==1)
      {  setfillstyle(1,LIGHTBLUE);
         bar (70+j*20,20+i*20,88+j*20,38+i*20);
      }
     else
      {  setfillstyle(1,WH99vE);
        bar (70+j*20,20+i*20,88+j*20,38+i*20);
             }
         }
      }
     outtextxy(90,460,"press any key to start");
     getch();
    }

    void inimove(moved move[])     

    { move[0].dx=0;move[0].dy=0;
      move[1].dx=0;move[1].dy=1;
      move[2].dx=1;move[2].dy=1;
      move[3].dx=1;move[3].dy=0;
      move[4].dx=1;move[4].dy=-1;
      move[5].dx=0;move[5].dy=-1;
      move[6].dx=-1;move[6].dy=-1;
      move[7].dx=-1;move[7].dy=0;
      move[8].dx=-1;move[8].dy=1;
    }
    void inistack(sqs *s)                

    { s->top=-1;}

    int push(sqs *s,elemtype t)          

    {  int i,j;
       if (s->top==maxlen-1)return(false);
       else
       {
           i=t.x;j=t.y;
           setfillstyle(1,GREEN);
           bar (70+j*20,20+i*20,88+j*20,38+i*20);
           s->stack[++s->top]=t;
           return(true);
       }
    }
    elemtype pop(sqs *s)            

    { elemtype elem;
        if (s->top<0)
         {
           elem.x=null;
           elem.y=null;
           elem.dir=null;
           return(elem);
         }
       else
         { int i,j;
           i=s->stack[s->top].x;j=s->stack[s->top].y;
           setfillstyle(1,RED);
           bar (70+j*20,20+i*20,88+j*20,38+i*20);
           s->top--;
           return(s->stack[s->top+1]);
         }
    }
    void path(int maze[][n2],moved move[],sqs *s)   

    [1] [2] [3] 下一页