我正在建立一个探路者角色生成器,但努力让统计数据滚动得足够高。所以我想告诉它重新滚动,除非总修饰符高于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;
};
答案 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;
}
};