关于在石器随机函数的BUG
来源:sa60 更新时间:2022-04-11 12:07 编辑:神奇 浏览:335
这个BUG一直存在,而且很早就有人利用过,只是一直不明显,或者说没人发现。最近貌似爆发的挺多的,主要影响的有转宠这块,具体怎么利用并不太清楚,大意就是利用某个操作可以让这个函数的随机值都是最大数。然后转出来的宠都是极品档的。
石器代码里随机函数定义如下:
1
|
#define RAND(x,y) ((x-1)+1+ (int)( (double)(y-(x-1))*rand()/(RAND_MAX+1.0)) )
|
按照C语言随机函数rand()出来的都是伪随机数,会出现在1秒之内出现的数都是同一个数,但具体用什么方法让这个随机函数100%出现最大值就不得而知了。针对这种情况,我们可以自行写一个函数来代替这个函数。
1
|
int Rand(int x, int y) {
|
3
|
srand((unsigned)time(NULL)); //读取系统时间,产生一个种子数值
|
4
|
a = rand() % (y+1) + x; //产生随机数
|
随便写了一个,作为参考,这里还是有问题,用(unsigned)time(NULL)做随机种子是以秒的形式,在for和while循环里都是以毫秒执行的,可能还是会出现问题,这个只提供作为参考。
关于在石器随机函数的BUG---文章已关闭评论~