我正在尝试为我的在线游戏创建一个“随机”数字生成器。
我想纯粹根据玩家的位置和统计数据创建数字,并且还基于一个小计数器,在我的控制器中每步增加1个。
这是我创建“种子”的代码和另一个使用种子从0生成随机数的函数 - >最大不包容性:
function generate_seed(){
var num = 1;
for(var i = 0; i < number_of_players; i++){
var prevNum = num;
num++;
}
num+=obj_controller.randStep; //randStep is a variable that gets incremented by 1 in my controller object each step
//Loops through all players
with(obj_player){
if(x % 2){num+=x;}
else {num-=x;}
if(y % 2){num+=y;}
else {num-=y;}
if(hp % 2){num+=hp;}
else {num-=hp;}
if(randStep % 2){num+=randStep;}
else {num-=randStep;}
}
return abs(num);
}
function random(var max){
//Generate synced random number from 0 -> max, does not include max
var seeder = synced_random_generate();
seeder+= max * 5; //Make sure the seed is greater than max
return seeder mod max;
}
问题是,这种作品,但如果我这样做: 随机(20000);
相对于max(20,000),它通常会返回一个相当小的数字。
我从未见过它返回的数字大于3000.这很奇怪。
根据玩家位置/统计数据和控制器中的递增计数器,有没有人知道什么是错误的或者更简单的方法来生成随机数?
答案 0 :(得分:0)
在线找到了一个非常好的解决方案:
int rand1(int lim)
{
static long a = 100001;
a = (a * 125) % 2796203;
return ((a % lim) + 1);
}