我是一名网络游戏开发者,我遇到了随机数问题.假设玩家有20%的几率用他的剑获得重击.这意味着,5次点击中的1次应该是至关重要的.问题是我的现实生活成绩非常糟糕 - 有时候球员在5次安打中得到3次降落,有时15次命中都没有.战斗相当短(3-10次命中),因此获得良好的随机分布非常重要.
目前我使用PHP mt_rand(),但我们只是将代码移动到C++,所以我想在游戏的新引擎中解决这个问题.
我不知道解决方案是否是一些统一的随机生成器,或者可能记住以前的随机状态以强制正确分配.
每种语言都有random()函数或类似的东西来生成伪随机数.我想知道下面会发生什么来生成这些数字?我没有编程任何使这些知识成为必要的东西,只是为了满足自己的好奇心.
是否投掷硬币以获得随机位?
或者掷骰子以获得1到6的随机整数?
或者从洗牌的甲板上拿一张牌来获得1到52的数字?
.
.
.
或者它能像我们一样思考还是像我们一样拥有智慧?
显然,上述示例不能是生成随机数据的方法.
那么软件库如何random在给定范围内生成数字?
哪个更随机:人工或软件生成?
可能重复:
随机数生成器如何工作?
我正在寻找C/C++中随机数生成器的内部实现.基本上我很想知道调用rand()时究竟发生了什么.在所有机器遵循一定的指令后,它怎么可能是随机的!
编辑:想知道如何在C/C++中实现一个.
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <math.h>
int main()
{
int i;
int diceRoll;
for(i=0; i < 20; i++)
{
printf("%d \n", rand());
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是我在c(codeblocks)中编写的代码来获取随机数,问题是我总是得到相同的序列:41,18467,6334,26500等等...
我还在学习,所以请尝试解释,就像你正在和一个8岁的D谈话:
我知道rand()生成一个随机数.我找到了这个例子:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, n;
time_t t;
n = 5;
/* Intializes random number generator */
srand((unsigned) time(&t));
/* Print 5 random numbers from 0 to 49 */
for( i = 0 ; i < n ; i++ )
{
printf("%d\n", rand() % 50);
}
return(0);
}
Run Code Online (Sandbox Code Playgroud)
我知道这个问题可能听起来有点傻,但任何人都可以解释一下上面的代码是如何工作的吗?