我的随机数生成器生成小数字

时间:2016-02-08 09:46:09

标签: random

我正在尝试为我的在线游戏创建一个“随机”数字生成器。

我想纯粹根据玩家的位置和统计数据创建数字,并且还基于一个小计数器,在我的控制器中每步增加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.这很奇怪。

根据玩家位置/统计数据和控制器中的递增计数器,有没有人知道什么是错误的或者更简单的方法来生成随机数?

1 个答案:

答案 0 :(得分:0)

在线找到了一个非常好的解决方案:

int rand1(int lim)
{
        static long a = 100001;
        a = (a * 125) % 2796203;
        return ((a % lim) + 1);
}