Oneshot Gems
Jogar agora

Para desenvolvedores de jogos

Trate uma semente como entrada para um layout reproduzível

Quando uma sala gerada processualmente é injusta ou impossível, a principal questão de depuração é se você pode construir a mesma sala novamente. Uma semente fornece a um gerador aleatório um ponto de partida repetível, desde que todas as opções de geração usem esse gerador em uma ordem consistente. Esta tarefa difere de julgar se os resultados aleatórios parecem justos: aqui o objetivo é reproduzir um layout, inspecionar a sua construção e rejeitá-lo quando violar as regras estruturais do nível.

Nesta página

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

Continue jogando.

Jogos grátis no navegador, prontos quando você quiser. Encontre um de que goste e faça dele seu próximo favorito.

Siga sua curiosidade