从JavaScript中的表单生成一系列随机数

时间:2012-10-08 17:21:41

标签: javascript arrays random

我环顾四周,无法找到解决问题的方法。

背景 - 预期用途是一个易于形成的实时RPG组,用于计算停机时间动作的成功。通过在给定的表单字段中输入数字,脚本将计算“骰子”的总数,其值为1到10之间。在“骰子”的每个“滚动”上都需要满足一个难度阈值才能被认为是成功的。

我很难使用totalDice作为数组的大小来生成随机数。一旦我知道了这一点,我将需要找到一种计算和显示大于给定难度阈值的随机数总数的方法。

有关我目前所拥有的工作示例,see here

我有一个var = totalDice,它提供了随机数组的大小。随机数的值是1 - 10.

例如,如果totalDice= 220,我需要在1到10之间生成220个随机数。 然后我有var = totalDiff,它提供了一个阈值,我需要与生成的随机数进行比较。我需要找到一种方法来获取生成的数组并计算=> totalDiff的实例数。

示例:totalDice = 220totalDiff = 6totalSuccesses = x,其中x = the number of elements => 6

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

将其分解成块,这就是函数的用途。

var roll = function() {
    return Math.floor(Math.random() * 10 + 1);
};

var getResult = function(difficulty) {
    return roll() >= difficulty;
};

var getAllResults = function(totalDice, difficulty) {
    var arr = [];
    for (var i = 0; i < totalDice; i++) {
        arr.push(getResult(difficulty));
    }
    return arr;
};

检查:

var results = getAllResults(220, 6);
var t = 0;
var f = 0;

for (var i = 0; i < results.length; i++) {
    if (results[i]) { 
        t++;
    } else {
        f++;
    }
}
console.log('total rolls', 220);
console.log('total result count (expected 220)', results.length);
console.log('boolean results (expected 220)', t + f);
console.log('successes', t);
console.log('failures', f);
console.log('raw results array', results);

修改:如果您只想获得成功次数,请创建另一个功能来计算它们:

var getSuccesses = function(results) {
    var successes = 0;
    for (var i = 0; i < results.length; i++) {
        if (results[i]) { 
            successes++;
        } 
    }
    return successes;
};

//Count successes for 175 die rolls at difficulty 8:
var s = getSuccesses(getAllResults(175, 8));

答案 1 :(得分:0)

未经测试但请尝试此操作:

var generateRandomInteger = function(minV, maxV) {
    return Math.floor(Math.random() * (1.0 + maxV - minV) + minV);
}

var generateRandomArray = function(n, minV, maxV) {
    var rv = [];
    for (var i=0; i<n; i++) {
       rv.push(generateRandomInteger(minV, maxV));
    }
    return rv;
};