2012-04-13 71 views
0

我正在做一個枚舉類型的迷宮遊戲,以保存牆的值,開放空間(等),我不知道爲什麼這段代碼不起作用,我試圖創建一個新的板和集一切打開,然後通過並隨機設置值到陣列中的點。枚舉類型2Darray迷宮

maze = new Cell[row][col]; 
for (int r = 0; r < maze.length; r++) { 
    for (int c = 0; c < maze.length; c++) 
     maze[r][c].setType(CellType.OPEN); 
    } 

Random randomMaze = new Random(); 
for (int ran = 0; ran <= numWalls ; ran++){ 
    maze[randomMaze.nextInt(maze.length)][randomMaze.nextInt(maze.length)].setType(CellType.WALL); 

} 

回答

0

這會做你說什麼。不確定你會得到你想要的那種迷宮:

import java.util.Random; 
class Maze { 
    enum CellType { 
     open,wall; 
    } 
    Maze(int n) { 
     this.n=n; 
     maze=new CellType[n][n]; 
     init(); 
    } 
    private void init() { 
     for(int i=0;i<n;i++) 
      for(int j=0;j<n;j++) 
       maze[i][j]=CellType.open; 
    } 
    void randomize(int walls) { 
     init(); 
     Random random=new Random(); 
     for(int i=0;i<=walls;i++) 
      maze[random.nextInt(n)][random.nextInt(n)]=CellType.wall; 
    } 
    public String toString() { 
     StringBuffer sb=new StringBuffer(); 
     for(int i=0;i<n;i++) { 
      for(int j=0;j<n;j++) 
       switch(maze[i][j]) { 
        case open: 
         sb.append(' '); 
         break; 
        case wall: 
         sb.append('|'); 
         break; 
       } 
      sb.append('\n'); 
     } 
     return sb.toString(); 
    } 
    final int n; 
    CellType[][] maze; 
} 
public class Main { 
    public static void main(String[] args) { 
     Maze maze=new Maze(5); 
     System.out.println(maze); 
     maze.randomize(4); 
     System.out.println(maze); 
    } 
} 
0

我想,你的內循環應該是這樣

for (int c = 0; c < maze[r].length; c++) 

...與[r]

雖然我還沒有嘗試過。

0

我認爲你的迷宮會是一個很好的候選人。像這樣的東西應該工作:

import java.util.Random; 

public class Maze { 
    private int[][] mMaze; 
    private int mRows; 
    private int mCols; 

    //enums here: 
    public static int CELL_TYPE_OPEN = 0; 
    public static int CELL_TYPE_WALL = 1; 

    public Maze(int rows, int cols){ 
     mRows = rows; 
     mCols = cols; 
     mMaze = new int[mRows][mCols]; 
     for (int r = 0; r < mRows; r++) { 
      for (int c = 0; c < mCols; c++) { 
       mMaze[r][c] = Maze.CELL_TYPE_OPEN; 
      } 
     } 
    } 

    public void RandomizeMaze(int numWalls){ 
     Random randomMaze = new Random(); 
     for (int ran = 0; ran <= numWalls ; ran++){ 
      mMaze[randomMaze.nextInt(mRows)][randomMaze.nextInt(mCols)]=(Maze.CELL_TYPE_WALL); 
     } 
    } 

}