谁有C语言生成随机迷宫代码?
#包含?& ltconio.h & gt
#包含?& ltwindows.h & gt
#包含?& lttime.h & gt
#定义?身高?31?//迷宫的高度必须是奇数。
#定义?宽度?25?//迷宫的宽度必须是奇数。
#定义?墙?1
#定义?路?0
#定义?开始?2
#定义?结束?三
#定义?Esc?五
#定义?向上?1
#定义?下来?2
#定义?向左?三
#定义?对吗?四
int?贴图[高度+2][宽度+2];
作废?gotoxy(int?x,int?y)?//移动坐标
{
坐标?coord
坐标。X = x
坐标。Y = y
SetConsoleCursorPosition(?GetStdHandle(?STD _ OUTPUT _句柄?),?坐标?);
}
作废?Hidden()//隐藏光标
{
手柄?豪特?=?GetStdHandle(STD _ OUTPUT _ HANDLE);
CONSOLE_CURSOR_INFO?CCI;
GetConsoleCursorInfo(hOut & amp;CCI);
CCI . b visible = 0;//指定1显示,指定0隐藏。
SetConsoleCursorInfo(hOut & amp;CCI);
}
作废?创建(int?x,int?y)?//随机生成一个迷宫
{
int?c[4][2]={0,1,1,0,0,-1,-1,0 };?//四个方向
int?I,j,t;
//打乱方向
for(I = 0;我& lt4;i++)
{
j = rand()% 4;
t = c[I][0];c[I][0]= c[j][0];c[j][0]= t;
t = c[I][1];c[I][1]= c[j][1];c[j][1]= t;
}
map[x][y]= Road;
for(I = 0;我& lt4;i++)
if(map[x+2 * c[I][0]][y+2 * c[I][1]]= = Wall)
{
map[x+c[I][0]][y+c[I][1]]= Road;
create(x+2*c[i][0],y+2 * c[I][1]);
}
}
int?get_key()?//接收按钮
{
夏尔?c;
while(c=getch())
{
if(c==27)?回归?Esc?//Esc
如果(c!=-32)继续;
c = getch();
if(c==72)?回归?向上;?//向上
if(c==80)?回归?向下;?//向下
if(c==75)?回归?左;?//左侧
if(c==77)?回归?对;?//右
}
回归?0;
}
作废?画图(int?x,int?y)?//画一个迷宫
{
gotoxy(2*y-2,x-1);
开关(映射[x][y])
{
案子?开始:
printf(" in ");打破;?//绘制入口
案子?结束:
printf(" out ");打破;?//画一个出口
案子?墙壁:
printf(" ※");打破;?//画一面墙
案子?道路:
printf("?);打破;?//画一条路
}
}
作废?游戏()
{
int?x=2,y = 1;?//玩家现在的位置就在入口处。
int?c;?//用于接收密钥。
while(1)
{
gotoxy(2*y-2,x-1);
printf("☆;");?//画出玩家的当前位置。
if(map[x][y]==End)?//判断是否到达出口。
{
gotoxy(30,24);
Printf("到达终点,按任意键结束");
getch();
打破;
}
c = get _ key();
if(c==Esc)
{
gotoxy(0,24);
打破;
}
开关(c)
{
案子?向上:?//向上
if(map[x-1][y]!=墙)
{
油漆(x,y);
x-;
}
打破;
案子?向下:?//向下
if(map[x+1][y]!=墙)
{
油漆(x,y);
x++;
}
打破;
案子?左:?//向左走
if(map[x][y-1]!=墙)
{
油漆(x,y);
y-;
}
打破;
案子?对不对:?//向右走。
if(map[x][y+1]!=墙)
{
油漆(x,y);
y++;
}
打破;
}
}
}
int?主()
{
int?I,j;
srand((无符号)时间(空));?//初始化随机种子
hidden();?//隐藏光标
for(I = 0;我& lt=身高+1;i++)
for(j = 0;j & lt=宽度+1;j++)
if(I = = 0 | | I = =高度+1 | | j = = 0 | | j = =宽度+1)?//初始化迷宫
map[I][j]= Road;
不然呢?map[I][j]= Wall;
create(2*(rand()%(高度/2)+1),2*(rand()%(宽度/2)+1);?//从一个随机点生成一个迷宫,该点的行和列都是偶数。
for(I = 0;我& lt=身高+1;i++)?//边界处理
{
map[I][0]= Wall;
map[I][Width+1]= Wall;
}
for(j = 0;j & lt=宽度+1;j++)?//边界处理
{
map[0][j]= Wall;
map[Height+1][j]= Wall;
}
map[2][1]= Start;?//给定入口
map[Height-1][Width]= End;?//给定退出
for(I = 1;我& lt=身高;i++)
for(j = 1;j & lt=宽度;j++)?//画一个迷宫
油漆(I,j);
game();?//开始游戏
getch();
回归?0;
}