老虎機 抽獎 概率

 

適用於任何需要概率的遊戲; 沒幾行代碼;

主要是生成一個概率數組 , 接下去每次隨機一個數, 去這個數組裏選取對應的值

#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;
       }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章