Bu işlevi yaptım:
https://github.com/thewheelmaker/GDscript_Weighted_Random
Şimdi! senin durumunda böyle kullanabilirsiniz:
on_normal_case([5,20,45,20,10],0)
Yalnızca 0 ile 4 arasında bir sayı verir, ancak öğeleri aldığınız diziye koyabilirsiniz.
item_array[on_normal_case([5,20,45,20,10],0)]
Veya fonksiyon:
item_function(on_normal_case([5,20,45,20,10],0))
İşte kod. GDscript üzerinde yaptım, yapabilirsin, ama başka bir dili de değiştirebilir, ayrıca mantık hatalarını da kontrol edebilir:
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
Bunun gibi çalışır: on_normal_case ([50,50], 0) Bu 0 veya 1 verir, her ikisi de aynı olasılıktadır.
on_normal_case ([50,50], 1) Bu, 1 veya 2 verir, her ikisi de aynı olasılığı vardır.
on_normal_case ([20,80], 1) Bu 1 veya 2 verir, iki tane almak için daha büyük bir değişikliğe sahiptir.
on_normal_case ([20,80,20,20,30], 1) Bu 1-5 rasgele sayılar verir ve daha büyük sayılar daha küçük sayılardan daha muhtemeldir.
on_normal_case ([20,80,0,0,20,20,30,0,0,0,0,33], 45) Bu atma, gördüğünüz zaman 45,46,49,50,51,56 sayıları arasında değişir. sıfır, asla oluşmaz.
Bu nedenle, işlev, bu dizi dizisinin uzunluğuna ve dönüşüm numarasına bağlı olarak yalnızca bir rasgele sayı döndürür ve dizideki inç sayısı, bir sayının oluşabileceği olasılık ağırlıklarıdır, bu sayının dizideki konumu, artı sayı sayısını artırabilir.