ฉันทำฟังก์ชันนี้แล้ว:
https://github.com/thewheelmaker/GDscript_Weighted_Random
ทันที! ในกรณีของคุณคุณสามารถใช้มันเช่นนี้:
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,0,33], 45) สิ่งนี้โยนลูกเต๋าระหว่างหมายเลข 45,46,49,50,51,56 ที่คุณเห็นเมื่อมี เป็นศูนย์มันไม่เคยเกิดขึ้น
ดังนั้นฟังก์ชั่นจะส่งกลับตัวเลขสุ่มเพียงหนึ่งหมายเลขที่ขึ้นอยู่กับความยาวของอาเรย์อาร์เรย์และหมายเลขการแปลงและจำนวน ints ในอาเรย์เป็นค่าน้ำหนักความน่าจะเป็นที่จำนวนอาจเกิดขึ้นโดยที่หมายเลขนั้นคือตำแหน่งบนอาเรย์