谁有C语言生成随机迷宫代码?

#包含?& ltstdio.h & gt

#包含?& 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;

}