3 votes

Calculer un gagnant, en fonction des chances de victoire de chaque joueur

Mon objectif : Chaque joueur a la possibilité de placer un pari, et pour chaque joueur, la chance de gagner son pari est calculée et affichée sur la page web. Par exemple, si le joueur 1 mise 5000 crédits et que le pot total est de 15000 crédits, le joueur 1 a 33% de chances de gagner. Après ce calcul, j'aimerais choisir un gagnant parmi tous les joueurs qui ont parié.

Exemple de jeu :

  • Montant total : 15000 crédits.

  • joueur 1 : 3000 crédits -> 20% de gain

  • joueur 2 : 1500 crédits -> 10% de gain

  • joueur 3 : 7500 crédits -> 50% de gain

  • joueur 4 : 1200 crédits -> 8% de chances de gagner

  • Joueur 5 : 1800 crédits -> 12% de chances de gagner

Comment dois-je procéder pour choisir un gagnant au hasard parmi tous les joueurs ? Je pensais générer un nombre aléatoire et le comparer aux chances de gagner d'une manière ou d'une autre. Des conseils ?

2voto

Attersson Points 3507

Le pourcentage ne fonctionne pas toujours en raison d'erreurs d'arrondi. Par exemple, miser 1 alors que le pot total est de 1000 donne 0% de chances.

Je recommande de tirer un nombre aléatoire dans l'intervalle [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");

Les taux restent ainsi proportionnels à 100 %.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X