Итак, я хочу создать случайный лабиринт для моей игры. Я жестко запрограммировал лабиринт таким образом, и у меня есть несколько разных версий, которые я хотел бы иметь в случайном порядке.

public Maze() {
        this.mazeMap1 = new BlockType[][] {
                {H, H, H, H, H, H, H, H, H, H, H, H, H, H, H},
            {H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
            {H, E, E, E, H, E, E, H, E, E, H, E, E, E, H},
            {H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
            {H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
            {H, E, E, E, H, E, E, H, E, E, H, E, E, E, H},
            {H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
            {H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
            {H, E, E, E, H, E, E, H, E, E, H, E, E, E, H},
            {H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
            {H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
            {H, E, E, E, H, E, E, H, E, E, H, E, E, E, H},
            {H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
            {H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
            {H, H, H, H, H, H, H, H, H, H, H, H, H, H, H}
            };
}

Тогда я создаю геттер и возвращаю лабиринт

public BlockType[][] getMazeMap() {
return mazeMap2;
}

Тогда у меня есть класс «Доска», где я делаю лабиринт

 private void makeBoard() {
        blocks = new Maze().getMazeMap();
    }

Если бы у меня было, скажем, 10 различных жестко закодированных лабиринтов, как бы я сгенерировал один наугад?

1
Christina Dahlén 24 Мар 2017 в 13:27

2 ответа

Лучший ответ

Вам нужна коллекция ваших карт-лабиринтов. Наличие mazemap1, mazemap2 и т. Д. Не позволяет (легко) выбрать один из них.

ArrayList<Block[][]> mazemaps = new ArrayList<>();

mazemaps.add( new BlockType[][] { ... } ); // with all your data
mazemaps.add( new BlockType[][] { ... } ); // second map data

Тогда вы можете выбрать один:

int maze = new Random().nextInt(mazemaps.size());
return mazemaps.get(maze);

(Есть много других вещей, которые вы можете сделать лучше, но это только начало)

3
Andrew McGuinness 24 Мар 2017 в 10:37

Вот мое взятие:

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

Затем:

  1. Генерировать ложный путь, который ведет в никуда
  2. Создайте стену, окружающую ложный путь
  3. Вернитесь к шагу № 1

После того, как вы сгенерируете каждую клетку как стену или проходимую местность, запустите алгоритм Djikstra / A * и докажите, что лабиринт действительно разрешим.

0
ardilgulez 24 Мар 2017 в 10:54