Предисловие
В переднем конце, особенно в разработке игр, часто используются случайные числа, поэтому мы подумаем: Math.random , давайте посмотрим на следующий код:
for (var i = 0; i <10; i ++) {document.writeln (math.random ()+<br />); }Запуск вышеупомянутого кода генерирует 10 различных чисел. Конечно, вы можете генерировать больше, что выглядит довольно хорошо. Если это все, то нет необходимости писать эту статью.
Пример
Попробуйте подумать об этом. Если мы сделаем игру в определенном сценарии, и пользователь выходит из игры на полпути, чтобы пользователь мог выбрать продолжение предыдущего прогресса в следующий раз, когда он выйдет. Тогда проблема в том, что теперь мы можем записать простые данные, такие как прогресс игры пользователя и пользовательские точки, но препятствия, летающие объекты и многие декоративные гаджеты, нарисованные в игре, они действительно начинают случайным образом, каждый раз, когда пользователь начинает записывать все, что может на все, что может, возможно, по имени. ненужный.
Таким образом, появляется случайное число семян. Если у нас есть значение семян, когда элемент случайным образом нарисован на холсте, а положение, размер и т. Д. Из всех элементов на странице рассчитываются на основе этого семени, то когда нарисован второй чертеж, нам нужно только пройти в этом семени, чтобы воспроизвести ранее незаконченные элементы холста.
Тогда в настоящее время вы обнаружите, что математика, которая поставляется с JS, не работает хорошо и не может удовлетворить потребности. Давайте продолжим смотреть на этот код:
Кода -копия выглядит следующим образом:
Math.seed = 5; Math.seedrandom = function (max, min) {max = max || 1; мин = мин || 0; Math.seed = (math.seed * 9301 + 49297) % 233280; var rnd = math.seed / 233280.0; вернуть мин + rnd * (макс - мин); }; for (var i = 0; i <10; i ++) {document.writeln (math.seedrandom ()+<br />); }
Запустите приведенный выше код, и вы обнаружите, что если Seed Math.seed остается неизменным, генерируемое случайное число не изменится. О, если эта функция введена, то воспроизведение игровой сцены может быть достигнуто. Хотя требуется более подробная информация, механизм может быть гарантирован. В центре внимания этой статьи не в реализации такой игры.
В центре внимания этой статьи : (Math.seed * 9301 + 49297) % 233280 , почему эти три значения, а не другие, и какое таинственное происхождение у этих трех чисел?
Генератор номеров псевдолупита, такой как Math.seedrandom, называется линейным конгруэнтным генератором (LCG, линейным конгрессионным генератором). Почти все ранды, предоставленные библиотекой времени выполнения, используют LCG, что похоже на:
I n+1 = ai n+c (mod m)
Максимальный период M сгенерированной последовательности псевдолудоров составляет от 0 до M-1. Для достижения этого максимального цикла необходимо встретить:
1.c и m взаимоисключающие
2.A - 1 может быть разделен на все основные факторы M
3. Если M кратно 4, A - 1 также должен быть кратным 4
Вышеуказанные три называются теоремой корпуса. Как генератор номеров псевдолупита, смущает застрять, если цикл недостаточно большой, так что это одно из требований. Следовательно, следующие: A = 9301, C = 49297, M = 233280. Все вышеперечисленные три пункта удовлетворены.
Суммировать
Выше приведено введение в то, как реализовать и функционировать случайные числа в JS. Я надеюсь, что это будет полезно для учащихся JavaScript.