Zrobiłem tę funkcję:
https://github.com/thewheelmaker/GDscript_Weighted_Random
Now! w twoim przypadku możesz użyć tego w następujący sposób:
on_normal_case([5,20,45,20,10],0)
Daje tylko liczbę od 0 do 4, ale możesz umieścić ją w tablicy, w której dostałeś przedmioty.
item_array[on_normal_case([5,20,45,20,10],0)]
Lub w funkcji:
item_function(on_normal_case([5,20,45,20,10],0))
Oto kod. Zrobiłem to na GDscript, możesz, ale może zmienić inny język, sprawdź także błędy logiczne:
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
Działa to tak: on_normal_case ([50,50], 0) Daje to 0 lub 1, ma to samo prawdopodobieństwo obu.
on_normal_case ([50,50], 1) Daje to 1 lub 2, ma to samo prawdopodobieństwo obu.
on_normal_case ([20,80], 1) Daje to 1 lub 2, ma większą zmianę, aby uzyskać dwa.
on_normal_case ([20,80,20,20,30], 1) Daje to losowe liczby w zakresie 1-5, a większe liczby są bardziej prawdopodobne niż mniejsze liczby.
on_normal_case ([20,80,0,0,20,20,20,,0,0,0,0,0,33], 45) Ten rzut kostką między liczbami 45,46,49,50,51,56 widać, kiedy tam wynosi zero, nigdy się nie zdarza.
Tak więc funkcja zwraca tylko jedną liczbę losową, która zależy od długości tej tablicy tablicowej i liczby transformmu, a liczby całkowite w tablicy są wagami prawdopodobieństwa, które mogłaby wystąpić liczba, gdzie liczba ta jest położeniem na tablicy, pluss liczba transformmu.