C#根据权重抽取随机数

(游戏中一个很常见的简单功能,比如抽卡抽奖抽道具,或者一个怪物有多种攻击动作,按不同的权重随机出个攻击动作等等……)

假如有三种物品 A、B、C,对应的权重分别是A(50),B(20),C(30)

那么,如果从 0-100中抽取一个随机数,可以这样理解:

  • 在0-50之间时,将得到A
  • 在50-70之间时,得到B
  • 在70-100之间时,得到C

下面是实现代码。

    string[] items = new string[] { "A", "B", "C" };
    int[] weight = new int[] { 50, 20, 30 };

    string WeightRandom()
    {
        //先算出所有权重的总和
        int sum = 0;
        foreach (int w in weight)
            sum += w;
        //Roll随机数, 区间是从0到总和
        int random = Random.Range(0, sum);
        int currRange = 0;
        //遍历每个item对应到区间。如果结果在此区间内,返回此item。
        for (int i = 0; i < items.Length; i++)
        {
            currRange += weight[i];
            if (random < currRange)
            {
                Debug.Log(string.Format("随机数:【{0}】. 结果:【{1}】", random.ToString(), items[i]));
                return items[i];
            }
        }
        return null;
    }

测试一下:运行20次

当然,这里使用的权重50+20+30 =100 ,只是为了方便理解。

并非权重的总和一定要等于100。多少都是可以的。随机数的选取范围只需要是(0,总和)即可。 

相关推荐

  1. 面试算法71:按生成随机数

    2024-02-17 05:54:04       60 阅读
  2. 算法:带随机算法

    2024-02-17 05:54:04       49 阅读
  3. Leetcode 528 按随机选择

    2024-02-17 05:54:04       35 阅读
  4. C++ 随机数

    2024-02-17 05:54:04       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-17 05:54:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-17 05:54:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-17 05:54:04       87 阅读
  4. Python语言-面向对象

    2024-02-17 05:54:04       96 阅读

热门阅读

  1. docker的常用命令有哪些?

    2024-02-17 05:54:04       45 阅读
  2. Lua:面向对象/C之间的交互

    2024-02-17 05:54:04       51 阅读
  3. Docker安装和使用MySQL

    2024-02-17 05:54:04       47 阅读
  4. 假期2.13

    2024-02-17 05:54:04       49 阅读
  5. 软件系统架构演变:从单体应用到微服务

    2024-02-17 05:54:04       53 阅读
  6. 云原生之Docker镜像仓库

    2024-02-17 05:54:04       52 阅读
  7. Leetcode 739. 每日温度

    2024-02-17 05:54:04       54 阅读
  8. 5.8 BCC工具之mysqld_query.py解读

    2024-02-17 05:54:04       52 阅读
  9. 数据库SQL语句 --- database(一)

    2024-02-17 05:54:04       39 阅读
  10. Nginx高级-扩容

    2024-02-17 05:54:04       54 阅读