簡體   English   中英

分配隨機數,避免JavaScript中某個范圍的阻塞數

[英]Assign random numbers avoiding blocked numbers from a range in JavaScript

我有一款游戲,如果用戶從棋盤上選擇一個特定的數字,便可以贏得額外的獎勵。

游戲管理員選擇游戲的范圍,並將額外的獎金隨機分配給一個數字。

但是,額外的獎品無法分配:

  • 到“封鎖號碼”
  • 或與其他獎項相同的號碼

我有一種粗略的方法來確保一等獎不匹配。

如何將此代碼擴展為涵蓋所有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一個Set ,並為所有價格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); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM