J'ai fait cette fonction:
https://github.com/thewheelmaker/GDscript_Weighted_Random
Now! dans votre cas, vous pouvez l'utiliser comme ceci:
on_normal_case([5,20,45,20,10],0)
Il donne juste un nombre entre 0 et 4 mais vous pouvez le mettre dans un tableau où vous avez obtenu les éléments.
item_array[on_normal_case([5,20,45,20,10],0)]
Ou en fonction:
item_function(on_normal_case([5,20,45,20,10],0))
Voici le code. Je l'ai fait sur GDscript, vous pouvez, mais cela peut modifier une autre langue, vérifiez également les erreurs de logique:
func on_normal_case(arrayy,transformm):
var random_num=0
var sum=0
var summatut=0
#func sumarrays_inarray(array):
for i in range(arrayy.size()):
sum=sum+arrayy[i]
#func no_fixu_random_num(here_range,start_from):
random_num=randi()%sum+1
#Randomies be pressed down
#first start from zero
if 0<=random_num and random_num<=arrayy[0]:
#print(random_num)
#print(array[0])
return 0+ transformm
summatut=summatut+arrayy[0]
for i in range(arrayy.size()-1):
#they must pluss together
#if array[i]<=random_num and random_num<array[i+1]:
if summatut<random_num and random_num<=summatut+arrayy[i+1]:
#return i+1+transform
#print(random_num)
#print(summatut)
return i+1+ transformm
summatut=summatut+arrayy[i+1]
pass
Cela fonctionne comme ceci: on_normal_case ([50,50], 0) Ceci donne 0 ou 1, la probabilité est la même.
on_normal_case ([50,50], 1) Ceci donne 1 ou 2, il a la même probabilité les deux.
on_normal_case ([20,80], 1) Ceci donne 1 ou 2, le changement est plus important pour obtenir deux.
on_normal_case ([20,80,20,20,30], 1) Ceci donne des nombres aléatoires allant de 1 à 5 et les plus grands sont plus susceptibles que les plus petits.
on_normal_case ([20,80,0,0,20,20,30,0,0,0,0,3,33], 45) Ce lancer se lance entre les nombres 45,46,49,50,51,56 vous voyez quand il y a est zéro il ne se produit jamais.
Ainsi, sa fonction ne renvoie qu’un nombre aléatoire qui dépend de la longueur de ce tableau et de ce nombre de transformation, et ints dans le tableau sont des poids de probabilité qu’un nombre puisse se produire, où ce nombre est l’emplacement du tableau, plus un nombre de transformation.