Подсчет победителя в зависимости от шансов на победу каждого игрока

Моя цель: у каждого игрока есть возможность сделать ставку, и для каждого игрока шанс выигрыша их ставки будет рассчитан и отображен на веб-странице. Например, если игрок 1 ставит 5000 кредитов, а общий банк составляет 15000 кредитов, у игрока 1 есть 33% шансов на победу. После этого расчета я хотел бы выбрать победителя из всех игроков, сделавших ставку.

Пример игры:

  • Общая сумма: 15000 кредитов.

  • игрок 1: 3000 кредитов -> 20% выигрыша

  • игрок 2: 1500 кредитов -> 10% выигрыша

  • игрок 3: 7500 кредитов -> 50% выигрыша

  • игрок 4: 1200 кредитов -> 8% выигрыша

  • Игрок 5: 1800 кредитов -> 12% выигрыша

Как мне подходить к выбору случайного победителя из всех игроков? Я думал о генерации одного случайного числа и как-то сравнивать его с шансом на победу. Какие-нибудь советы?

1 ответ

Процент не всегда работает из-за ошибок округления. Например, ставка 1, когда общий банк равен 1000, дает шанс 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%.

Другие вопросы по тегам