游戏掉落概率算法
程序员文章站
2022-07-13 08:35:18
...
游戏开发中我们经常会用到物品掉落概率这个算法,比如打怪掉不掉宝物,掉落的是何种宝物,这个都需要概率来控制的,在实际项目中抽奖系统有的也会采用跟掉落概率相似的算法。并且,抽奖系统的概率可能还会随着抽奖人数的变化而不断调整,这个虽然看起来有点复杂,其实只是多了逻辑,如果知道普遍的掉落概率算法,那么我相信这种可控的概率算法也是很简单的。掉率概率的原理很简单,就是基本高中概率知识,原理如下:假设有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);
}
}
实验结果:一万次的模拟结果各个球的出现次数基本满足模拟总次数*各自概率 。如果觉得算法有问题大家可以交流。
上一篇: 三招干废“植物大战僵尸”
下一篇: 如何用Python写贪吃蛇小游戏