Как я мог мешать печатать обе стороны стены в моем лабиринте ASCII?

Если я обновляю базу данных со сценарием, я всегда удостоверяюсь, что поместил точку останова или два в начале моего сценария, на всякий случай я поразил выполнение/выполнение случайно.

7
задан Scorcher84 16 October 2009 в 04:43
поделиться

3 ответа

Распечатайте только СЕВЕРНУЮ и ЗАПАДНУЮ стены. Код уже готов ...

Я изменил стены на 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. Но это только я; -)

5
ответ дан 7 December 2019 в 01:23
поделиться

Вам нужно сделать что-то вроде «никогда не печатать стены для СЕВЕРА или ЗАПАДА, если эта ячейка не находится на краю лабиринта». Таким образом, если предполагается, что для этой ячейки должна быть стена на ЗАПАДЕ. , ячейка на западе уже будет напечатана как ее собственная ВОСТОЧНАЯ стена.

Вам, возможно, придется делать особые двери / входы, если они тоже находятся на северной или западной стене.

4
ответ дан 7 December 2019 в 01:23
поделиться

Поскольку клетки имеют общие стены, можно просто игнорировать половину значений. Если вы начнете с крайней северо-западной камеры и будете проверять стены только на юге и востоке, вы можете нарисовать лабиринт с одинарными стенками. Конечно, северная и западная стены лабиринта должны быть полностью закрыты.

Заявление об ограничении ответственности: я действительно не думал об этом, так что это может вообще не сработать, но для меня это звучит разумно.

1
ответ дан 7 December 2019 в 01:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: