Repository navigation
Expand file tree
/
Copy pathmazetest.js
More file actions
57 lines (54 loc) · 2.04 KB
/
Copy pathmazetest.js
File metadata and controls
57 lines (54 loc) · 2.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
let arr = [];
function maze (x, y) {
var n = x * y - 1;
if (n < 0) { alert('illegal maze dimensions'); return; }
var horiz = []; for (var j = 0; j < x + 1; j++) horiz[j] = [];
var verti = []; for (var j = 0; j < y + 1; j++) verti[j] = [];
var here = [Math.floor(Math.random() * x), Math.floor(Math.random() * y)];
var path = [here];
var unvisited = [];
for (var j = 0; j < x + 2; j++) {
unvisited[j] = [];
for (var k = 0; k < y + 1; k++) { unvisited[j].push(j > 0 && j < x + 1 && k > 0 && (j != here[0] + 1 || k != here[1] + 1)); }
}
while (n > 0) {
var potential = [[here[0] + 1, here[1]], [here[0], here[1] + 1],
[here[0] - 1, here[1]], [here[0], here[1] - 1]];
var neighbors = [];
for (var j = 0; j < 4; j++) {
if (unvisited[potential[j][0] + 1][potential[j][1] + 1]) { neighbors.push(potential[j]); }
}
if (neighbors.length) {
n = n - 1;
next = neighbors[Math.floor(Math.random() * neighbors.length)];
unvisited[next[0] + 1][next[1] + 1] = false;
if (next[0] == here[0]) { horiz[next[0]][(next[1] + here[1] - 1) / 2] = true; } else { verti[(next[0] + here[0] - 1) / 2][next[1]] = true; }
path.push(here = next);
} else { here = path.pop(); }
}
return ({ x: x, y: y, horiz: horiz, verti: verti });
}
function display (m) {
var text = [];
for (var j = 0; j < m.x * 2 + 1; j++) {
var line = [];
if (j % 2 == 0) {
for (var k = 0; k < m.y * 4 + 1; k++) {
if (k % 4 == 0) { line[k] = '+'; } else
if (j > 0 && m.verti[j / 2 - 1][Math.floor(k / 4)]) { line[k] = ' '; } else { line[k] = '-'; }
}
} else {
for (var k = 0; k < m.y * 4 + 1; k++) {
if (k % 4 == 0) {
if (k > 0 && m.horiz[(j - 1) / 2][k / 4 - 1]) { line[k] = ' '; } else { line[k] = '|'; }
} else { line[k] = ' '; }
}
}
if (j == 0) line[1] = line[2] = line[3] = ' ';
if (m.x * 2 - 1 == j) line[4 * m.y] = ' ';
text.push(line.join('') + '\r\n');
}
return text.join('');
}
arr = maze(10, 10);
console.log(display(maze(10, 10)));