用户输入迷宫的范围,墙壁的坐标,出入口坐标来生成一个迷宫,并由用户选择是否进行破解
#include<stdio.h>
#include<windows.h>
int main()
{
int m,n,i1,i2,x,y,c1,c2,e1,e2,a,e,f,a1,a2,a3,a4,n1,m1,p,oo,o;
int t[101][101][2];
for(x=0;x<=100;x++)
{
for(y=0;y<=100;y++)
{
t[x][y][0]=0;
t[x][y][1]=0;
}
}
a3:printf("请输入范围长");
scanf("%d",&m);
printf("请输入范围宽");
scanf("%d",&n);
for(m1=0;m1<=m+1;m1++)
{
t[0][m1][0]=2;
t[n+1][m1][0]=2;
}
for(n1=0;n1<=n+1;n1++)
{
t[n1][0][0]=2;
t[n1][m+1][0]=2;
}
a1:printf("请输入障碍物坐标x值,输入“0”为结束");
scanf("%d",&y);
printf("请输入障碍物坐标y值");
scanf("%d",&x);
if(x==0)
{
goto a2;
}
else
{
t[x][y][0]=2;
goto a1;
}
a2:printf("请输入入口x值");
scanf("%d",&c2);
printf("请输入入口y值");
scanf("%d",&c1);
printf("请输入出口x值");
scanf("%d",&e2);
printf("请输入出口y值");
scanf("%d",&e1);
t[c1][c2][0]=-2;
t[e1][e2][0]=-3;
printf("现在输出效果图…\n");
for(x=0;x<=n+1;x++)
{
for(y=0;y<=m+1;y++)
{
if(t[x][y][0]==2)
{
printf("▉");
}
else if(t[x][y][0]==-2)
{
printf("門");
}
else if(t[x][y][0]==-3)
{
printf("回");
}
else if(t[x][y][0]==0)
{
printf(" ");
}
}
printf("\n");
}
p=MessageBox(NULL,"迷宫建立成功,是否进行破解?","成功",MB_SETFOREGROUND|MB_YESNO|MB_ICONQUESTION);
if(p==IDNO)
{
printf("破解指令被拒绝\n\n\n");
a4:printf("建立新迷宫…\n");
printf("=====================\n");
goto a3;
}
else
{
printf("指令生效\n正在进行破解…\n");
oo:for(x=0;x<=m;x++)
{
for(y=0;y<=n;y++)
{
if(t[x][y+1][0]>=1)
{
t[x][y][1]=t[x][y][1]+1;
}
if(t[x-1][y][0]>=1)
{
t[x][y][1]=t[x][y][1]+1;
}
if(t[x][y-1][0]>=1)
{
t[x][y][1]=t[x][y][1]+1;
}
if(t[x+1][y][0]>=1)
{
t[x][y][1]=t[x][y][1]+1;
}
if(t[x][y][0]==0)
{
if(t[x][y][1]>=3)
{
t[x][y][0]=1;
goto oo;
}
t[x][y][1]=0;
}
}
}
printf("处理完毕\n现在输出完成破解的迷宫…\n");
for(x=0;x<=n+1;x++)
{
for(y=0;y<=m+1;y++)
{
if(t[x][y][0]==2)
{
printf("▉");
}
else if(t[x][y][0]==-2)
{
printf("門");
}
else if(t[x][y][0]==-3)
{
printf("回");
}
else if(t[x][y][0]==1)
{
printf("×");
}
else if(t[x][y][0]==0)
{
printf("·");
}
}
printf("\n");
}
goto a4;
}
}
下面是运行图片:
总结:
图片上由“·”构成的是路径,由“×”构成的是死路,而“門”是入口,“回”是出口。
这个程序写成这样并没有什么太大的难度,关键就在于 能不能想到“先堵住死胡同”的方法,但是从图片上可以看到它还有一些BUG,比如在图片右上角的路径明明是进入了一个“小房间”却被错误的认为是路,而且这个软件对于“墙”的设定方法是输入坐标的方式,十分繁琐而且不能出错,这个是限制于技术原因,以后说不定能改成使用鼠标输入甚至自动扫描图片输入;另一个问题是现在只能是在图片上显示出路,计算机还不能识别和计算出有多少条路和路的远近,这个的解决方案已经有了一定的想法,但要真正实现还需要更深入的学习和研究。
在这个软件里我略微尝试了一下MessageBox语句,但主体还是选择结构、循环结构、数组。网上有的高手说可以通过指针把这种图像做成类似动画的效果,比如C语言版的贪吃蛇,但我经过冥思苦想后,终于悲催的发现我一点都不会,甚至连思路都没有。好吧,做人还是老实一点好!!!
这个软件写好后把我好吓——这不是GPS导航软件吗?但我发誓我直到运行后才发现这与GPS导航软件的惊人的相似或者说相同,简直就是一个简易版+自主输入地图版的GPS软件……
软件名为《破解迷宫1.0》没错就是1.0,这也意味着还会有1.1,1.2……1.0里的各种BUG和在我看来更科幻的发展方向将在n.n版本中逐步实现,毕竟我对这个软件的兴趣与热情是很大的。顺便说一下,这个软件的原始创意来自于《龙族1》中路明非解决出青铜宫殿的迷宫的破解图,而像书中扫描环境并有系统解决动态立体地图是我对这个软件的终极目标。(奸笑三声)