Oneshot Gems
Jouer

Pour les développeurs de jeux

Traitez une graine comme entrée pour une mise en page reproductible

Lorsqu'une salle générée de manière procédurale est injuste ou impossible, la question clé du débogage est de savoir si vous pouvez reconstruire la même salle. Une graine donne à un générateur aléatoire un point de départ reproductible, à condition que tous les choix de génération utilisent ce générateur dans un ordre cohérent. Cette tâche diffère de celle de juger si des résultats aléatoires semblent justes : ici, l'objectif est de reproduire une configuration, d'inspecter sa construction et de la rejeter lorsqu'elle viole les règles structurelles du niveau.

Sur cette page

Transmettez un générateur prédéfini via le générateur de mise en page

Créez un générateur pseudo-aléatoire prédéfini et transmettez-le à chaque fonction de génération plutôt que d'appeler Math.random via des assistants non liés. MDN note que la graine initiale de Math.random ne peut pas être choisie ou réinitialisée par l'utilisateur, elle ne peut donc pas fournir à elle seule une graine rejouable. Stockez la graine à côté d'un niveau généré ou de son rapport de bug. Si vous ajoutez ou réorganisez des tirages aléatoires ultérieurement, la même graine peut produire une disposition différente ; versionnez le générateur ou enregistrez la carte générée lorsque la relecture exacte à long terme est importante.

Séparez les choix par objectif lorsque cela est possible : un flux pour la forme de la pièce, un autre pour la décoration et un autre pour le placement de l'ennemi. Ensuite, l’ajout d’un tirage décoratif ne déplacera pas automatiquement le motif ennemi.

Générer, valider, puis présenter

Après avoir construit une pièce, effectuez des vérifications structurelles avant de la montrer : l'entrée et la sortie existent, les clés requises tiennent sur des tuiles praticables et un algorithme de recherche de chemin peut atteindre la sortie tout en collectant les éléments obligatoires. Si la mise en page échoue, réessayez avec un nombre limité de nouvelles graines, puis utilisez une salle de secours connue ou affichez un échec de génération clair. Enregistrez la graine rejetée et l'invariant ayant échoué afin qu'une mise en page inattendue puisse être rejouée localement.

Testez un petit ensemble de graines délibérément sélectionnées, y compris des valeurs de type limite acceptées par votre analyseur de graines, ainsi qu'un échantillon de graines ordinaires. Cela ne prouve pas que toutes les graines possibles sont valides. C'est un moyen pratique d'exercer à la fois la reproduction déterministe et le chemin de rejet du générateur.

Gardez la graine séparée des réclamations de difficulté

Une salle reproductible n’est pas automatiquement une salle équitable. Jouez des exemples générés et demandez si les dangers sont visibles et si l'itinéraire prévu laisse suffisamment de temps pour réagir. Séparez cet examen de l’analyse de la distribution dans le cadre d’un examen d’équité. Lorsqu'un défaut est détecté, la graine permet à l'équipe de discuter d'une disposition exacte au lieu de décrire une disposition approximative de mémoire.

Questions sur ⁨génération de niveaux aléatoires prédéfinis⁩

Puis-je reproduire un niveau avec Math.random et un numéro enregistré ?

Pas en réinitialisant l'état intégré de Math.random ; MDN indique que sa graine initiale ne peut pas être choisie ou réinitialisée. Utilisez un générateur pseudo-aléatoire initialisé avec une graine que vous contrôlez, puis faites passer tous les choix de génération par ce générateur.

Une graine garantit-elle que chaque niveau généré peut être résolu ?

Non. Une graine reproduit une séquence de choix ; il ne valide pas la carte résultante. Vérifiez l'accessibilité et les règles relatives aux objets requis, puis rejetez ou réparez les mises en page qui échouent.

Pour aller plus loin

Vous avez repéré une information dépassée ? Signaler une correction

Continuez à jouer.

Des jeux gratuits sur navigateur, prêts quand vous l’êtes. Trouvez celui qui vous plaît et faites-en votre prochain favori.

Suivez votre curiosité