मैंने यह फ़ंक्शन किया:
https://github.com/thewheelmaker/GDscript_Weighted_Random
Now! आपके मामले में आप इसे इस तरह से उपयोग कर सकते हैं:
on_normal_case([5,20,45,20,10],0)
यह केवल 0 से 4 के बीच एक संख्या देता है, लेकिन आप इसे सरणी में रख सकते हैं जहां आपको आइटम मिले हैं।
item_array[on_normal_case([5,20,45,20,10],0)]
या समारोह में:
item_function(on_normal_case([5,20,45,20,10],0))
यहाँ कोड है। मैंने इसे GDscript पर बनाया है, आप यह कर सकते हैं, लेकिन यह अन्य भाषा को बदल सकता है, तर्क त्रुटियों की जांच भी कर सकता है:
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
यह इस तरह काम करता है: on_normal_case ([50,50], 0) यह 0 या 1 देता है, इसमें दोनों की समान संभावना है।
on_normal_case ([50,50], 1) यह 1 या 2 देता है, इसमें दोनों की समान संभावना है।
on_normal_case ([20,80], 1) यह 1 या 2 देता है, इसमें दो प्राप्त करने के लिए बड़ा परिवर्तन है।
on_normal_case ([20,80,20,20,30], 1) यह यादृच्छिक संख्या 1-5 देता है और बड़ी संख्या छोटी संख्याओं की तुलना में अधिक होती है।
on_normal_case ([20,80,0,0,20,20,30,0,0,0,033,33], 45) यह फेंक संख्या 45,46,49,50,51,56 के बीच आप वहां देखते हैं। यह शून्य कभी नहीं होता है।
तो यह फ़ंक्शन केवल एक यादृच्छिक संख्या देता है जो उस सरणी सरणी और ट्रांसफ़ॉर्म नंबर की सीमा पर निर्भर करता है, और एरे में ints प्रायिकता भार है कि एक संख्या आंकी जा सकती है, जहां वह संख्या सरणी पर स्थान है, प्लस ट्रांसफॉर्म नंबर।