2012-03-21 39 views
0

私の質問は、Javaでランダムに生成された迷路をどのように作成することができますか?私は迷路を作成する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

あなたがこれを行うことができますそこに文学がたくさんあります。ここでそれを再ハッシュすることは、それを正義にするつもりはありません。

あなたが尋ねた2つの質問については、あなたのアルゴリズムは、配列の固定サイズに依存するという点で脆弱であると聞こえます。そのように設計されていない場合は、デバッガをつかんで、配列の長さ(array.length)を超えている理由を知る必要があります。 2番目の質問については、単純なインデックスを使用して近隣のセルを表示します。

  • 左迷路の細胞[行] [COL-1]
  • 細胞右迷路に[行]迷路上記[COL + 1]
  • 細胞[行1] [COL]
  • 迷路以下
  • セル[行+ 1] [COL]はもちろん

あなたは迷路の端にある行、列として配列の境界外に行くのを防止する必要があります。

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

彼のリンクは洞察力を提供します.. – Josh

+0

@ user1136610既存の迷路生成アルゴリズムをレビューする際の問題は何ですか? –