Есть код js:
var W = 800, H = 510,
box = null, boxW = 80, boxH = 80, coords = [], countClicks = 0, amount = 3, level=1;
function start(){
window.arrayNums = rand(amount, amount*2, amount).sort();
for(var i = 0; i <amount; i++) {
generate(arrayNums[i]);
}
var numbersResult = new Array();
$(".box").click(function(){
$(this).html($(this).data('number'));
numbersResult.push(parseInt($(this).data('number')));
countClicks++;
console.log(countClicks);
if(countClicks==amount){
console.log(numbersResult);
console.log(arrayNums);
for(var i = 0; i<amount;i++){
if(numbersResult.toString()==arrayNums.toString()){
countClicks=0;
console.log('Win!');
amount++;
$("#game-area").html('');
level++;
start();
$(".level").html(level);
}
else{
console.log('Loh!');
$("#game-area").html('');
countClicks=0;
amount=3;
level=1;
start();
$(".level").html(level);
}
}
}
});
setTimeout(function(){
$(".box").each(function(){
$(this).html('?')
});
}, (1000*amount)/2);
}
$(document).ready(function(){
box = document.getElementById("game-area");
box.style.width = W + 'px';
box.style.height = H + 'px';
$(".level").html(level);
start();
});
function getRandomInt(min, max)
{
return Math.floor(Math.random() * (max - min + 1)) + min;
}
function rand(max, min, length){
var result = [],
resultSorted = [];
if(typeof max !== 'number') return Math.random();
if(typeof min !== 'number') return Math.floor(Math.random() * ++max);
if(min > max) min = [max, max = min][0];
if(!length || typeof length !== 'number') return Math.floor(Math.random() * (max - min + 1)) + min;
if(length > max - min + 1) throw new RangeError('invalid length.');
for(var j = 0, random, index; j < length; j++, max--){
random = Math.floor(Math.random() * (max - min + 1)) + min;
for(index = j; index && resultSorted[index-1] <= random; index--) random++;
result.push(random);
resultSorted.splice(index, 0, random);
}
return result;
}
function generate(number) {
var x = 0, y = 0, i = 0;
do {
x = Math.floor(Math.random() * ( W - boxW ));
y = Math.floor(Math.random() * ( H - boxH ));
i++;
} while((i < amount) && intersect(x, y));
if(i < amount) {
coords.push({
x : x,
y : y
});
addBox(x, y, number);
}
};
function intersect(x, y) {
var i = coords.length;
while(i-- > 0) {
if(Math.abs(coords[i].x - x) > boxW || Math.abs(coords[i].y - y) > boxH) continue;
return true;
}
return false;
}
function addBox(x, y, num) {
var div = document.createElement("div");
div.className = "box";
div.style.left = x + 'px';
div.style.top = y + 'px';
div.style.width = boxW + 'px';
div.style.height = boxH + 'px';
div.setAttribute('data-number', num);
div.innerHTML = num;
box.appendChild(div);
}
Это генерирует блоки с числами. Но случается ситуация, когда блоков генерится не 3, а 2. Не 4, а 3. И т.д. В основном в начале 3 блока добавляет, но на 1 случай из 10 генерит на один меньше. В чем причина этого бага?