游戏掉落概率算法
来源:互联网 发布:赤兔软件 编辑:程序博客网 时间:2024/04/27 15:05
游戏开发中我们经常会用到物品掉落概率这个算法,比如打怪掉不掉宝物,掉落的是何种宝物,这个都需要概率来控制的,在实际项目中抽奖系统有的也会采用跟掉落概率相似的算法。并且,抽奖系统的概率可能还会随着抽奖人数的变化而不断调整,这个虽然看起来有点复杂,其实只是多了逻辑,如果知道普遍的掉落概率算法,那么我相信这种可控的概率算法也是很简单的。掉率概率的原理很简单,就是基本高中概率知识,原理如下:
假设有Blue,red,yellow,black,white,gray 这六种颜色的球,他们掉落的概率分别是0.05f,0.1f,0.1f,0.2f,0.25f,0.3f,然后他们的概率和是1,我们在一个长度为1的线段上画出这个量,如下:
原理非常简单,也很好理解,具体的实现代码如下:
using UnityEngine;using System.Collections;using System.Collections.Generic;public class Probability : MonoBehaviour{ private float[] ProbabilityValue; Dictionary<int, string> ObjectValue = new Dictionary<int, string>(); private void Init() { ProbabilityValue = new float[6]{0.05f,0.1f,0.1f,0.2f,0.25f,0.3f}; } private void IntProbabilityValue() { ObjectValue.Add(0,"Blue"); ObjectValue.Add(1, "Red"); ObjectValue.Add(2, "Yellow"); ObjectValue.Add(3, "Black"); ObjectValue.Add(4, "White"); ObjectValue.Add(5, "Gray"); } private int Inder(float[] ProbabilityValue) { float total = 0; //首先计算出概率的总值,用来计算随机范围 for (int i = 0; i < ProbabilityValue.Length; i++) { total += ProbabilityValue[i]; } Random rd = new Random(); float Nob = Random.Range(0,total); for (int i = 0; i < ProbabilityValue.Length; i++) { if (Nob < ProbabilityValue[i]) { return i; } else { Nob -= ProbabilityValue[i]; } } return ProbabilityValue.Length - 1; } //初始化 void Start() { Init(); IntProbabilityValue(); test(); } public void CreatObj() { string name = ObjectValue[Inder(ProbabilityValue)]; Debug.Log(name); } //这个是测试方法,测出1万次模拟产生的各种球的数量。 private void test() { int Blue = 0; int Red = 0; int Yellow = 0; int Black = 0; int White = 0; int Gray = 0; for (int i=0;i<10000;i++) { string name = ObjectValue[Inder(ProbabilityValue)]; switch (name) { case "Blue": Blue++; break; case "Red": Red++; break; case "Yellow": Yellow++; break; case "Black": Black++; break; case "White": White++; break; case "Gray": Gray++; break; } } Debug.Log("Blue:"+ Blue+ "Red:"+ Red+ "Yellow:"+ Yellow+ "Black"+ Black+ "White:"+ White+ "Gray:"+ Gray); }}
实验结果:一万次的模拟结果各个球的出现次数基本满足模拟总次数*各自概率 。如果觉得算法有问题大家可以交流。
0 0
- 游戏掉落概率算法
- 游戏掉落算法
- 游戏 掉落算法
- 游戏中物品掉落概率问题
- 关于游戏里面装备有概率掉落、套装收集问题的matlab模拟编程
- 游戏里随机概率选择算法
- 游戏道具出现概率的算法
- 游戏中掉落效果的实现
- 可控的金币随机掉落算法
- 概率算法
- 概率算法
- 概率算法
- 概率算法
- 概率算法
- 概率算法
- 概率算法
- 概率算法
- 概率算法
- Go语言的传参和传引用
- FineReport新增多项目甘特图示例及操作
- Cleaning Robot development note
- Ajax请求原理
- 线程问题总结 待续
- 游戏掉落概率算法
- Cocos2d-x绘制圆角矩形
- Android MediaPlayer
- LDA主题聚类学习小结
- kali 安装 RabbitMQ
- mysql主从复制配置
- erlang http post and get 请求【转】
- 防火墙/IDS测试工具Ftester
- 分布式架构学习之:004--Dubbo管控台dubbo-admin