生成迷宫
Using Recursive Method
After you choose your starting point, pass that information to the recursive method. In the recursive method, you can do the following…
- Generate an int array with 4 random numbers to represent directions.
- Start a for loop to go for 4 times.
- Set up a switch statement to take care of 4 directions.
- For that direction, check if the new cell will be out of maze or if it’s a path already open. If so, do nothing.
- If the cell in that direction is a wall, set that cell to path and call recursive method passing the new current row and column.
- Done
public int[][] generateMaze() { int[][] maze = new int[height][width]; // Initialize for (int i = 0; i < height; i++) for (int j = 0; j < width; j++) maze[i][j] = 1; Random rand = new Random(); // r for row、c for column // Generate random r int r = rand.nextInt(height); while (r % 2 == 0) { r = rand.nextInt(height); } // Generate random c int c = rand.nextInt(width); while (c % 2 == 0) { c = rand.nextInt(width); } // Starting cell maze[r][c] = 0; // Allocate the maze with recursive method recursion(r, c); return maze; } public void recursion(int r, int c) { // 4 random directions int[] randDirs = generateRandomDirections(); // Examine each direction for (int i = 0; i < randDirs.length; i++) { switch(randDirs[i]){ case 1: // Up // Whether 2 cells up is out or not if (r - 2 <= 0) continue; if (maze[r - 2][c] != 0) { maze[r-2][c] = 0; maze[r-1][c] = 0; recursion(r - 2, c); } break; case 2: // Right // Whether 2 cells to the right is out or not if (c + 2 >= width - 1) continue; if (maze[r][c + 2] != 0) { maze[r][c + 2] = 0; maze[r][c + 1] = 0; recursion(r, c + 2); } break; case 3: // Down // Whether 2 cells down is out or not if (r + 2 >= height - 1) continue; if (maze[r + 2][c] != 0) { maze[r+2][c] = 0; maze[r+1][c] = 0; recursion(r + 2, c); } break; case 4: // Left // Whether 2 cells to the left is out or not if (c - 2 <= 0) continue; if (maze[r][c - 2] != 0) { maze[r][c - 2] = 0; maze[r][c - 1] = 0; recursion(r, c - 2); } break; } } } /** * Generate an array with random directions 1-4 * @return Array containing 4 directions in random order */ public Integer[] generateRandomDirections() { ArrayList<Integer> randoms = new ArrayList<Integer>(); for (int i = 0; i < 4; i++) randoms.add(i + 1); Collections.shuffle(randoms); return randoms.toArray(new Integer[4]); }

浙公网安备 33010602011771号