回 帖 发 新 帖 刷新版面

主题:[讨论]自己做的迷宫程序(C语言),有图形动画效果

几点说明:
1.本程序是动态的,运行后自动寻找迷宫出路
2.有什么不懂的可以在本贴留言.
3.本程序对C语言刚学完的有很大的意义.
4.四周是墙,坐标(1,1)是入口,右下脚是出口
5.若有不懂,联系QQ:274145322.
声明:本程序用VC调试是无法通过的需要修改
     本程序调试工具是TC.....................
     有些同志们抱怨没有注释,有注释就学不到东西了,查阅资料是非常重要的能力.
6.今日特加上注释以供大家学习。
#include "graphics.h"
#include "dos.h"
#include "stdlib.h"
#include "process.h"

#define MAX_COL 14/*定义迷宫大小*/
#define MAX_ROW 14

typedef struct
{ int vert;
  int horiz;
}offsets;


mapture(int i,int j,int k);/*标记迷宫,(i,j)标记为k模式*/
initmaze();/*初始化迷宫数组*/
findmaze(int i,int j);/*找到了(i,j)可走,标记*/
mapmaze();/*画出原始迷宫*/
int findpath(int row,int col);/*递归函数,找出迷宫路径*/
mapbar();/*画出方格*/
initgrap();/*初始化VGA*/
print();/*迷宫走完后,输出是否成功 */


int startx=50,starty=50;/*画图的屏幕坐标*/
int maze[MAX_ROW][MAX_COL];
offsets move[8]={{0,1},{1,1},{-1,1},{1,0},{-1,0},{0,-1},{1,-1},{-1,-1}}; /*8个方向寻找*/


initmaze()/*初始化迷宫数组 */
{ int i,j;

  for(i=0;i<MAX_ROW;i++)/*迷宫四周设置为1 代表墙*/
    { maze[i][0]=1;
      maze[i][MAX_COL-1]=1;
     }
  for(i=0;i<MAX_COL;i++)
    {  maze[0][i]=1;
       maze[MAX_ROW-1][i]=1;
     }
     randomize();
  for(i=1;i<MAX_ROW-1;i++)/*迷宫图形随机产生 1表示不通 0表示可行*/
     for(j=1;j<MAX_COL-1;j++)
       {
     maze[i][j]=random(2);
       }

}




findmaze(int i,int j)/*找到 (i,j)可走*/
{
   mapture(j,i,2);/*在图形上标记*/
            sleep(1);



}

returnmaze(int i,int j)/*找到(i,j)可走 ,但下一步无路走则标记*/
{

   mapture(j,i,3);/*在图形上标记*/
   sleep(1);
}
接后面

回复列表 (共53个回复)

沙发

print(int i)/*迷宫走完后,输出是否成功*/
{    settextstyle(1,0,5);
    if(i==1)
    outtextxy(340,400,"Ture path!");
    else if(i==2)
    outtextxy(340,400,"No path!");

}

int findpath(int row,int col)/*用递归法找迷宫*/
{  int direct,next_row,next_col;
   direct=0;
   maze[1][1]=2;
   mapture(1,1,2);
   sleep(1);
   while(direct<8)/*8个方向寻找*/
   {  next_row=row+move[direct].vert;/*设置下一步坐标*/
      next_col=col+move[direct].horiz;
      if(maze[next_row][next_col]==0) /*可走,便标记*/
    { maze[next_row][next_col]=2;
          findmaze(next_row,next_col) ;
      if(next_row==(MAX_ROW-2)&&next_col==(MAX_COL-2))/*找到出口退出程序*/
       {  print(1);
              getch();
          exit(0);
       }
      else
        findpath(next_row,next_col);/*没有到出口继续递归*/
      maze[next_row][next_col]=3;
      returnmaze(next_row,next_col);
    }
      direct++;
    }
   return(row);
}


TC调试良好

板凳

做得很好,顶一下,不过不是很明白阿。哪个是出口和入口呢?

3 楼

支持楼主,不过真的是像楼上说的,哪里是出口哪里是入口。

4 楼

四周是墙
坐标(1,1)是入口
右下脚是出口

5 楼

不错不错,不过你的墙是随机产生的,不是每一次都能走到出口,有的时候根本没有到出口的通路,楼主改一下,能不能先把随机产生出的根本不能到达出口的情况去掉。

6 楼

可以把行和列自己设小一点
#define MAX_COL 14
#define MAX_ROW 14
改为
#define MAX_COL 8
#define MAX_ROW 6

7 楼

2楼的偶像原来是4K.Grubby ,嘿嘿~
我喜欢MADFROG

8 楼

恩,能具体解释一下是怎么回事吗?我怎么运行了,看不懂是什么意思啊!谢谢!

9 楼

2.7楼的

喜欢gostop.

10 楼

晕,你写的程序连注释都没有,你是故意的吧

我来回复

您尚未登录,请登录后再回复。点此登录或注册