2012-03-21 116 views
0

我的問題是我將如何能夠在Java中創建一個隨機生成的迷宮?我知道DFS創建迷宮的主要方法,但我很難實現它。在我的程序中,迷宮保存在二維數組中,並向數組中添加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

你可以使用一個'ArrayList'而不是'Array',然後他們將增長,以適應任何你需要的大小。 – twain249 2012-03-21 02:41:01

+0

您可以通過敲下牆壁或添加它們來建造迷宮。如果你第一次創造了基本的迷宮,然後隨機移動了牆壁,那麼最有趣的可能是建立起來,然後測試這個變化是否使得迷宮或多或少地具有「挑戰性」(無論你怎麼想)。很多創造力的空間。 – 2012-03-21 03:25:10

回答

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 2012-03-21 02:56:54

+0

@ user1136610回顧現有的迷宮生成算法有什麼問題? – 2012-03-21 03:30:51