function grid(size, count, maxWidth) {
const ret = {
squares: [],
neighbors: [],
matrix: {},
rows: Math.ceil(count / Math.floor(maxWidth / size)),
columns: Math.floor(maxWidth / size)
};
for (let i = 0; i < count; i++) {
const x = (i % Math.floor(maxWidth / size)) * size,
y = Math.floor(i / Math.floor(maxWidth / size)) * size;
const square = {
i: i,
x: x,
y: y,
cx: x + size / 2,
cy: y + size / 2,
mx: x / size,
my: y / size
};
ret.squares.push(square);
ret.matrix[`${square.mx},${square.my}`] = i;
if (square.mx != 0) {
ret.neighbors.push([i, ret.matrix[`${square.mx - 1},${square.my}`]]);
}
if (square.my != 0) {
ret.neighbors.push([i, ret.matrix[`${square.mx},${square.my - 1}`]]);
}
}
return ret;
}