我有一个游戏,如果用户从棋盘上选择一个特定的数字,他们可以赢得额外的奖品。
游戏管理员为游戏选择一个范围,额外的奖品随机分配给一个号码。
但是,额外的奖品不能分配:
- 到一个“被屏蔽的号码”
- 或与其他奖品相同的号码
我有一个粗略的方法来确保一等奖不匹配。
如何扩展此代码以涵盖所有 5 个额外奖品?我担心如果我只复制函数 5 次它会永远循环吗?
在数组中创建游戏范围,然后在每个奖品生成时删除它们的值会更好吗?
var gameMinNum = 10;
var gameMaxNum = 125;
var gameBlockedNum = [5,12,66,97,124,129,165,200]
var extraPrizeNum1 = 0;
var extraPrizeNum2 = 0;
var extraPrizeNum3 = 0;
var extraPrizeNum4 = 0;
var extraPrizeNum5 = 0;
function randomGenerator(xUpper,xLower)
{
return Math.floor(Math.random()*(xUpper-xLower+1)+xLower);
}
function PrizeNum1() {
extraPrizeNum1 = randomGenerator(gameMaxNum,gameMinNum);
if (gameBlockedNum.includes(extraPrizeNum1)) {
PrizeNum1();
}
}
最佳答案
你可以拿一个Set
对于使用过的值,并为所有价格取一个数组。
function randomGenerator(xUpper, xLower) {
return function () {
return Math.floor(Math.random() * (xUpper - xLower + 1) + xLower);
};
}
function getExtraPrices(randomFn, length, blocked) {
var selected = new Set(blocked);
return Array.from({ length }, () => {
var number;
while (selected.has(number = randomFn())) ;
selected.add(number);
return number;
});
}
var gameMinNum = 10,
gameMaxNum = 125,
gameBlockedNum = [5, 12, 66, 97, 124, 129, 165, 200],
extraPricesCount = 5,
random = randomGenerator(gameMaxNum, gameMinNum),
extraPrices = getExtraPrices(random, extraPricesCount, gameBlockedNum);
console.log(extraPrices);
关于javascript - 分配随机数,避免 JavaScript 中某个范围内的数字被阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55980961/