Вопрос Javascript как сделать так, чтобы два рандомных числа в одном цикле не повтрялись

Регистрация
17 Дек 2013
Сообщения
88
Репутация
1
Спасибо
1
Монет
0
Делаю игру наподобие сапера. Нужно сгенерировать рандомное число, которое будет индексом клетки таблицы с бомбой. Но дело в том, что часто одно и тоже число генерируется два раза (делаю с помощью цикла) и вместо трех бомбочек появляется две. Это нужно как-то исправить, но в голову вообще ничего не приходит.
Вот код:
//Функция отрисовки таблицы (поля)
var drawGrid = function (){
var gameZone = document.querySelector("#gameGrid");
var gameZoneHTML = "";
for (var i = 0; i < gridSize; i++){
gameZoneHTML += "";

for (var j = 0; j< gridSize; j++){
gameZoneHTML += ""
};
gameZoneHTML += "";
}
gameZone.innerHTML = gameZoneHTML;
}
//Функция генерации бомбочек легкой сложности
var placeBombsEasy = function(){
for (i = 0; i<3; i++){
var tds = document.querySelectorAll("td");
tds[Math.floor(Math.random()*25)].classList.add("bomb")}
}
//Функция генерации бомбочек средней сложности
var placeBombsNorm = function(){
for (i = 0; i<9; i++){
var tds = document.querySelectorAll("td");
tds[Math.floor(Math.random()*49)].classList.add("bomb")}
}
//Функция генерации бомбочек сложной сложности
var placeBombsHard = function(){
for (i = 0; i<15; i++){
var tds = document.querySelectorAll("td");
tds[Math.floor(Math.random()*100)].classList.add("bomb")}
}
//Добавляем переменную размера поля
var gridSize;
//Выбираем кнопку "легкая"
var difEasy = document.querySelector("#difEasy");
//Выбираем кнопку "нормальная"
var difNorm = document.querySelector("#difNorm");
//Выбираем кнопку "сложная"
var difHard = document.querySelector("#difHard");
//Если нажали на кнопку "легкая", построить таблицу 5х5 и расположить 3 бомбы
difEasy.addEventListener("click", function(){
gridSize = 5;
drawGrid();
placeBombsEasy();
});
//Если нажали на кнопку "нормальная", построить таблицу 7х7 расположить 9 бомб
difNorm.addEventListener("click", function(){
gridSize = 7;
drawGrid();
placeBombsNorm();
});
//Если нажали на кнопку "сложная", построить таблицу 10х10 расположить 10 бомб
difHard.addEventListener("click", function(){
gridSize = 10;
drawGrid();
placeBombsHard();
});
 
Пожалуйста имейте ввиду, что этот пользователь забанен
Ну читать все это нет желания. В таких случаях запоминают рандомные числа и если они совпали то еще раз дать рандомное число. Проверить есть ли уже бомба на этом месте и если есть то сгенерировать другое место.
 
проверять что сгенерировалось и генерировать ещё раз пока все три значения не будут разными (можно рекурсивно)
 
вместо tds[Math.floor(Math.random()*25)].classList.add("bomb") написать while(true) { var x = tds[Math.floor(Math.random()*25)].classList; if(!x.contains("bomb")) { x.add("bomb"); break; } }
 
Назад
Сверху