选择随机数,直到数字足够高[javascript]

选择随机数,直到数字足够高[javascript],javascript,if-statement,random,while-loop,Javascript,If Statement,Random,While Loop,我正在建立一个探路者角色生成器,但是很难获得足够高的统计值。所以我想告诉它重新滚动,除非总修饰符大于10 骰子掷4次,最高的3次骰子被加在一起形成一个属性。6个属性被放进一个数组中使用。总修改器的计算方法是将所有六个统计数据相加,减去60,然后将该数字除以2。所以我已经在这里展示了所有这些 我假设我现在正在寻找if/else语句,其中if checkModifier()

我正在建立一个探路者角色生成器,但是很难获得足够高的统计值。所以我想告诉它重新滚动,除非总修饰符大于10

骰子掷4次,最高的3次骰子被加在一起形成一个属性。6个属性被放进一个数组中使用。总修改器的计算方法是将所有六个统计数据相加,减去60,然后将该数字除以2。所以我已经在这里展示了所有这些

我假设我现在正在寻找if/else语句,其中if checkModifier()<10,然后再次运行rollStat(),否则继续。但我不确定那会是什么样子。或者将整个过程简化为一个函数,然后作为while语句运行会更好吗

编辑:代码生成相同的六个统计数字时出现问题。我已经修好了

function makeDie(sides) {
    var die = function () {
        return 1 + Math.random() * sides | 0;
 };

die.times = function (count) {
    var rolls = [];
    for(var i = 0 ; i < count ; i++) {
        rolls.push(this());
    }
    return rolls;
 };

 return die;
}

var rollStat = function () {
    var dieRolls = makeDie(5).times(4)
    for (a in dieRolls) {
        dieRolls[a] += 1;
    }
var sortedRolls = dieRolls.sort();
    var singleStat = 0;
        for (b = 1; b < sortedRolls.length; b++) {
            singleStat += sortedRolls[b];
        }
    return singleStat;
}

var sixStats = function () {
    var ss = [];
        for (var c = 0; c < 6; c++) {
            ss.push(rollStat());
        }
    return ss;
}

var stats = sixStats();
var stats = stats.sort(function (a, b) { 
    return a - b;
});

var checkModifier = function() {
    var total = 0;
        for (var d in stats) {
            total += stats[d];
}
return (total-60)/2;
};
函数makeDie(侧面){
变量=函数(){
返回1+Math.random()*边| 0;
};
die.times=函数(计数){
var rolls=[];
对于(变量i=0;i
以及我在看到您的编辑后给出的解决方案

var createStats=函数(){
var stats=sixStats();
stats=stats.sort(函数(a,b){
返回a-b;
});
var合计=0;
for(统计中的变量d){
总数+=统计数据[d];
}
var totalModifier=(total-60)/2;
如果(totalModifier<10){
返回createStats();
}否则{
return totalModifier;//当然,最终您可能希望返回stats,而不是totalModifier,但这里是为了调试目的。
}
};
您可以将其视为概念的证明

另一个或许更简洁的解决方案:

var genStats=函数(){
var stats=sixStats();
stats=stats.sort(函数(a,b){
返回a-b;
});
返回统计;
};
var totalMod=函数(统计){
var合计=0;
for(统计中的变量d){
总数+=统计数据[d];
}
var totalModifier=(total-60)/2;
返回totalModifier;
};
var createStats=函数(minMod){
var stats=genStats();
if(totalMod(stats)
尚未查看所有代码,但stats是一个始终具有相同值的数组,这是预期的行为吗?此外,在rollStat函数中,您在var dieRolls=makeDie(5).times(4)下有一个循环;它什么也没做,为什么呢?如果你生成的“随机”数的最小可接受数是10,那么只需加10。@juvian它是在每个随机数上加1,这样我就得到了一个介于2和6之间的数。现在我把它打出来了,我意识到可能有更好的方法。至于数组:我简化了代码,刚刚意识到我删除了获得6个不同随机数的功能。我在下面编辑了我的解决方案,以适应您的更改-如果您需要,请告诉我。