Comment pourrais-je utiliser une graine aléatoire pour générer un niveau de jeu? La même graine devrait toujours générer exactement le même niveau.
Pour cet exemple, ce serait un niveau de style Worms . Ainsi, chaque niveau aurait un thème (prairies, neige, etc.), un terrain de base, différents objets tels que des arbres.
Alors, où pourrais-je commencer à créer ce genre de générateur de niveau? Quel serait impliqué? Quels concepts utilise-t-il?
Les points bonus pour tous les bons liens (tout bonus de points de bonus pour tout ce qui concerne la façon dont il a été fait dans les vers ou similaires).
Merci.
algorithm
procedural-generation
random
Adam Harte
la source
la source
srand(int)
. Les appels ultérieurs àrand()
renverront des valeurs séquentielles toujours calculées dans le même ordre, en fonction de cette valeur initiale. Vous définissez la graine une fois dans votre programme. Après cela, si l'algorithme ne dépend que des résultatsrand
, vous obtiendrez le même résultat à chaque fois.Réponses:
La clé consiste à utiliser votre propre générateur de nombres pseudo-aléatoires personnalisé que vous initialisez avec la valeur de départ connue. Le "Mersenne Twister" est un algorithme populaire, voici l’entrée Wikipedia et quelques exemples de sources . Cet algorithme, ainsi que d’autres, PRNG produisent en fait une série (très longue) de nombres fixes pour lesquels la valeur de départ sert de point de départ.
Tant que vous suivez exactement la même procédure pour générer votre monde à chaque fois, chaque valeur représentera un monde reproductible unique.
la source
Voici un générateur de nombres pseudo aléatoires PRNG implémenté dans ActionScript (disponible dans AS2 ou AS3). C'est léger et rapide, idéal pour les jeux: http://lab.polygonal.de/2007/04/21/a-good-pseudo-random-number-generator-prng/
L'implémentation ci-dessus est basée sur le PRNG Park-Miller-Carta . Ce site vous donnera plus d'informations sur les calculs derrière tout cela.
Pour construire un niveau semblable à celui des vers, j’utiliserais probablement une fonction Perlin-Noise . Si vous générez une image de bruit perlin avec une hauteur de 1 px et la largeur de votre monde de jeu, vous obtenez une carte de hauteur, prête à être utilisée. Les fonctions de bruit Perlin génèrent également toujours la même carte avec la même graine.
Vous pouvez ensuite utiliser le PRNG mentionné ci-dessus pour déterminer où placer des objets aléatoires sur la carte ou créer un trou dans le sol. Pour les trous, vous pouvez également profiter du bruit perlin à nouveau. Créez simplement une image de bruit de fond avec la taille de votre carte (x, y), puis créez un trou dans votre carte où la valeur en pixels est inférieure à un seuil donné (par exemple 0,2).
la source
Théoriquement, si vous pouvez utiliser un générateur de nombres pseudo-aléatoires (tel que Perlin-Noise ou Marsenne Twister) pour partager des cartes via
nombre de semences alors vous pouvez également créer des cartes personnalisées et les réduire à des semences, résoudre le problème de ne pas être en mesure de créer
cartes personnalisées lors de l'utilisation de PRNG. Ceci est cependant construit sur quelques présomptions. À savoir que les générateurs de nombres pseudo-aléatoires sont
un processus réversible et que TOUTES les données introduites à l'envers dans un PRNG produiront une graine valide, et encore moins une graine du tout!
la source