我有一款游戏,如果用户从棋盘上选择一个特定的数字,便可以赢得额外的奖励。
游戏大师选择游戏的范围,额外的奖品将随机分配给一个数字。
但是,额外的奖品无法分配:
我有一种粗略的方法来确保头奖不匹配。
如何将此代码扩展为涵盖所有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();
}
}
答案 0 :(得分:3)
您可以为已使用的值输入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);