c中生成奇怪字符的迷宫生成代码

时间:2018-12-17 15:24:53

标签: c generator code-generation maze

所以我正在用C在uni中做一个项目,它正在生成一个迷宫,但是中间字符很奇怪,我不知道它们来自哪里。另外,我如何确保迷宫有出入口?

enter image description here

代码如下:

#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("");
}

2 个答案:

答案 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)操作之前:这些单元格包含垃圾,直到将它们设置为某个值为止。为此,您需要两个嵌套循环-您必须在每一行中写入每一列。相反,您发布的代码仅写入外部(外部)单元,因此内部单元包含垃圾。

在两次循环之后,您可以“调整”单个单元格。我的答案有点缺乏优化,因为我建议先填充整个迷宫,然后重写一些单个单元格。但这是最简单的方法。

希望有帮助。