RandomNumberGenerator
Hérite de : RefCounted < Object
Fournit des méthodes pour générer des nombres pseudo-aléatoires.
Description
RandomNumberGenerator est une classe pour générer des nombres pseudo-aléatoires. Elle utilise actuellement l'algorithme PCG32.
Note : L'implémentation de l'algorithme est un détail d'implémentation, sur lequel il ne faudrait pas se baser.
Pour générer un flottant aléatoire (dans un intervalle donné) basé sur une graine dépendante du temps :
var rng = RandomNumberGenerator.new()
func _ready():
var mon_nombre_aleatoire = rng.randf_range(-10.0, 10.0)
Tutoriels
Propriétés
|
||
|
Méthodes
rand_weighted(weights: PackedFloat32Array) |
|
randf() |
|
randf_range(from: float, to: float) |
|
randi() |
|
randi_range(from: int, to: int) |
|
void |
Descriptions des propriétés
Initialise l'état du générateur de nombres aléatoires selon la valeur la graine donnée. Une graine donnée générera toujours la même suite de nombres pseudo-aléatoires.
Note : Le générateur n'est pas soumis à l'effet avalanche, et peut générer des flux similaires de nombres à partir d'une même graine. Préférez utiliser une fonction de hachage pour améliorer la qualité de la graine si elle provient d'une source externe.
Note : Définir cette propriété produit un effet secondaire qui change l'état state interne, donc assurez-vous d'initialiser la graine avant de modifier l'état state :
Note : La valeur par défaut de cette propriété est pseudo-aléatoire, et change lors de l'appel de randomize(). La valeur 0 documentée ici est une valeur générique, et pas la graine par défaut réelle.
var rng = RandomNumberGenerator.new()
rng.seed = hash("Godot")
rng.state = 100 # Restaure à un état précédemment enregistré.
L'état actuel du générateur de nombres aléatoires. Enregistrez puis restaurez cette propriété pour restorer l'état du générateur à un état précédent :
var rng = RandomNumberGenerator.new()
print(rng.randf())
var etat_sauvegarde = rng.state # Enregistre l'état actuel.
print(rng.randf()) # Avance l'état interne.
rng.state = etat_sauvegarde # Restaure l'état.
print(rng.randf()) # Affiche la même valeur que précédemment.
Note : Ne définissez pas l'état sauvegardé à des valeurs arbitraires, car le générateur de nombre aléatoires a besoin que l'état ait des propriétés particulières pour se comporter correctement. Cet état ne devrait être défini qu'à partir de valeurs qui proviennent de la propriété de l'état lui-même. Pour initialiser le générateur avec une entrée arbitraire, utilisez plutôt seed.
Note : La valeur par défaut de cette propriété est pseudo-aléatoire, et change lors de l'appel à randomize(). La valeur de 0 documentée ici est un placeholder, et non l'état par défaut réel.
Descriptions des méthodes
int rand_weighted(weights: PackedFloat32Array) 🔗
Renvoie un index aléatoire avec des poids non-uniformes. Affiche une erreur et renvoie -1 si le tableau est vide.
var rng = RandomNumberGenerator.new()
var mon_tableau = ["un", "deux", "trois", "quatre"]
var poids = PackedFloat32Array([0.5, 1, 1, 2])
# Affiche un des quatre éléments dans `mon_tableau`.
# Il est plus probable que "quatre" soit affiché, et moins probable que "un" soit affiché.
print(mon_tableau[rng.rand_weighted(poids)])
Renvoie un flottant pseudo-aléatoire entre 0.0 et 1.0 (inclus).
float randf_range(from: float, to: float) 🔗
Renvoie un flottant pseudo-aléatoire entre from et to (inclus).
float randfn(mean: float = 0.0, deviation: float = 1.0) 🔗
Renvoie un flottant pseudo-aléatoire, distribué normalement, depuis la moyenne mean et l'écart-type deviation spécifiés. Ceci est également connu en tant que loi gaussienne.
Note : Cette méthode utilise l'algorithme de la méthode de Box-Muller.
Renvoie un entier non signé de 32 bits pseudo-aléatoire compris entre 0 et 4294967295 (inclus).
int randi_range(from: int, to: int) 🔗
Renvoie un entier signé de 32 bits pseudo-aléatoire compris entre from et to (inclus).
void randomize() 🔗
Définit une graine basée sur le temps pour cette instance RandomNumberGenerator. Contrairement aux fonctions de génération de nombres aléatoires de @GlobalScope, différentes instances de RandomNumberGenerator peuvent utiliser des graines différentes.