Код генерации лабиринта в c генерирует странные символы - PullRequest
0 голосов
/ 17 декабря 2018

Так что я делаю проект в универе с C, и он генерирует лабиринт, но средние символы странные, и я не знаю, откуда они берутся.Также, как я могу убедиться, что есть вход и выход из моего лабиринта?

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 голосов
/ 17 декабря 2018

Вам необходимо полностью заполнить ваш лабиринт, например:

for ( linha = 0; linha < N; ++linha )
  for ( coluna = 0; coluna < N; ++coluna )
    a[linha][coluna] = ' ';   // <--- a space, or whatever else you want

Поместите эти строки перед любой другой манипуляцией лабиринтом (а): ячейки содержат мусор, пока вы не установите их в какое-либо значение.Для этого вам нужно два вложенных цикла - вы должны написать каждый столбец в каждой строке.Вместо этого код, который вы разместили, записывает только внешние (внешние) ячейки, поэтому внутренние содержат мусор.

После этого двойного цикла вы можете "настраивать" отдельные ячейки.В моем ответе немного не хватает оптимизации, потому что я предлагаю сначала заполнить весь лабиринт, а затем переписать несколько отдельных ячеек.Но этот способ самый простой.

Надеюсь, это поможет.

0 голосов
/ 17 декабря 2018
linha = rand() % 20 + 1;
a[linha][0] = k;

Это даст индекс от 1 до 20. Вам нужен индекс от 0 до 19. Ошибка доступа к массиву «по одной».Используйте это вместо:

a[rand()%20][0] = k;
...