在游戏中,大家会经常使用随机算法,但是如何选择一个好的伪随机?
这里提供一个思路:
这里提供了一个数组,有101个数据 ,分别代表%0 - 100%, base数组中每个元素值 都是该概率的基础值,比如对于10%的概率,base[10]它的基础值为1475 (其实这里都是乘以100000了,它本身应该是0.01475 ), 当第一次check时, 在0- 100000中随机一个值与1475*1 对比 , 当第二次check时, 实际上与 1475 *2 对比, 当第N次check时, 实际与 1475 *N 对比, 也就是说,次数越多,概率会升高,从而达到模拟10%的效果, 一旦触发成功, N值必须清零。
#define _CRT_RAND_S
#include <string>
using namespace std;
#define PERCENT 100
//产生随机数,其中范围为min~max
unsigned int Range(int min, int max)
{
errno_t err;
unsigned int number;
err = rand_s(&number);
if (err != 0)
{
return 0;//产生失败,返回0
}
unsigned temp1 = (unsigned int)((double)number / ((double)UINT_MAX + 1) * double(max - min))