计算获胜者,取决于每个玩家的获胜机会
Calculating a winner, depending on win chance of each player
我的目标:每位玩家都可以选择下注,并且会计算每位玩家下注的获胜机会并显示在网页上。例如,如果玩家 1 下注 5000 个筹码,总底池为 15000 个筹码,则玩家 1 有 33% 的机会获胜。经过这个计算,我想从所有下注的玩家中选出一个赢家。
示例游戏:
总金额:15000 积分。
玩家 1:3000 积分 -> 获胜的 20%
玩家 2:1500 积分 -> 获胜的 10%
玩家 3:7500 积分 -> 获胜的 50%
玩家 4:1200 积分 -> 获胜的 8%
玩家 5:1800 积分 -> 获胜的 12%
我应该如何处理从所有玩家中随机挑选获胜者的方式?我正在考虑生成一个随机数并以某种方式将其与获胜机会进行比较。有什么建议吗?
由于舍入误差,百分比并不总是有效。例如当总底池为 1000 时下注 1 产生 0% 的机会。
我建议在 [0,tototalAmount)
范围内抽取一个随机数
// player 1 bets 1500, player 2 bets 2300, player 3 bets 4000
let bets = [1500,2300,4000];
bets.forEach((e,i)=>bets[i]=(i==0)?e:e+bets[i-1]);
//now bets is [1500,3800,7800]
console.log(bets);
let maxDraw = bets[bets.length-1];
//Draw
let drawnNumber = Math.floor( Math.random() * (maxDraw) );
// drawnNumber is in range 0~7799
//so if the drawn number is in ranges:
// 0~1499 : player 1 wins. odds are 1500/7800
// 1500~3799 : player 2 wins 2300/7800
// 3800 7799 : player 3 wins 4000/7800
console.log("drawn number =",drawnNumber);
// remember the above are checked in order.
let winner = 0;
bets.forEach((e,i)=>{
if(!winner && drawnNumber<=bets[i])
winner = i+1;
});
console.log("player",winner,"wins");
这使费率保持 100% 比例。
我的目标:每位玩家都可以选择下注,并且会计算每位玩家下注的获胜机会并显示在网页上。例如,如果玩家 1 下注 5000 个筹码,总底池为 15000 个筹码,则玩家 1 有 33% 的机会获胜。经过这个计算,我想从所有下注的玩家中选出一个赢家。
示例游戏:
总金额:15000 积分。
玩家 1:3000 积分 -> 获胜的 20%
玩家 2:1500 积分 -> 获胜的 10%
玩家 3:7500 积分 -> 获胜的 50%
玩家 4:1200 积分 -> 获胜的 8%
玩家 5:1800 积分 -> 获胜的 12%
我应该如何处理从所有玩家中随机挑选获胜者的方式?我正在考虑生成一个随机数并以某种方式将其与获胜机会进行比较。有什么建议吗?
由于舍入误差,百分比并不总是有效。例如当总底池为 1000 时下注 1 产生 0% 的机会。
我建议在 [0,tototalAmount)
范围内抽取一个随机数// player 1 bets 1500, player 2 bets 2300, player 3 bets 4000
let bets = [1500,2300,4000];
bets.forEach((e,i)=>bets[i]=(i==0)?e:e+bets[i-1]);
//now bets is [1500,3800,7800]
console.log(bets);
let maxDraw = bets[bets.length-1];
//Draw
let drawnNumber = Math.floor( Math.random() * (maxDraw) );
// drawnNumber is in range 0~7799
//so if the drawn number is in ranges:
// 0~1499 : player 1 wins. odds are 1500/7800
// 1500~3799 : player 2 wins 2300/7800
// 3800 7799 : player 3 wins 4000/7800
console.log("drawn number =",drawnNumber);
// remember the above are checked in order.
let winner = 0;
bets.forEach((e,i)=>{
if(!winner && drawnNumber<=bets[i])
winner = i+1;
});
console.log("player",winner,"wins");
这使费率保持 100% 比例。