2012-03-21 3 views
0

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

псевдокод для метода ДФС является:

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

вы можете использовать 'ArrayList' вместо' Array', а затем они будут расти, чтобы приспособить любой размер вам нужно. – twain249

+0

Вы можете построить лабиринт, сбив стены или добавив их. Вероятно, самые интересные были бы построены, если бы вы сначала создали базовый лабиринт, а затем случайно перемещали стены, а затем проверяли, изменило ли это лабиринт более или менее «сложным» (по любой метрике, о которой вы можете думать). Много места для творчества. –

ответ

2

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

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

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

  • клеток на левый лабиринт [строка] [Col-1]
  • клеток на правый лабиринт [строка] [столбец + 1]
  • клеток выше лабиринт [строка-1] [Col]
  • Cell ниже лабиринт [строка + 1] [Col]

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

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

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

Его ссылка действительно дает понимание. – Josh

+0

@ user1136610 В чем проблема с рассмотрением существующих алгоритмов генерации лабиринта? –

Смежные вопросы