適用於任何需要概率的遊戲; 沒幾行代碼;
主要是生成一個概率數組 , 接下去每次隨機一個數, 去這個數組裏選取對應的值
#include <random>
//從概率數組中 拿個索引, 對應概率數組
int get_rate_index(long double * arr,int len ,long double rand_num){
for(int i = 0 ; i < len ; ++i){
if(rand_num > arr[i] && rand_num <= arr[i+1])
return i+1;
}
}
int main(){
//4個情況 , 老虎機 4個 可以贏的情況
long double basic_rate = 1.0 / 4;
//8倍 , 任意中1個
long any = 8;
//28倍 , 3個一樣的 , 58,88 的顏色不一樣
long green = 28;
long red = 58;
long yellow = 88;
//概率
long double any_rate = basic_rate / any;
long double green_rate = basic_rate/green;
long double red_rate = basic_rate/red;
long double yellow_rate = basic_rate/yellow;
// 沒中的概率
long double other = 1 - any_rate - green_rate - red_rate - yellow_rate;
long double sum = 0;
long double tmp_arr[5] = {yellow_rate,red_rate,green_rate,any_rate,other};
//生成一個概率數組 , 首個元素從0開始 [0 0.00284091 0.00715125 0.0160798 0.0473298 1]
long double rate_arr[6] = {0};
int rate_arr_len = sizeof(rate_arr) / sizeof(rate_arr[0]);
for(int i = 0 ; i < 5; ++i){
sum += tmp_arr[i];
rate_arr[i+1] = sum;
}
static default_random_engine eng(time(NULL));
uniform_real_distribution<long double> dis(0.0, 1.0);
//循環 10 次測試一下
for(int i =0 ; i < 10 ; ++i){
int index = get_rate_index(rate_arr,rate_arr_len ,dis(eng));
cout << index << endl;
}
}