当前位置: 首页 > news >正文

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,总和)即可。 

http://www.lryc.cn/news/300954.html

相关文章:

  • SORA:OpenAI最新文本驱动视频生成大模型技术报告解读
  • 阿里云第七代云服务器ECS计算c7、通用g7和内存r7配置如何选择?
  • 视觉slam十四讲学习笔记(六)视觉里程计 1
  • PyTorch-线性回归
  • C++数据结构与算法——栈与队列
  • 掌上新闻随心播控,HarmonyOS SDK助力新浪新闻打造精致易用的资讯服务新体验
  • 2024年危险化学品经营单位主要负责人证模拟考试题库及危险化学品经营单位主要负责人理论考试试题
  • C/C++如何把指针所指向的指针设为空指针?
  • 第三节:基于 InternLM 和 LangChain 搭建你的知识库(课程笔记)
  • qt-C++笔记之打印所有发生的事件
  • pytorch 实现线性回归(深度学习)
  • [Doris] Doris的安装和部署 (二)
  • 【QT+QGIS跨平台编译】之三十五:【cairo+Qt跨平台编译】(一套代码、一套框架,跨平台编译)
  • MySQL(基础)
  • STM32F1 - 中断系统
  • 【Linux系统化学习】缓冲区
  • 基于BP算法的SAR成像matlab仿真
  • 【C++ STL】你真的了解string吗?浅谈string的底层实现
  • 17.3.1.3 灰度
  • 基于CAS操作的atomic原子类型
  • Rust HashMap详解及单词统计示例
  • 命令执行讲解和函数
  • 外包实在是太坑了,划水三年,感觉人都废了
  • 代码随想录算法训练营第19天
  • 树莓派5 EEPROM引导加载程序恢复镜像
  • 循序渐进-讲解Markdown进阶(Mermaid绘图)-附使用案例
  • 寒假作业2月6号
  • ChatGPT绘图指南:DALL.E3玩法大全(一)
  • 计算机服务器中了_locked勒索病毒怎么办?Encrypted勒索病毒解密数据恢复
  • VueCLI核心知识3:全局事件总线、消息订阅与发布