Вывести лабиринт в консоль

Рейтинг: 0Ответов: 1Опубликовано: 25.04.2023

Есть лабиринт, записанный в массиве. Если maze[i][j] = 1, то это стена, иначе - проход. У меня получилось вывести вот в таком формате:

██████████████████████
██                  ██
██  ██████████  ██  ██
██  ██          ██  ██
██████████  ██████  ██
██  ██      ██      ██
██  ██████  ██  ██  ██
██  ██      ██  ██  ██
██  ██  ██████  ██  ██
██      ██      ██  ██
██████████████████████

Но мне надо вывести это в ASCII символах, то есть:

 ━┳━━┳┓
┣╸┃┏━┛┃
┃╻╹┗┓╺┫
┃┗┓╻┗╸┃
┣╸┃┃╺━┫
┃╺╋┛╺━┫
┗━┻━━━ 

Как это сделать?

Ответы

▲ 2Принят

Делаете массив из всех возможных символов. Их будет 24 = 16.

Индекс в массиве занимает 4 бита, и удобно расставить элементы так, чтобы каждый бит означал свой кусок стены - верхний, нижний, левый и правый. Например так:

std::string arr[16] = {/*0000*/"·", /*0001*/"╹", /*0010*/"╻", /*0011*/"┃", /*0100*/"╸", /*0101*/"┛", ...};

Дальше, при рисовании лабиринта определяете индекс в массиве по наличию соседей.

if (!cell[x][y])
    draw(" ");

int index = 0;
if (y > 0 && cell[x][y-1])
    index |= 1 << 0;
if (y < height-2 && cell[x][y+1])
    index |= 1 << 1;
// и т.д.

draw(arr[index]);