2012-04-13 69 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); 
     } 
    } 

}