Создание лабиринта на Java?

Мой вопрос: как я смогу создать случайно созданный лабиринт в Java? Я знаю основную схему создания DFS для создания лабиринта, но мне трудно его реализовать. В моей программе лабиринт хранится в 2D-массиве, и добавление 1 к массиву приводит к исключению массива вне пределов. Как я могу избежать этого? Я не хочу делать очень сложный лабиринт, просто простой лабиринт. Хотя я начал создавать код, я не уверен, как заставить его работать.

Псевдокод для метода DFS:

create a CellStack (LIFO) to hold a list of cell locations
set TotalCells = number of cells in grid
choose a cell at random and call it CurrentCell
set VisitedCells = 1
while VisitedCells < TotalCells
find all neighbors of CurrentCell with all walls intact if one or more found choose one at random knock down the wall between it and CurrentCell push CurrentCell location on the CellStack make the new cell CurrentCell add 1 to VisitedCells else pop the most recent cell entry off the CellStack make it CurrentCell endIf endWhile

Я не понимаю, как вы можете узнать, нет ли у ваших соседей неповрежденных стен и как их уничтожить. Может ли кто-нибудь дать мне некоторое представление об этой программе. Очень признателен.

1 ответ

https://www.google.com/search?ix=seb&sourceid=chrome&ie=UTF-8&q=maze+generation+algorithm

Там есть много литературы, которая поможет вам это сделать. Переиздание этого здесь не собирается делать это справедливо.

По двум вопросам, которые вы задали. Ваш алгоритм звучит как его хрупкий, поскольку он полагается на фиксированный размер массива. Если он не разработан таким образом, вам придется захватить отладчик и выяснить, почему он выходит за пределы массива (array.length). Что касается второго вопроса, вы будете использовать простую индексацию для просмотра соседних ячеек.

  • Ячейка в левый лабиринт [ряд] [col-1]
  • Ячейка в правый лабиринт [ряд] [col + 1]
  • Ячейка над лабиринтом [ряд-1] [col]
  • Ячейка ниже лабиринта [row + 1] [col]

Конечно, вам придется не допустить выхода за пределы массива, поскольку строка, col находятся на краю лабиринта.

Чтобы узнать, есть ли здесь стена:

Cell cell = maze[row][col];
if( cell.isWall() ) ...

licensed under cc by-sa 3.0 with attribution.