Maze generation: Difference between revisions

(→‎{{header|AutoHotkey}}: AutoHotkey example added)
Line 1,021:
| | | | |
+---+---+---+---+---+---+---+---+---+---+---+</lang>
 
=={{header|Java}}==
<lang>
package org.rosettacode;
 
import java.util.Random;
 
/*
* recursive backtracking algorithm
* shamelessly borrowed from the ruby at
* http://weblog.jamisbuck.org/2010/12/27/maze-generation-recursive-backtracking
*/
public class MazeGenerator {
private int x;
private int y;
private int[][] maze;
private Random rand = new Random(System.currentTimeMillis());
 
public MazeGenerator(int x, int y) {
this.x = x;
this.y = y;
maze = new int[this.x][this.y];
generateMaze(0, 0);
}
 
public void display() {
for (int i = 0; i < y; i++) {
// draw the north edge
for (int j = 0; j < x; j++) {
System.out.print(((maze[j][i] & 1) == 0) ? "+--" : "+ ");
}
System.out.println("+");
// draw the west edge
for (int j = 0; j < x; j++) {
System.out.print(String.format("%s ",
((maze[j][i] & 8) == 0 ? "|" : " "), maze[j][i]));
}
System.out.println("|");
}
// draw the bottom line
for (int j = 0; j < x; j++) {
System.out.print("+--");
}
System.out.println("+");
}
 
private void generateMaze(int cx, int cy) {
for (DIR dir : randomize(new DIR[] { DIR.N, DIR.S, DIR.W, DIR.E })) {
int nx = cx + dir.dx;
int ny = cy + dir.dy;
if (between(nx, maze.length) && between(ny, maze[0].length)
&& (maze[nx][ny] == 0)) {
maze[cx][cy] |= dir.bit;
maze[nx][ny] |= dir.opposite.bit;
generateMaze(nx, ny);
}
}
}
 
private boolean between(int v, int upper) {
return (v >= 0) && (v < upper);
}
 
private DIR[] randomize(DIR[] list) {
for (int i = 0; i < list.length; i++) {
int r = rand.nextInt(list.length);
DIR t = list[i];
list[i] = list[r];
list[r] = t;
}
return list;
}
 
private enum DIR {
N(1, 0, -1), S(2, 0, 1), E(4, 1, 0), W(8, -1, 0);
private int bit;
private int dx;
private int dy;
private DIR opposite;
 
// use the static initializer to resolve forward references
static {
N.opposite = S;
S.opposite = N;
E.opposite = W;
W.opposite = E;
}
 
private DIR(int bit, int dx, int dy) {
this.bit = bit;
this.dx = dx;
this.dy = dy;
}
};
 
public static void main(String[] args) {
int x = args.length >= 1 ? (Integer.parseInt(args[0])) : 8;
int y = args.length == 2 ? (Integer.parseInt(args[1])) : 8;
MazeGenerator maze = new MazeGenerator(x, y);
maze.display();
}
 
}
</lang>
<lang>
+--+--+--+--+--+--+--+--+--+--+
| | | | |
+ + + + +--+ +--+ + + +
| | | | | | | |
+--+--+--+--+ +--+ +--+ + +
| | | |
+ +--+ +--+ +--+--+--+--+ +
| | | | |
+--+ +--+ +--+ +--+--+--+--+
| | | | | |
+ + + +--+--+--+--+--+ + +
| | | | | |
+ +--+--+--+--+ + + + + +
| | | | | | |
+ +--+--+ + +--+--+ +--+ +
| | | |
+ +--+--+--+--+--+ +--+--+ +
| | | | | |
+ +--+--+ + +--+--+ + + +
| | | |
+--+--+--+--+--+--+--+--+--+--+
</lang>
 
=={{header|JavaScript}}==
Anonymous user