我有两个javascript函数,用于模拟D& D类型游戏中的骰子掷骰。
第一个函数getRandom()接收一个较小的数字和一个较大的数字,并在这两个数字之间吐出一个随机整数。
function getRandom(low, high) {
return Math.floor(Math.random() * (high - low + 1)) + low;
}
第二个函数dropLow()应该掷骰子四次,掉落得分最低的骰子并加上剩余的三个。只要总数大于9,它就会返回总数。
function dropLow() {
var rolls = [],
lowest,
total;
do {
total = 0;
for (x = 0; x < 4; x++) {
rolls.push(getRandom(1,6));
total += rolls[x];
}
lowest = rolls[0];
for (x = 1; x < 4; x++) {
if (rolls[x] < lowest) {
lowest = rolls[x];
}
}
total -= lowest;
} while (total < 10);
rolls.length = 0;
return total;
}
如果我只调用dropLow()一次,一切都很好。但我称之为越多,我的浏览器(Chrome)就越频繁地崩溃并崩溃(具体错误是:“Aw Snap!显示此网页时出现问题。继续,重新加载或转到另一个页面。”)。我想也许我的浏览器中的一些设置导致了问题,所以我在平板电脑上拉了一下页面,它仍然冻结/崩溃。拉出firefox并出现同样的问题。
我已经考虑过摧毁阵列,或至少清除它的内容,因为我不断在原版上构建,但似乎并非如此。
任何人都可以帮我弄清楚这是怎么发生的?
答案 0 :(得分:1)
在rolls = []
循环中移动do
。
由于您没有重置阵列,因此您使用的是旧值。如果do..while
循环运行两次,那么它始终使用相同的低值,从而导致崩溃。