龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

迷宫探路II

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
对《迷宫探路》做了一点改进。小人在行走过程中不走回头路, 即不重复经过同一点。 /* crazymaze.c*/ /* 2003-8-26 */ #include #include #include #include #include #define N 22 #define M 22 #define MAXLEN 200; in

对《迷宫探路》做了一点改进。小人在行走过程中不走回头路,

即不重复经过同一点。

/* crazymaze.c*/

  /* 2003-8-26 */

  #include

  #include

  #include

  #include

  #include

  #define N 22

  #define M 22

  #define MAXLEN 200;

  int bg[M][N];

  strUCt square{

   int x;

   int y;

   int direc;

  }p[200];

  void makebg(int,int);

  void drawbg(int[][],int,int,int,int,int);

  void drawman(int,int,int);

  void rect(int,int,int,int);

void main(){/* main()开始 */

  int step=20;

  int len=10;

  int size=20;

  int x=0,y=0,x0=0,y0=0;

  int i=0,j=0,k=0,count=0;

  int gdriver=DETECT,gmode;

  char ch;

  int direc;

  makebg(M,N);

  /* registerbgidriver(EGAVGA_driver);

   initgraph(&gdriver,&gmode,"c:urboc2");*/

  initgraph(&gdriver,&gmode,"c:c20gi");

  cleardevice();

  setwritemode(XOR_PUT);

  settextstyle(1,0,3);

  setcolor(GREEN);

  outtextxy(100,180,"Press to quit");

  setcolor(BLUE);

  setfillstyle(LINE_FILL,BLUE);

drawbg(bg,M,N,size,0,0);

  setcolor(GREEN);

  outtextxy(60,120,"PRESS KEY <1> :YOU ,");

  outtextxy(70,150,"OTHER KEY :AUTOMATIC");

  setcolor(WH99vE);

  x+=len;y+=len;

  drawman(x,y,len);

  x0=x;y0=y;

  if((ch=getch())=='1'){

  /* 人工控制 */

  while((ch=getch())!='q'){

   delay(800);

   drawman(x,y,len);

   switch(ch){

   case 'a':

   if(j>0&&bg[i][j-1]==0){

   if(x>step){x-=step;j--;};

   }

   break;

   case 's':

   if(i

   if(y<479-step){y+=step;i++;};

   }

   break;

   case 'd':

   if(j

   if(x<639-step){x+=step;j++;}

   }

   break;

   case 'w':

   if(i>0&&bg[i-1][j]==0){

   if(y>step){y-=step;i--;}

   }

   break;

   default :break;

   }

   drawman(x,y,len);

   if(i>=M-1&&j>=N-1){

   settextstyle(4,0,3);

   setcolor(RED);

   outtextxy(150,260,"YOU WIN!");

   }

   setcolor(WH99vE);

  }

   closegraph();

  }/* 人工控制结束 */

  

  else{

  /* 电脑控制 */

  /* direc表示上一步运动方向 */

  /* 并表示下一步运动方向 */

  /* 0~3分别表示 西、北、东、南 */

direc=2;

  i=j=0;k=0;

  while(i

   switch(direc){

   case 0:

   /* 以3,0,1,2的次序尝试 */

   if(i

   y+=step;i++;

   direc=3;

   }

   else if(j>0&&bg[i][j-1]==0){

   x-=step;j--;

   direc=0;

   }

   else if(i>0&&bg[i-1][j]==0){

   y-=step;i--;

   direc=1;

   }

   else {

   x+=step;j++;

   direc=2;

   }

   p[k].x=x;

   p[k].y=y;

   p[k].direc=direc;

   if(k>0){

   count=k-1;

   while(count>=0

   &&(p[count].x!=p[k].XP[count].y!=p[k].y))

   count--;

   if(count>=0){

   k=count;

   p[k].direc=direc;

   i=(p[k].y-len)/step;

   j=(p[k].x-len)/step;

   }

   }

   k++;

   break;

   case 1:

   if(j>0&&bg[i][j-1]==0){

   x-=step;j--;

   direc=0;

   }

   else if(i>0&&bg[i-1][j]==0){

   y-=step;i--;

   direc=1;

   }

   else if(j

   x+=step;j++;

   direc=2;

   }

   else{

   y+=step;i++;

   direc=3;

   }

   p[k].x=x;

   p[k].y=y;

   p[k].direc=direc;

   if(k>0){

   count=k-1;

   while(count>=0

   &&(p[count].x!=p[k].xp[count].y!=p[k].y))

   count--;

   &

  

  

精彩图集

赞助商链接