代码之家  ›  专栏  ›  技术社区  ›  Dax

根据每个玩家的获胜概率计算胜利者

  •  3
  • Dax  · 技术社区  · 6 年前

    我的目标: 每个玩家都有一个下注选项,对于每个玩家,他们下注的获胜几率将计算出来并显示在网页上。因此,作为一个例子,如果玩家1下注5000个学分,总赌注是15000个学分,那么玩家1有33%的机会获胜。经过计算,我想从所有下注的玩家中选出一个赢家。

    示例游戏:

    • 总金额:15000学分。

    • 玩家1:3000学分->获胜的20%

    • 玩家2:1500学分->获胜的10%

    • 玩家3:7500学分->获胜的50%

    • 玩家4:1200学分->获胜的8%

    • 玩家5:1800学分-赢的12%

    我应该如何从所有玩家中选择一个随机的赢家?我正在考虑生成一个随机数,并将其与获胜概率进行比较。有什么建议吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Attersson    6 年前

    由于舍入错误,百分比并不总是有效。例如,当总赌注为1000时,下注1的几率为0%。

    我建议画一个范围[0,totalamount]内的随机数。

    // 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%的比例。

    推荐文章