主题:[讨论]自己做的迷宫程序(C语言),有图形动画效果
een007
[专家分:240] 发布于 2006-07-27 09:32:00
几点说明:
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);
}
接后面
最后更新于:2008-03-20 23:36:00
回复列表 (共53个回复)
沙发
een007 [专家分:240] 发布于 2005-09-04 20:09:00
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调试良好
板凳
shaneqi [专家分:5140] 发布于 2005-09-05 01:21:00
做得很好,顶一下,不过不是很明白阿。哪个是出口和入口呢?
3 楼
sophy815 [专家分:2550] 发布于 2005-09-05 10:26:00
支持楼主,不过真的是像楼上说的,哪里是出口哪里是入口。
4 楼
een007 [专家分:240] 发布于 2005-09-05 13:10:00
四周是墙
坐标(1,1)是入口
右下脚是出口
5 楼
邦卡猫 [专家分:60] 发布于 2005-09-06 18:32:00
不错不错,不过你的墙是随机产生的,不是每一次都能走到出口,有的时候根本没有到出口的通路,楼主改一下,能不能先把随机产生出的根本不能到达出口的情况去掉。
6 楼
een007 [专家分:240] 发布于 2005-09-06 19:39:00
可以把行和列自己设小一点
#define MAX_COL 14
#define MAX_ROW 14
改为
#define MAX_COL 8
#define MAX_ROW 6
7 楼
zmaxlyxh [专家分:1210] 发布于 2005-09-06 20:29:00
2楼的偶像原来是4K.Grubby ,嘿嘿~
我喜欢MADFROG
8 楼
junying41 [专家分:50] 发布于 2005-09-08 22:25:00
恩,能具体解释一下是怎么回事吗?我怎么运行了,看不懂是什么意思啊!谢谢!
9 楼
weixuzhe [专家分:80] 发布于 2005-09-09 06:05:00
2.7楼的
喜欢gostop.
10 楼
e213738 [专家分:110] 发布于 2005-09-09 11:27:00
晕,你写的程序连注释都没有,你是故意的吧
我来回复