【技巧】简单的根据权重返回随机值

游戏中经常用到随机算法,比如转盘,老虎机等游戏,每种奖励的概率肯定是不一样的,不能存随机,所以给每种奖励加上了权重,这里记录一种通过每种奖励的权重获取奖励的算法,很简单

 public static int GetRandom()
    {
        //这里创建个数组用来表示奖励列表
        int[] values = {0, 0, 0, 20, 20, 20, 10, 10, 5, 5};
        //这个数组表示每个位置的权重,数量要和奖励列表一致
        int[] weights = {100, 150, 80, 20, 70, 20, 10, 10, 5, 5};

        //我们先将权重的总值初始定为1,因为随机的左闭右开
        int total = 1;

        //我们将所有奖励的权重加起来,算出总的
        for (int i = 0; i < weights.Length; i++)
        {
            total += weights[i];
        }

        //然后通过随机来得出我们想要的结果
        for (int i = 0; i < weights.Length; i++)
        {
            int range = UnityEngine.Random.Range(1, total);
            if (range <= weights[i])
            {
                //中奖
                return values[i];
            }
            else
            {
                //权重总值减去当前奖品的权重,这样保证肯定会有一个结果
                total -= weights[i];
            }
        }

        return 0;
    }

你可能感兴趣的:(Unity小功能记录,c#)