Вывести лабиринт в консоль
Есть лабиринт, записанный в массиве.
Если maze[i][j] = 1, то это стена, иначе - проход.
У меня получилось вывести вот в таком формате:
██████████████████████
██ ██
██ ██████████ ██ ██
██ ██ ██ ██
██████████ ██████ ██
██ ██ ██ ██
██ ██████ ██ ██ ██
██ ██ ██ ██ ██
██ ██ ██████ ██ ██
██ ██ ██ ██
██████████████████████
Но мне надо вывести это в ASCII символах, то есть:
━┳━━┳┓
┣╸┃┏━┛┃
┃╻╹┗┓╺┫
┃┗┓╻┗╸┃
┣╸┃┃╺━┫
┃╺╋┛╺━┫
┗━┻━━━
Как это сделать?
Ответы (1 шт):
Автор решения: HolyBlackCat
→ Ссылка
Делаете массив из всех возможных символов. Их будет 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]);