Search code examples
javarandommaze

How do i generate a random maze in java?


Ok, so i want t generate a random maze for my maze game. I have hardcoded the maze like this, and have several different versions that i would like to be able to have spawned at random.

public Maze() {
        this.mazeMap1 = new BlockType[][] {
                {H, H, H, H, H, H, H, H, H, H, H, H, H, H, H},
            {H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
            {H, E, E, E, H, E, E, H, E, E, H, E, E, E, H},
            {H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
            {H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
            {H, E, E, E, H, E, E, H, E, E, H, E, E, E, H},
            {H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
            {H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
            {H, E, E, E, H, E, E, H, E, E, H, E, E, E, H},
            {H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
            {H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
            {H, E, E, E, H, E, E, H, E, E, H, E, E, E, H},
            {H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
            {H, E, E, E, E, E, E, E, E, E, E, E, E, E, H},
            {H, H, H, H, H, H, H, H, H, H, H, H, H, H, H}
            };
}

then i create a getter and return the maze

public BlockType[][] getMazeMap() {
return mazeMap2;
}

Then i have a class 'Board' where i make the maze

 private void makeBoard() {
        blocks = new Maze().getMazeMap();
    }

If i would have, say 10 different hardcoded mazes, how would i generate one at random?


Solution

  • You need a collection of your maze maps. Having mazemap1, mazemap2, etc. doesn't (easily) allow you to pick one.

    ArrayList<Block[][]> mazemaps = new ArrayList<>();
    
    mazemaps.add( new BlockType[][] { ... } ); // with all your data
    mazemaps.add( new BlockType[][] { ... } ); // second map data
    

    Then you can pick one:

    int maze = new Random().nextInt(mazemaps.size());
    return mazemaps.get(maze);
    

    (There are plenty of other things you can maybe do better, but this is a start)