[英]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.