JeuWeb - Crée ton jeu par navigateur
Probabilité et jeux de hasard - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Probabilité et jeux de hasard (/showthread.php?tid=269)



Probabilité et jeux de hasard - comode - 26-09-2006

J'ai programmé une petite machine a sous toute simple en PHP.
Les regles sont simple, y'a 4 symboles (banane, cerise, 7 et BAR), et si vous avez les 3 pareils, vous gagnez un certains nombre de fois la mise.
Pour chaque case, les chances d'obtenir ces symboles sont :
BAR : 1/10
7 : 2 / 10
cerise : 3/10
banane : 4/10
Ce qui nous amène a 10/10 au total.
Pour la fonction PHP :

$tmp = rand(1,10);
si $tmp = 10 -> BAR
si $tmp = 8 ou 9 -> 7
si $tmp = 5, 6 ou 7 -> cerise
sinon banane

et si je fait les calculs, les proba pour obteni 3 symboles identiques :
3 x BAR : 0.1 * 0.1 * 0.1 = 0.001 soit 1/1000
3 X 7 : 0.2 * 0.2 * 0.2 = 0.008 soit 0.8%
3 X cerise : 0.3 * 0.3* 0.3 = 0.027 soit 2.7%
3 x banane = 0.4 * 0.4 * 0.4 = 0.064 soit 6.4%

J'ai donc fixé les gains a 500X, 100X, 30X et 10X la mise pour chacune de ces combinaisons...
Et pourtant, apres test, tout ceux qui ont flooder le jackpot en partant avec 5 millions en poche se sont retrouvé avec plusieurs milliers de milliard (1446 pour le plus riche) au bout d'une heure...
Quelqun pourrait m'expliquer ou est le problème dans ma démarche ?


RE: Probabilité et jeux de hasard - Aro - 26-09-2006

Je pourrais peut-être y voir plus clair avec le code de la page...

Peut-être as-tu tout simplement oublié de préciser ce qui se passait si il perdait, il est doc logique qu'il ne fasse que gagner...

Mais sans voir la page, je ne peux pas te le préciser...


RE: Probabilité et jeux de hasard - phpgamer - 26-09-2006

Heu, je crois que le probleme vient du fait que tu n'ai que une seule variable tmp, ce qui fait que le joueur gagne a tout les coups, fait plutot :

Code PHP :
<?php
$tmp1
= mt_rand(1,10);
si $tmp1 = 8 ou 9 -> 7
si $tmp1
= 5, 6 ou 7 -> cerise
sinon banane
$tmp2
= mt_rand(1,10);
si $tmp2 = 8 ou 9 -> 7
si $tmp2
= 5, 6 ou 7 -> cerise
sinon banane
$tmp3
= mt_rand(1,10);
si $tmp3 = 8 ou 9 -> 7
si $tmp3
= 5, 6 ou 7 -> cerise
sinon banane
$tmp4
= mt_rand(1,10);
si $tmp4 = 8 ou 9 -> 7
si $tmp4
= 5, 6 ou 7 -> cerise
sinon banane
if ($tmp1==$tmp2&&$tmp1==$tmp3&&$tmp1==$tmp4&&$tmp2==$tmp3&&$tmp2==$tmp4&&$tmp3==$tmp4)
{
3 x BAR : 0.1 * 0.1 * 0.1 = 0.001 soit 1/1000
3 X 7
: 0.2 * 0.2 * 0.2 = 0.008 soit 0.8%
3 X cerise : 0.3 * 0.3* 0.3 = 0.027 soit 2.7%
3 x banane = 0.4 * 0.4 * 0.4 = 0.064 soit 6.4%
}
?>

Peut etre que ca vient de la?


RE: Probabilité et jeux de hasard - comode - 26-09-2006

Lol non, ça vient pas du tout la, je passe par 3 variables différente, et gagner reste encore exceptionnel... ce que je ne comprend pas, c'est que la tendance soit a gain, alors qu'elle devrait être a la perte sur un très grand nombre de coups...
Voici le code :

Fonction appelé pour case qui va déterminé ce qui sort !
Code :
function GetJackPot()
        {
                $tmp = rand(1,10);
                if($tmp == 10) return 1; // BAR
                if($tmp >= 8 ) return 2; // 7
                if($tmp >= 5 ) return 3; // Cerise
                return 4; // banane
        }

que j'utilise comme ça :

Code :
$i1 = GetJackPot();
                        $i2 = GetJackPot();
                        $i3 = GetJackPot();  
                        if(($i1 == $i2) && ($i2 == $i3) && $i1)
                        {
                                switch($i1)
                                {
                                        case(1) :
                                        mysql_query('') ; // requete qui file le fric
                                         etc...

Je précise que quand je gagne, je gagne bien le montant associé a ma combinaison, que je gagne que très occasionnelelment, et que du coups, je me dit que mon probleme est peut être plus d'ordre mathématique, ou que la fonction REND trip un peu...
Je sais pas...


RE: Probabilité et jeux de hasard - naholyr - 26-09-2006

Utilise mt_rand plutôt que rand, il a un meilleur rendu aléatoire (meilleure distribution) ceci explique peut-être cela.
Tu devrais également logger tout ça, garder dans un fichier une liste de lignes de log "tel joueur a eu tels chiffres, et a gagné tant d'argent", tu y verrais plus clair après analyse.


RE: Probabilité et jeux de hasard - comode - 26-09-2006

j'ai mis le mt_rand tout de suite apres le post de phpgamer et j'ai j'ai refait des tests : même résultat... les 3 BAR sortent environ 1 fois sur 100, et les 3 -7- sont sortis 3 fois sur environ 120 tests... Ce qui est de toute évidence beacoup trop !!!

Y'a t-il qualqun calé en math qui puisse déjà confirmé que ma proba est correct ???


RE: Probabilité et jeux de hasard - comode - 28-09-2006

Pour le if, c'est exactement pareil, et le problème ne viens pas le l'algo, mais bien des proba !


RE: Probabilité et jeux de hasard - LittleQI - 28-09-2006

Avec ce code tu defini toi-meme les proba que tu veux, j'ai essayé de bien le commenter:
Code PHP :
<?
//on defini les constantes
define("BANANE","1");
define("SEPT","2");
define("CERISE","3");
define("BAR","4");

//on met a 0 les 3 resultats
$result[0]=0;
$result[1]=0;
$result[2]=0;

//on defini les proba
$probaBar=1;
$probaSept=8;
$probaCerise=27;
$probaBanane=64;

//on tire au hasard un chiffre qui va nous dire qui va gagner
$nbAleat=rand(1,1000);

//on agit en fonction des resultats
if($nbAleat<=$probaBar) {
for(
$i=0;$i<3;$i++) $result[$i]=BAR;
}
else if((
$nbAleat<=($probaBar+$probaSept))&&($nbAleat>$probaBar)) {
for(
$i=0;$i<3;$i++) $result[$i]=SEPT;
}
else if((
$nbAleat<=($probaBar+$probaSept+$probaCerise))&&($nbAleat>($probaBar+$probaSept))) {
for(
$i=0;$i<3;$i++) $result[$i]=CERISE;
}
else if((
$nbAleat<=($probaBar+$probaSept+$probaCerise+$probaBanane))&&($nbAleat>($probaBar+$probaSept+$probaCerise))) {
for(
$i=0;$i<3;$i++) $result[$i]=BANANE;
}
else {
//si aucun gain n'est fait on a plus qu'a tirer 3 resultats differents (au hasard sinon c'est pas crédible)
$result[0]=rand(1,4);
$result[1]=rand(1,4);
$result[2]=rand(1,4);
while ((
$result[0]==$result[1])&&($result[1]==$result[2])) $result[2]=rand(1,4);
}
?>