1

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

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

我在使用totalDice数组大小​​生成随机数时遇到了困难。一旦我把它记下来,我需要找到一种方法来计算和显示大于给定难度阈值的随机数的总数。

有关我目前所拥有的工作示例,请参见此处

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

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

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

任何帮助是极大的赞赏。

4

2 回答 2

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));
于 2012-10-08T18:51:22.100 回答
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;
};
于 2012-10-08T17:58:16.510 回答