我有一个游戏,其中退出将触发一种骰子,可以引导你到一个随机的水平。我有这个脚本:
public string levelToLoad; // first level
public bool levelSplit; //Do we split?
public string levelToSplit; //second levl
public int splitLevelChance; //if the chance was 4/7, this should be the 4
public int SplitDenominator; //And this should be the 7
int normal = 0; //To keep count
int split = 0;
for (int i = 0; i < 2000; i++) //Run the test 2000 times
{
System.Random rnd = new System.Random();
int dice = rnd.Next(1, SplitDenominator + 1); //Roll a dice
print(dice);
if (dice <= splitLevelChance)
{
normal++;
// SceneManager.LoadScene(levelToLoad);
}
else
{
split++;
// SceneManager.LoadScene(levelToSplit);
}
}
print("normal: " + normal);
print("split:" + split);
所以这对于像1/4或1/8这样的东西工作得很好但是当我做的例如8/18它是不准确的。
以下是我用8/18进行的测试
测试1 - normal = 899,split = 1101
测试2 - normal = 879,split = 1121
测试3 - 正常= 885,分裂= 1115
如果我的数学是正确的,那么正常情况应该是615左右并且分裂为1385
编辑:我的数学错误,代码实际上正常工作
答案 0 :(得分:1)
你需要将新的随机拉出循环。
System.Random rnd = new System.Random();
for (int i = 0; i < 2000; i++) //Run the test 2000 times
{
种子是基于时间的,因此它将为许多循环获得相同的种子。