Ho svolto questa funzione:
https://github.com/thewheelmaker/GDscript_Weighted_Random
Now! nel tuo caso puoi usarlo in questo modo:
on_normal_case([5,20,45,20,10],0)
Fornisce solo un numero compreso tra 0 e 4 ma è possibile inserirlo in un array in cui sono stati trovati gli elementi.
item_array[on_normal_case([5,20,45,20,10],0)]
O in funzione:
item_function(on_normal_case([5,20,45,20,10],0))
Ecco il codice L'ho fatto su GDscript, puoi, ma può alterare altre lingue, anche verificare la presenza di errori logici:
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
Funziona così: on_normal_case ([50,50], 0) Questo dà 0 o 1, ha entrambe le stesse probabilità.
on_normal_case ([50,50], 1) Questo dà 1 o 2, ha entrambe la stessa probabilità.
on_normal_case ([20,80], 1) Questo dà 1 o 2, ha un cambiamento maggiore per ottenerne due.
on_normal_case ([20,80,20,20,30], 1) Questo dà numeri casuali compresi nell'intervallo 1-5 e numeri più grandi hanno maggiori probabilità di numeri più piccoli.
on_normal_case ([20,80,0,0,20,20,30,0,0,0,0,33], 45) Questo lancio taglia tra i numeri 45,46,49,50,51,56 che vedi quando ci è zero non si verifica mai.
Quindi la funzione restituisce solo un numero casuale che dipende dalla lunghezza di quell'array array e dal numero del trasformm, e gli ints nell'array sono pesi di probabilità che un numero possa verificarsi, dove quel numero è la posizione dell'array, pluss trasformm numero.