Если я обновляю базу данных со сценарием, я всегда удостоверяюсь, что поместил точку останова или два в начале моего сценария, на всякий случай я поразил выполнение/выполнение случайно.
Распечатайте только СЕВЕРНУЮ и ЗАПАДНУЮ стены. Код уже готов ...
Я изменил стены на EnumSet
public Set<Dir> walls = EnumSet.allOf(Dir.class);
Так что вам не нужно добавлять стены в ваш конструктор:
public Cell(final int x, final int y) {
this.x = x;
this.y = y;
this.Visited = false;
}
А чтобы удалить стены, используйте:
this.walls.remove(randDir);
randomNeighbor.walls.remove(randDir.opposite());
А затем код печати выглядит так:
public static void printMaze(final Cell[][] maze) {
for (int r = 0; r < maze.length; r++) {
final Cell[] row = maze[r];
printTop(row);
printMiddle(row);
if (r == maze.length - 1) {
printBottom(row);
}
}
}
private static void printBottom(final Cell[] row) {
for (final Cell cell : row) {
System.out.print(cell.walls.contains(Dir.SOUTH) ? "+--" : "+ ");
}
System.out.println("+");
}
private static void printMiddle(final Cell[] row) {
for (int c = 0; c < row.length; c++) {
final Cell cell = row[c];
System.out.print(cell.walls.contains(Dir.WEST) ? "| " : " ");
if (c == row.length - 1) {
System.out.println(cell.walls.contains(Dir.EAST) ? "|" : " ");
}
}
}
private static void printTop(final Cell[] row) {
for (final Cell cell : row) {
System.out.print(cell.walls.contains(Dir.NORTH) ? "+--" : "+ ");
}
System.out.println("+");
}
(Примечание: эстетически я предпочитаю Direction и randomDirection. Но это только я; -)
Вам нужно сделать что-то вроде «никогда не печатать стены для СЕВЕРА или ЗАПАДА, если эта ячейка не находится на краю лабиринта». Таким образом, если предполагается, что для этой ячейки должна быть стена на ЗАПАДЕ. , ячейка на западе уже будет напечатана как ее собственная ВОСТОЧНАЯ стена.
Вам, возможно, придется делать особые двери / входы, если они тоже находятся на северной или западной стене.
Поскольку клетки имеют общие стены, можно просто игнорировать половину значений. Если вы начнете с крайней северо-западной камеры и будете проверять стены только на юге и востоке, вы можете нарисовать лабиринт с одинарными стенками. Конечно, северная и западная стены лабиринта должны быть полностью закрыты.
Заявление об ограничении ответственности: я действительно не думал об этом, так что это может вообще не сработать, но для меня это звучит разумно.