Вы можете изобразить свой лабиринт, используя две ячейки символов, учитывая, что стены справа и снизу представлены символами _
и |
.
., у вас будет четыре типа ячеек:
- Ячейка без нижних и без правых стенок, это будет представлено последовательностью
" ."
. - Ячейка только снижняя стенкаЭта ячейка будет представлена последовательностью
"_."
. - Ячейка только с правой стенкой.Эта ячейка будет представлена последовательностью
" |"
. - Ячейка с обеими стенками.Эта ячейка будет представлена последовательностью
"_|"
.
. Верхняя и левая стенки ячейки будут предоставлены вышеуказанной ячейкой и левой ячейкой соответственно.
Стоит отметить, что вам понадобится левая стена для всего лабиринта, а также верхняя стена.Они могут быть смоделированы с помощью дополнительного ряда ._._._._._....
и левой стены, состоящей из |
символов, что дает (это будет почти аналогично лабиринту, который вы выложили в качестве примера.
Итак, если мы представимлабиринт с массивом символов, возможное решение проблемы может быть:
#include <stdio.h>
void print_maze(FILE *f, char *maze, int rows, int cols)
{
/* maze is an array that has rows * cols cells.
* Each cell is a bitmap where bit 0 represents the
* right wall, while bit 1 represents the low wall.
*/
#define LOWER_WALL (1 << 1)
#define RIGHT_WALL (1 << 0)
int r, c;
/* top wall */
fputc('.', f);
for (c = 0; c < cols; c++)
fputs("_.", f);
fputc('\n', f);
for (r = 0; r < rows; r++) {
fputc('|', f);
for (c = 0; c < cols; c++) {
fputs(*maze & LOWER_WALL ? "_" : " ", f);
fputs(*maze & RIGHT_WALL ? "|" : ".", f);
maze++;
}
fputc('\n', f);
}
} /* print_maze */
char *maze = "2102022221"
"1130301031"
"1211212103"
"0123030311"
"1030212311"
"1303122121"
"1030230231"
"0321023023"
"2101210321"
"2232322223";
int main()
{
print_maze(stdout, maze, 10, 10);
}
Программа выше печатает лабиринт:
._._._._._._._._._._.
|_. | ._. ._._._._. |
| | |_| ._| . | ._| |
| |_. | |_. |_. | ._|
| . |_._| ._| ._| | |
| | ._| ._. |_._| | |
| |_| ._| |_._. |_. |
| | ._| ._._| ._._| |
| ._|_. | ._._| ._._|
|_. | . |_. | ._|_. |
|_._._|_._|_._._._._|
В этом случае вам нужно простонапротив, как вы хотите, тогда вам нужно напечатать две строки на ячейку, так как ячейка будет использовать четыре позиции символов для каждой ячейки, разделенные на две строки по два символа в каждой: в первой строке выдается пробел
с последующимпо содержимому правой стены, и в следующем ряду вы излучаете нижнюю стену, за которой следует правый нижний угол (столбец, полный содержимого):
Далее та же программа, но с *Функция 1036 * изменена для печати: #include
void print_maze(FILE *f, char *maze, int rows, int cols)
{
/* maze is an array that has rows * cols cells.
* Each cell is a bitmap where bit 0 represents the
* right wall, while bit 1 represents the low wall.
*/
#define LOWER_WALL (1 << 1)
#define RIGHT_WALL (1 << 0)
int r, c;
/* top wall */
fputc('#', f);
for (c = 0; c < cols; c++)
fputs("###", f);
fputc('\n', f);
for (r = 0; r < rows; r++) {
fputc('#', f);
/* first row of the row :) */
for (c = 0; c < cols; c++) {
fputs(*maze & RIGHT_WALL ? " #" : " ", f);
maze++;
}
fputs("\n#", f);
maze -= cols;
for (c = 0; c < cols; c++) {
fputs(*maze & LOWER_WALL ? "###" : " #", f);
maze++;
}
fputc('\n', f);
}
} /* print_maze */
char *maze = "2102022221"
"1130301031"
"1211212103"
"0123030311"
"1030212311"
"1303122121"
"1030230231"
"0321023023"
"2101210321"
"2232322223";
int main()
{
print_maze(stdout, maze, 10, 10);
}
, которая печатает:
###############################
# # #
#### # #### ############# #
# # # # # # # #
# # #### #### # # #### #
# # # # # # #
# #### # #### #### # ####
# # # # # # #
# # ####### #### #### # #
# # # # # # #
# # #### #### ####### # #
# # # # # # #
# #### #### ####### #### #
# # # # # #
# # #### ####### ####### #
# # # # #
# ####### # ####### #######
# # # # # #
#### # # #### # ####### #
# # # #
###############################
Пожалуйста, в следующий раз покажите свой код, потому что StackOverflow - это форум, который поможет вам решитьваша программапроблемы, а не делать домашнее задание.Вы говорите, что вы конвертировали код ruby в C, поэтому, вероятно, у вашего кода есть некоторые проблемы.Лучше решить вашу кодировку, взглянув на нее.
РЕДАКТИРОВАТЬ
Я написал полную программу, иллюстрирующую три способа печати лабиринтов, включая возможность печати с использованием символов рисования линий.доступно в юникоде.Вы можете увидеть это в Github
См. Как создать минимальный, полный и проверяемый пример для получения справки по этому вопросу.