WEB开发网
开发学院软件开发C++ 大家进来瞧瞧我编的小迷宫,望大虾不吝赐教啊 阅读

大家进来瞧瞧我编的小迷宫,望大虾不吝赐教啊

 2008-03-08 12:29:26 来源:WEB开发网   
核心提示:# define m2 50# define n2 50# define maxlen 200 /*栈长度*/# define true 1# define false 0# define null 0# include "stdio.h"# include "graphics.h&quo
# 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,WHITE);
   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)   {  int i,j,dir,x,y,f;
  elemtype elem;
  i=1;j=1;dir=0;
  maze[1][1]=0;                do
   {  x=i+move[dir].dx;
    y=j+move[dir].dy;
    if (maze[x][y]==0)
       { elem.x=x;elem.y=y;elem.dir=dir;
    f=push(s,elem);
    delay(15000);
        if (f==false) printf("栈长度太短");
    i=x;j=y;dir=0;maze[x][y]=-1;
   }
    else
   {  if (dir<9) dir++;   else
  {
    elem=pop(s);
    if (elem.x!=null)
    {
    i=elem.x;
    j=elem.y;
    dir=elem.dir+1;
    }
         }
}}while(!((s->top==-1)&&(dir>=7)(x==m)&&(y==n)&&(maze[x][y]==-1)));  if(s->top==-1)
  printf("    !!!  no pass  !!!   ");
  else { elem.x=x;elem.y=y;elem.dir=dir;
     f=push(s,elem);
 setfillstyle(1,GREEN);
 bar (70+j*20,20+i*20,88+j*20,38+i*20);
 getch();
 }
}
void start()
{ int h;
  for(h=5;h<=18;h++)
  {
   setfillstyle(1,h);
   bar (80,80,520,180);
   setcolor(h+2);
   settextstyle(TRipLEX_FONT,HORIZ_DIR,4);
   outtextxy(150,90,"!WELCOME TO MAZE!");
   delay(15000);
   }
   for(h=0;h<13;h++)printf(" ");
   settextstyle(SMALL_FONT,HORIZ_DIR,6);
   setcolor(LIGHTCYAN);
   printf(" ");printf("   ");
   outtextxy(90,200,"input the length of the maze(0-30):");
   scanf("%d",&m);
   for(h=0;h<2;h++)printf(" ");
   printf(" ");printf("   ");
   outtextxy(90,250,"input the wideth of the maze(0-30):");
   scanf("%d",&n);
}
void main()
{
sqs *s;
int maze[m2][n2];
moved move[8];
initgraph(VGA,VGAHI,"");
start();
system("cls");
inimaze(maze);
picture(maze);
s=(sqs*)malloc(sizeof(sqs));
inistack(s);
inimove(move);
path(maze,move,s);
getch();
}

Tags:大家 进来 瞧瞧

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接