Как генерировать уникальные числа в диапазоне?

1

Как я могу генерировать уникальные числа в диапазоне 100000 - 999999 в javascript?

Я создаю игру, в которой игроки могут входить в комнаты, чтобы играть вместе.
Каждый игрок, который хочет войти в комнату, должен записать номер комнаты,
поэтому я хочу, чтобы числа были как можно меньше (6 цифр).

Поскольку запросы являются асинхронными, мне нужно найти способ присвоить номер комнаты
и убедитесь, что только 1 запрос получит его.
(Я также могу утверждать, что бэкэнд может понадобиться масштабировать в будущем,
поэтому он должен быть сторонним сервисом).

Более того, я хочу повторно использовать "выпущенные" номера,
которые закрыты.

Например:

Игрок a откройте номер комнаты 100. Игрок b открывает номер комнаты 101. Игрок закрыть помещение. a Игрок c откройте номер комнаты 100.

Как я могу это сделать?

  • 0
    Какой у тебя код с тех пор? Что ты уже пробовал? Вы работаете с массивами или объектами? и т.д. Попытайтесь быть более конкретным, пожалуйста.
  • 0
    Я не вижу, как больше деталей поможет ... это общий вопрос, например, как это делает kahoot! генерировать номера комнат
Теги:
synchronization

4 ответа

1

Сначала вы определяете свой диапазон, генерируете произвольный Math.floor(Math.random() * range ) затем добавляете их в массив, чтобы проверить его как ссылку, чтобы не допускать дублирования

var range = 100000
var choosenArr = [];
var choosen = 0;
choosen =  Math.floor(Math.random() * range );
if(choosenArr.indexOf(choosen) > -1){
  choosen =  Math.floor(Math.random() * range );  
}
choosenArr.push(choosen);

console.log(choosen)
console.log(choosenArr)
  • 0
    Несколько слов объяснения было бы хорошо ...
  • 0
    @JonasW. Готово ;)
0

Вы должны добавить свой код, который вы пробовали
но, например, после того, как у вас есть код для входа в систему:

    <script>
    var room =[];
    var user_name='a'; //have logged in user name
    function sel_room(){
        var i=document.form.room.value;

                 if(isNaN(i)==true || i<100000 || i>=1000000)
                 {
                     alert("please select between 100000-999999");
                     return;
                 }

                 if(document.form.btn.value == 'Exit')
                 {
                     room[i]=null;
                     document.form.btn.setAttribute("value","Go");
                     document.form.room.removeAttribute("disabled");
                     return;
                 }

                 if(room[i]==null)
                 {
                     room[i]=user_name;
                     alert("you'r in room " + i);
                     document.form.room.setAttribute("disabled","disabled");
                     document.form.btn.setAttribute("value","Exit");
                 }
                 else
                     alert("already used! please select another one"); 

                 }
    </script>

    <form name="form">
            <div>       
                inser room number:  
                        <input type="text" size="20" name="room" />
                        <br />
                        <input type="button" name="btn" value="Go" onclick="sel_room()" />

            </div>              
    </form>
0

Используйте Max значение для вызова этого метода.

function getRandomInt(max) {
  return Math.floor(Math.random() * Math.floor(max));
}

console.log(getRandomInt(3));
// expected output: 0, 1 or 2

console.log(getRandomInt(1));
// expected output: 0

console.log(Math.random());

//ожидаемый вывод: число от 0 до 1

function getRandomArbitrary(min, max) {
  return Math.random() * (max - min) + min;
}
0
var closer = [];
var room = Math.random()*899999+100000;
for(var i = 0; i < closer.length; i++){
  if(closer[i] == room){
    var room = Math.random()*899999+100000;
    i = 0;
  }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню