Saya melakukan fungsi ini:
https://github.com/thewheelmaker/GDscript_Weighted_Random
Now! dalam kasus Anda, Anda dapat menggunakannya seperti ini:
on_normal_case([5,20,45,20,10],0)
Ini hanya memberikan angka antara 0 hingga 4 tetapi Anda dapat meletakkannya di array di mana Anda mendapatkan item.
item_array[on_normal_case([5,20,45,20,10],0)]
Atau dalam fungsi:
item_function(on_normal_case([5,20,45,20,10],0))
Ini kodenya. Saya membuatnya di GDscript, Anda bisa, tetapi bisa mengubah bahasa lain, juga memeriksa kesalahan logika:
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
Kerjanya seperti ini: on_normal_case ([50,50], 0) Ini memberi 0 atau 1, keduanya memiliki probabilitas yang sama.
on_normal_case ([50,50], 1) Ini memberi 1 atau 2, keduanya memiliki probabilitas yang sama.
on_normal_case ([20,80], 1) Ini memberi 1 atau 2, ia memiliki perubahan yang lebih besar untuk mendapatkan dua.
on_normal_case ([20,80,20,20,30], 1) Ini memberikan angka acak berkisar 1-5 dan angka yang lebih besar lebih mungkin daripada angka yang lebih kecil.
on_normal_case ([20,80,0,0,20,20,30,0,0,0,0,33], 45) Lemparan dadu ini antara angka 45,46,49,50,51,56 yang Anda lihat ketika ada adalah nol tidak pernah terjadi.
Jadi fungsinya mengembalikan hanya satu bilangan acak yang bergantung pada larik array dan jumlah transformm itu, dan int dalam array adalah bobot probabilitas yang mungkin terjadi, di mana bilangan itu terletak pada array, pluss transformm number.