Passe um gerador propagado pelo construtor de layout
Crie um gerador pseudo-aleatório propagado e passe-o para cada função de geração, em vez de chamar Math.random por meio de auxiliares não relacionados. O MDN observa que a semente inicial do Math.random não pode ser escolhida ou redefinida pelo usuário, portanto, ele não pode, por si só, fornecer uma semente reproduzível. Armazene a semente junto com um nível gerado ou seu relatório de bug. Se você adicionar ou reordenar sorteios aleatórios posteriormente, a mesma semente poderá produzir um layout diferente; versione o gerador ou registre o mapa gerado quando a reprodução exata de longo prazo for importante.
Separe as escolhas por finalidade, quando possível: uma sequência aleatória para o formato da sala, outro para decoração e outro para posicionamento do inimigo. Então, adicionar um desenho decorativo não mudará automaticamente o padrão do inimigo.
Gere, valide e apresente
Depois de construir uma sala, execute verificações estruturais antes de mostrá-la: existem entradas e saídas, as chaves necessárias cabem em blocos que podem ser percorridos e um algoritmo de busca de caminhos pode chegar à saída enquanto coleta itens obrigatórios. Se o layout falhar, tente novamente com um número limitado de novas sementes e, em seguida, use uma sala alternativa conhecida ou mostre uma falha de geração clara. Registre a semente rejeitada e o invariante com falha para que um layout inesperado possa ser reproduzido localmente.
Teste um pequeno conjunto de sementes selecionadas deliberadamente, incluindo valores semelhantes a limites aceitos pelo seu analisador de sementes, além de uma amostra de sementes comuns. Isto não é prova de que todas as sementes possíveis são válidas. É uma forma prática de exercitar tanto a reprodução determinística quanto o caminho de rejeição do gerador.
Mantenha a semente separada das reivindicações de dificuldade
Uma sala reproduzível não é automaticamente uma sala justa. Jogue exemplos gerados e pergunte se os perigos são visíveis e se a rota pretendida deixa tempo suficiente para reagir. Mantenha essa revisão separada da análise de distribuição em uma revisão de imparcialidade. Quando um defeito é encontrado, a semente permite que a equipe discuta um layout exato em vez de descrever um arranjo aproximado de memória.
Perguntas sobre geração de nível aleatório semeado
Posso reproduzir um nível com Math.random e um número salvo?
Não redefinindo o estado interno do Math.random; MDN diz que sua semente inicial não pode ser escolhida ou redefinida. Use um gerador de números aleatórios inicializado com uma semente sob seu controle e faça todas as escolhas de geração por meio dele.
Uma semente garante que cada nível gerado seja solucionável?
Não. Uma semente reproduz uma sequência escolhida; não valida o mapa resultante. Verifique a acessibilidade e as regras de objetos obrigatórios e, em seguida, rejeite ou repare layouts que falham.
Leitura complementar
Viu alguma informação desatualizada? Informar uma correção