-
Notifications
You must be signed in to change notification settings - Fork 1
/
maze.js
79 lines (72 loc) · 2 KB
/
maze.js
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
var generator = require("./generator");
function build_maze(t, d, threshold){
let rec = function(pos){
if (pos === d) {
return 1*(Math.random() > threshold);
} else {
let group = new Array(t);
for (var i = 0; i < t; ++i)
group[i] = rec(pos + 1);
return group;
}
};
return rec(0);
}
function get_value(maze, pos){
let rec = function(sub_maze, sub_pos){
if (sub_pos === pos.length - 1){
return sub_maze[pos[sub_pos]];
} else {
return rec(sub_maze[pos[sub_pos]], sub_pos + 1);
}
};
return rec(maze, 0);
}
function get_projection(maze, pos, dim_x, dim_y) {
let t = maze.length;
let matrix = new Array(t);
let new_pos = pos.slice();
for (let i = 0; i < t; ++i) {
new_pos[dim_x] = i;
matrix[i] = new Array(t);
for (let j = 0; j < t; ++j) {
new_pos[dim_y] = j;
matrix[i][j] = get_value(maze, new_pos);
}
}
return matrix;
}
function calc_threshold(t, d){
return 0.5;
}
function build_game(t, d){
let are_equal_arrays = function(arr1, arr2){
if (arr1.length !== arr2.length) return false;
for (var i = 0; i < arr1.length; ++i){
if (arr1[i] !== arr2[i]){
return false;
}
}
return true;
};
let maze = generator.createMaze(t, d); //build_maze(t, d, calc_threshold(t, d));
let position = new Array(d);
let goal = new Array(d);
var i;
do {
for (i = 0; i < d; ++i) {
position[i] = Math.floor(t * Math.random());
goal[i] = Math.floor(t * Math.random());
}
} while (get_value(maze, position) === 1 ||
get_value(maze, goal) === 1 ||
are_equal_arrays(position, goal));
return {
't': t,
'd': d,
'maze': maze,
'position': position,
'goal': goal
}
}
module.exports = { build_game, get_projection };