top of page

GDScript intègre nativement des fonctions et méthodes dédié au random.

​

Seed interne.

Godot à la particularité d’avoir un seed interne qui va driver la génération aléatoire de toutes les fonctions liées au random.

Il faut donc avoir conscience que tant que ce seed interne reste le même, toutes les fonctions de génération aléatoire pourraient sembler ne pas générer des nombres aléatoire puisque leur seed reste constant.

Pour avoir de la « vrai » génération aléatoire, il faut donc demander à Godot de changer aléatoirement son seed interne, notamment avec la fonction randomize().

 

 

Fonctions random de GDScript

Les fonctions random de GDScript sont :

  • rand_range(from, to) qui retourne un nombre aléatoire de type float compris dans une plage indiqué en argument. Sa plage est inclusive.

  • randi() qui retourne un nombre entier aléatoire. Il est possible de lui spécifier une plage (voir exemple plus bas).

  • randf() qui retourne un nombre décimal aléatoire compris entre 0 et 1

  • rand_seed(seed, int) génère une liste de nombre aléatoire dépendant d’un seed. En récupérant et en stockant le seed, on peut reproduire à l’identique cette liste de nombres.

  • randomize() qui permet de générer un seed interne aléatoire. Cette fonction s’utilise principalement dans la fonction _ready() pour changer le seed interne à chaque initialisation d’une classe afin d’obtenir des schémas aléatoire différents.

  • la méthode .shuffle() qui mélange les valeurs d’une liste.

 

 

 

Utilisation de la fonction rand_range()

Cette fonction est très similaire à la fonction random.randrange() du module Python random.

Cette fonction attend une plage en argument et elle renvoi un float aléatoire en retour. Les nombres renseignés en argument sont inclusif, c’est a dire que si l’on demande une plage de 0 à 10, il se peut que le nombre généré aléatoirement soit effectivement 0 ou 10.

Exemple :

​

func generate_random():

for i in 5 :

var my_rand = rand_range(0, 3)

print(my_rand)

 

>>> 1.863674

>>> 2.268032

>>> 1.222836

>>> 0.940733

>>> 0.215242

 

 

 

Utilisation de la fonction randi()

Sans argument, cette fonction renvoi un nombre entier aléatoire compris entre 0 et 2^32.

 

func generate_random():

for i in 5 :

var my_rand = randi()

print(my_rand)

​

>>> 3161026589

>>> 2668139190

>>> 4134715227

>>> 4204663500

>>> 1099556929

​

Toutefois, il est possible de lui spécifier une plage exclusive via la syntaxe  % (modulo):

randi() % 20 # Returns random integer between 0 and 19
randi() % 100 # Returns random integer between 0 and 99
randi() % 100 + 1 # Returns random integer between 1 and 100

(Documentation de Godot)
​
​
​

Utilisation de la fonction randf()

Identique à la fonction de base random.random() du module random de Python. Cette fonction renvoi un float (une valeur décimale) compris entre 0 & 1 :

​

​

func generate_random():

for i in 5 :

var my_rand = randf()

print(my_rand)

​

>>> 0.735984

>>> 0.621225

>>> 0.962688

>>> 0.978975

>>> 0.256011

 

 

 

Utilisation de la fonction rand_seed()

Cette fonction, un peu étrange, renvoi une liste de deux nombres entier aléatoire via un seed qu’on lui passe en argument.

 

func generate_random():

var lenght for i in 5 :

var my_rand = rand_seed(25) lenght = my_rand.size()

print(my_rand)

print(lenght)

​

>>> [-60513371, 3198867164247606519]

>>> [-60513371, 3198867164247606519]

>>> [-60513371, 3198867164247606519]

>>> [-60513371, 3198867164247606519]

>>> [-60513371, 3198867164247606519]

>>> 2

 

 

On peut se servir de cette fonction par exemple dans le cas de génération de monde aléatoire. Le fait de pouvoir récupérer un même liste de nombre aléatoire permet de pouvoir régénérer un monde identique en fournissant le même seed à la fonction.

 

 

 

Utilisation de randomize() pour changer le seed interne

Cette fonction n’agit que sur le seed interne de Godot et permet ainsi que générer des nombres aléatoire différent à chaque itération du moteur.

La fonction randomize() peut s’utiliser dans la fonction _ready().

Exemple, si je lance deux fois :

​

extends Node2D

​

func _ready():

generate_random()

​

func generate_random():

for i in 5 : var my_rand = randf()

print(my_rand)

​

J’obtiens deux fois les mêmes nombres :

>>> 0.246699

>>> 0.476715

>>> 0.067642

>>> 0.100719

>>> 0.967545

​

>>> 0.246699

>>> 0.476715

>>> 0.067642

>>> 0.100719

>>> 0.967545

 

Maintenant si j’ajoute randomize() dans la fonction _ready() :

extends Node2D

 

func _ready():

randomize()

generate_random()

random_list()

 

func generate_random():

for i in 5 :

var my_rand = randf()

print(my_rand)

​

J’obtiens :

>>> 0.571451

>>> 0.088167

>>> 0.381147

>>> 0.655894

>>> 0.643915

>>> 0.145357

>>> 0.034255

>>> 0.22698

>>> 0.411628

>>> 0.254214

​

Utilisation de la méthode de liste .shuffle()

Relativement similaire à la méthode .shuffle() du module random de Python, cette méthode « mélange » les valeurs dans une liste.

Attention, contrairement au Python, cette méthode modifie directement la liste d’origine !

Exemple :

func random_list():

var my_list = [0,1,2,3,4,5]

my_list.shuffle()

print(my_list)

pass

 

>>> [4, 2, 5, 1, 3, 0]

​

​

Nous contacter

 Tél : 06 17 95 56 83

ionocraft@hotmail.fr

Visible sur :

  • Linkedin
  • Icône social Instagram

Donations :

ICARE © 2024 par ICARE

bottom of page