Prefácio
No desenvolvimento do front-end, especialmente o desenvolvimento de jogos, números aleatórios são frequentemente usados, então pensaremos em: Math.random , vamos dar uma olhada no seguinte código:
for (var i = 0; i <10; i ++) {document.writeln (math.random ()+<r />); }A execução do código acima gera 10 números diferentes. Claro que você pode gerar mais, o que parece muito bom. Se isso é tudo, não há necessidade de escrever este artigo.
Exemplo
Tente pensar sobre isso. If we make a game in a certain scenario and the user exits halfway through the play, so that the user can choose to continue the previous progress next time he comes in. Then the problem is now: we can record simple description data such as user play progress and user points, but the obstacles, flying objects and many decorative gadgets drawn in the game, they even start to output randomly every time the user points starts to record everything on the canvas, their size, location, etc., which is really desnecessário.
Então o número de sementes aleatórias aparece. Se tivermos um valor de semente quando o elemento for desenhado aleatoriamente na tela, e a posição, tamanho etc. de todos os elementos da página são calculados com base nessa semente; então, quando o segundo desenho é desenhado, precisamos apenas passar nesta semente para reproduzir os elementos de tela inacessados anteriormente.
Então, neste momento, você descobrirá que a matemática. Random que vem com JS não está funcionando bem e não pode atender às necessidades. Vamos continuar olhando para este código:
A cópia do código é a seguinte:
Math.seed = 5; Math.seedrandom = function (max, min) {max = max || 1; min = min || 0; Math.seed = (Math.seed * 9301 + 49297) % 233280; var rnd = math.seed / 233280.0; retornar min + rnd * (max - min); }; for (var i = 0; i <10; i ++) {document.writeln (math.seedrandom ()+<r />); }
Execute o código acima e você descobrirá que, se a semente matemática. As sementes permaneceram inalteradas, o número aleatório gerado não mudará. Ah, se essa função for introduzida, reproduzir a cena do jogo poderá ser alcançada. Embora mais detalhes sejam necessários, o mecanismo pode ser garantido. O foco deste artigo não é implementar esse jogo.
O foco deste artigo é : (Math.Eed * 9301 + 49297) % 233280 , por que esses três valores não são outros e que origens misteriosas esses três números têm?
Um gerador de números pseudo-aleatórios como o Math.seedrandom é chamado de gerador congruente linear (LCG, gerador congruente linear). Quase todos os rands fornecidos pela biblioteca de tempo de execução usam LCG, que é como:
I n+1 = ai n+c (mod m)
O período máximo m da sequência de números pseudo-aleatórios gerados está entre 0 e M-1. Para alcançar este ciclo máximo, é necessário atender:
1.C e M são mutuamente exclusivos
2.a - 1 pode ser dividido por todos os fatores primos de M
3. Se m é um múltiplo de 4, a - 1 também deve ser um múltiplo de 4
Os três acima são chamados teorema de Hull-Dobell. Como um gerador de números pseudo-aleatórios, é embaraçoso ficar preso se o ciclo não for grande o suficiente, então esse é um dos requisitos. Portanto, o seguinte é: a = 9301, c = 49297, m = 233280. Todos os três itens acima são satisfeitos.
Resumir
O exposto acima é uma introdução a como implementar e funcionar números aleatórios de sementes no JS. Espero que seja útil para os alunos de JavaScript.