2012-03-21 7 views
0

제 질문은 자바에서 무작위로 생성 된 미로를 어떻게 만들 수 있습니까? 미로 만들기의 DFS 방식의 주요 개요는 알고 있지만 구현하기가 힘듭니다. 내 프로그램에서 미로는 2D 배열로 유지되고 배열에 1을 추가하면 범위를 벗어나는 배열이 생성됩니다. 나는 그것을 어떻게 피할 수 있습니까? 나는 아주 복잡한 미로, 단순한 미로를 만들고 싶지 않습니다. 코드를 작성하기 시작했지만 어떻게 작동하게 할 것인지 잘 모르겠습니다.Java로 미로 만들기?

는 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

당신은'Array' 대신'ArrayList'을 사용할 수 있습니다 그리고 그들은 당신이 필요로하는 어떤 크기에 맞게 성장할 것입니다. – twain249

+0

벽을 두드 리거나 추가하여 미로를 만들 수 있습니다. 아마 가장 흥미로운 것들은 기본 미로를 만들고 나서 무작위로 벽을 움직 인 다음, 미로를 변화시키는 것이 미지 (어떤 측정 기준이든 생각할 수있는 것)가되었는지 여부를 테스트 한 경우에 가장 흥미로운 것입니다. 창조성을위한 많은 공간. –

답변

2

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

이 작업을 수행하는 데 도움이 밖에 문학의 많음이있다. 그것을 여기에서 재촉하는 것은 그것의 정의를하지 않을 것입니다.

물어 본 두 가지 질문. 귀하의 알고리즘은 배열의 고정 된 크기에 의존한다는 점에서 취성처럼 들립니다. 그런 식으로 설계되지 않았다면 디버거를 잡아야하고 배열 (array.length)의 길이를 벗어나는 이유를 알 수 있습니다. 두 번째 질문에 대해서는 간단한 색인을 사용하여 인접한 셀을 살펴 봅니다. 왼쪽 미로 [행]에

  • 세포 [COL-1]의 우측 미로 [행]에
  • 셀 [COL + 1] 미로 상기
  • 세포 [행 1] [COL]
  • 미로 아래
  • 셀 [행 + 1] [COL은 물론

당신은 미로의 가장자리에있는 행 안부와 같은 배열의 경계 외부가는 것을 방지해야합니다. 벽 여기 경우

은 말할 :

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

그의 링크는 통찰력을 제공합니다 .. – Josh

+0

@ user1136610 기존 미로 생성 알고리즘을 검토 할 때의 문제점은 무엇입니까? –