gpt4 book ai didi

javascript - 分配随机数,避免 JavaScript 中某个范围内的数字被阻塞

转载 作者:行者123 更新时间:2023-11-29 18:42:29 25 4
gpt4 key购买 nike

我有一个游戏,如果用户从棋盘上选择一个特定的数字,他们可以赢得额外的奖品。

游戏管理员为游戏选择一个范围,额外的奖品随机分配给一个号码。

但是,额外的奖品不能分配:

  • 到一个“被屏蔽的号码”
  • 或与其他奖品相同的号码

我有一个粗略的方法来确保一等奖不匹配。

如何扩展此代码以涵盖所有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com