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

标签 javascript arrays

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

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

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

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

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

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

相关文章:

javascript - 使用 require.js 加载非 amd 模块

javascript - 映射对象数组

javascript - HTML5 canvas .toDataURL() 图片没有背景色

php 简单函数中的未定义偏移量()

javascript - jQuery生成多个数组并生成HTML

javascript - onmouseover onmouseout 图像变化液体效果

arrays - 当旋转木马上方时,为什么不能滚动列表?

arrays - 如何根据行中的值对 Swift 中的二维数组列进行排序?

arrays - Angular : Get last 3 elements of json object

javascript - SimpleCart(js) 数量限制