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

时间:2015-11-18 18:52:01

标签: javascript if-statement random while-loop

我正在建立一个探路者角色生成器,但努力让统计数据滚动得足够高。所以我想告诉它重新滚动,除非总修饰符高于10.

骰子滚动4次,并添加三个最高的卷以制作单个属性。将六个统计数据提供到阵列中以供使用。总修正值是通过将所有六个统计数据加在一起计算得出的,减去60并将该数字除以2.所以我得到了所有这些。

我假设我现在正在寻找if / else语句,如果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;
};

1 个答案:

答案 0 :(得分:0)

Here's a fiddle使用我在看到您的修改后提供的解决方案。

var createStats = function () {
    var stats = sixStats();

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

    var total = 0;
        for (var d in stats) {
            total += stats[d];
        }
    var totalModifier = (total-60)/2;
    if (totalModifier < 10) {
        return createStats();
    } else {
        return totalModifier; //of course, ultimately you will probably want to return stats, not the totalModifier, but this is here for debugging purposes.
    }

};

您可以将this fiddle视为概念验证。

另一种可能更整洁的解决方案:

var genStats = function () {
    var stats = sixStats();

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

    return stats;
};

var totalMod = function (stats) {
    var total = 0;
        for (var d in stats) {
            total += stats[d];
        }
    var totalModifier = (total-60)/2;
    return totalModifier;
};

var createStats = function (minMod) {
    var stats = genStats();
    if (totalMod(stats) < minMod) {
        return createStats(minMod);
    } else {
        return stats;
    }

};