【问题标题】:Enum Type 2Darray maze枚举类型 2Darray 迷宫
【发布时间】:2012-04-13 22:14:09
【问题描述】:

我正在制作一个带有枚举类型的迷宫游戏来保存墙壁、开放空间(等)的值,但我不确定为什么这段代码不起作用,我正在尝试创建一个新棋盘并将所有内容设置为打开,然后遍历并随机设置数组中的点的值。

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); 

}

【问题讨论】:

    标签: java enums multidimensional-array maze


    【解决方案1】:

    这会照你说的做。不确定你会得到你想要的那种迷宫:

    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);
        }
    }
    

    【讨论】:

      【解决方案2】:

      我认为,你的内部循环应该是这样的

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

      ...与[r]

      不过我没试过。

      【讨论】:

        【解决方案3】:

        我认为你的迷宫很适合上课。这样的事情应该可以工作:

        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);
                }
            }
        

        }

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-11-01
          • 2012-09-16
          • 2011-09-22
          • 1970-01-01
          • 2018-10-18
          • 2017-01-14
          • 2020-06-14
          相关资源
          最近更新 更多