所以我正在用C在uni中做一个项目,它正在生成一个迷宫,但是中间字符很奇怪,我不知道它们来自哪里。另外,我如何确保迷宫有出入口?
代码如下:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define N 20
void gerador_labirinto(char a[N][N]);
int main(void)
{
char maze[N][N];
srand((unsigned int)time(NULL));
gerador_labirinto(maze);
return 0;
}
void gerador_labirinto(char a[N][N])
{
size_t linha,coluna = 0, r, k=(char)254;
for ( linha = 0; linha < N; ++linha )
{
a[linha][coluna] = k;
}
for ( linha = 0; linha < N; ++linha )
{
a[linha][N - 1] = k;
}
linha = rand() % 20 + 1;
a[linha][0] = k;
linha = rand() % 20 + 1;
a[linha][N - 1] = k;
for (coluna = 1; coluna < N - 1; ++coluna)
{
a[0][coluna] = k;
}
for (coluna = 1; coluna < N - 1; ++coluna)
{
a[N - 1][coluna] = k;
}
puts("");
for (linha = 0; linha < N; ++linha)
{
for (coluna = 0; coluna < N; ++coluna)
{
printf_s("%2c",a[linha][coluna]);
}
puts("");
}
puts("");
}
答案 0 :(得分:0)
linha = rand() % 20 + 1;
a[linha][0] = k;
这将给从1到20的索引。您希望从0到19的索引。不合一的数组访问错误。改用它:
a[rand()%20][0] = k;
答案 1 :(得分:0)
您需要完全填充迷宫,例如:
for ( linha = 0; linha < N; ++linha )
for ( coluna = 0; coluna < N; ++coluna )
a[linha][coluna] = ' '; // <--- a space, or whatever else you want
将这些行放在任何其他迷宫(a)操作之前:这些单元格包含垃圾,直到将它们设置为某个值为止。为此,您需要两个嵌套循环-您必须在每一行中写入每一列。相反,您发布的代码仅写入外部(外部)单元,因此内部单元包含垃圾。
在两次循环之后,您可以“调整”单个单元格。我的答案有点缺乏优化,因为我建议先填充整个迷宫,然后重写一些单个单元格。但这是最简单的方法。
希望有帮助。