Эта строка в вашем коде ...
var bias = $this.Settings.randomPercentage / 100;
for (var i = 0; i < total; i++) {
$this.Infos.grid[i] = Math.random() < bias;
}
... это то, что вызывает эту «неслучайность». Это действительно должно быть ...
var random = Math.floor((Math.random() * total) + 1);
Я предполагаю, что это 10
был оригинальный размер этой сетки, вот почему он здесь. Но это явно неправильно: вы должны выбрать свою позицию на основе текущего размера сетки.
В качестве опоры, без обид, но я все же считаю, что алгоритм, указанный в ответе @JayC, превосходит ваш. И это довольно просто реализовать, просто смените две петли в Math.random=(function(rand) { var salt=0; document.addEventListener('mousemove',function(event) { salt=event.pageX*event.pageY; }); return function() { return (rand()+(1/(1+salt)))%1; }; })(Math.random);
функции на одну:
r
С этим изменением вы больше не будете страдать от побочного эффекта повторного использования одинаковых номеров в r < 0.2
строке, что снизило фактическую заполняемость ячейки в исходном коде.