选择随机数,直到数字足够高[javascript]
我正在建立一个探路者角色生成器,但是很难获得足够高的统计值。所以我想告诉它重新滚动,除非总修饰符大于10 骰子掷4次,最高的3次骰子被加在一起形成一个属性。6个属性被放进一个数组中使用。总修改器的计算方法是将所有六个统计数据相加,减去60,然后将该数字除以2。所以我已经在这里展示了所有这些 我假设我现在正在寻找if/else语句,其中if checkModifier()<10,然后再次运行rollStat(),否则继续。但我不确定那会是什么样子。或者将整个过程简化为一个函数,然后作为while语句运行会更好吗 编辑:代码生成相同的六个统计数字时出现问题。我已经修好了选择随机数,直到数字足够高[javascript],javascript,if-statement,random,while-loop,Javascript,If Statement,Random,While Loop,我正在建立一个探路者角色生成器,但是很难获得足够高的统计值。所以我想告诉它重新滚动,除非总修饰符大于10 骰子掷4次,最高的3次骰子被加在一起形成一个属性。6个属性被放进一个数组中使用。总修改器的计算方法是将所有六个统计数据相加,减去60,然后将该数字除以2。所以我已经在这里展示了所有这些 我假设我现在正在寻找if/else语句,其中if checkModifier()
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个不同随机数的功能。我在下面编辑了我的解决方案,以适应您的更改-如果您需要,请告诉我。