Projet Techniques de Programmation en C PokerStat
DESCRIPTION DU PROJET : 1 REALISATION DU PROJET 2 ROBUSTESSE DU GENERATEUR DE HASARD DE L'ORDINATEUR PROBABILITE BRUTE D'OBTENIR UNE COMBINAISON CALCUL DES PROBABILITES VERIFICATION DE CES PROBABILITES JEU MULTI-JOUEURS : POURCENTAGES DE GAIN CALCUL DES PROBABILITES VERIFICATION DE CES PROBABILITES JEU MULTI-JOUEURS : LA PAIRE D'AS VERIFICATION DE CES PROBABILITES 2 3 3 3 3 4 4 4 5 CONTRAINTES TECHNIQUES : 5 PLANNING DU PROJET 6 DISTRIBUTION DU PROJET CONSTITUTION DES BINOMES TP DE PROJET SOUTENANCE DE PROJET 6 6 6 6 ANNEXE A : ORDRE DES CARTES ET DES COMBINAISONS 7 ANNEXE B : ASPECT LEGAL DES JEUX 7 ANNEXE C : TABLEAU DE PROBABILITES BRUTES 8 ANNEXE D : CHANCES DE GAIN BRUTES EN CONFRONTATION HEADS-UP TABLEAU 1 : PROBABILITES CALCULEES DES CHANCES DE GAIN TABLEAU 2 : POURCENTAGES STATISTIQUES DES CHANCES DE GAIN 10 10 10 PokerStat
Description du projet : Le but de ce projet est de réaliser un logiciel d'analyse de mains de poker basé sur les probabilités et les statistiques, et non de créer un jeu de poker. L'objectif est donc de réaliser des séries de tirages de carte pour confirmer les probabilités de gain à l'aide de statistiques sur un grand nombre de tirages. La variante de jeu de poker utilisée pour ce projet est le Texas Hold'em No Limit. Toutes les règles concernant les mises ne seront pas évoquées, dans la mesure où elles n'interviennent pas dans ce projet. Ce jeu se joue avec un jeu de 52 cartes : il y a 13 cartes dans chaque couleur (Trèfle, Carreau, Cœur, Pic), l'ordre des cartes dans chaque couleur est : 2, 3, 4, 5, 6, 7, 8, 9, 10, Valet, Dame, Roi, As. Le principe du poker Texas Hold'em est de distribuer à chaque joueur deux cartes qu'il est le seul à connaître (il doit les garder secrètes). Ces cartes sont appelées 'cartes privées' ou 'pocket cards'. Ensuite, trois tours de mises et de distribution de cartes ont lieu, en sachant que les cartes révélées au fur et à mesure sont communes à tous les joueurs et exposées au milieu de la table de jeu. Ces cartes sont appelées 'board'. Les étapes de la distribution portent toutes un nom : La distribution des cartes 'privées' aux joueurs s'appelle le pré-flop. Le premier tour de distribution de cartes communes s'appelle le flop. 3 cartes sont révélées. Le deuxième tour de distribution de cartes communes s'appelle le turn. 1 carte supplémentaire est révélée. Le troisième et dernier tour de distribution de cartes communes s'appelle la river. 1 carte est révélée. Chaque joueur dispose donc de 7 cartes pour construire une combinaison : ses 2 cartes privées plus les 5 cartes communes. Parmi ces 7 cartes, le joueur doit en choisir 5 pour construire sa combinaison. Je vous invite dès à présent à consulter l'annexe A indiquant le classement des différentes combinaisons possibles. Il est impératif que vous connaissiez bien cet ordre avant de poursuivre la lecture du sujet. PokerStat 1
Quelques exemples afin de bien illustrer les combinaisons : PROGRAMMATION EN LANGAGE C Cartes privées Board Cartes dévoilées au flop La meilleure combinaison de 5 cartes est alors : 2 paires : 1 paire de 10, une paire de 8, et un Roi (c'est une combinaison de valeur moyenne). Si un de vos adversaires a comme cartes privées : Carte dévoilée au turn Carte dévoilée à la river Sa combinaison est alors : full aux 8 par les Rois (brelan de 8 + paire de Rois), qui est une combinaison très forte! Réalisation du projet Robustesse du générateur de hasard de l'ordinateur Dans tout projet de simulation faisant intervenir le hasard, il est impératif de s'assurer que le générateur de valeurs aléatoires utilisé est fiable. Dans le cas présent, la principale propriété attendue est l'uniformité des tirages, c'est à dire que toute valeur a autant de chances d'être tirée qu'une autre. Pour cela, il vous est demandé de réaliser un programme réalisant 10 millions de tirages au hasard d'une valeur comprise entre 1 et 52. Il vous appartient de déterminer la manière de traiter les valeurs obtenues et de conclure à la fiabilité ou non du générateur de valeurs aléatoires. Cette analyse ainsi que ses résultats doivent être traités dans le rapport de projet. PokerStat 2
Probabilité brute d'obtenir une combinaison Dans une deuxième partie, on cherche à connaître les probabilités d'amélioration d'une main de départ (c'est à dire des deux cartes privées) pour un seul joueur. Par exemple, quelle est la probabilité, en ayant comme cartes privées une paire de 6, d'obtenir un full? un carré? une suite? une couleur? suite à la distribution des 5 cartes du board. Calcul des probabilités Ces probabilités se calculent de manière précise, par dénombrement (pour information, il existe 133 784 560 tirages différents de 7 cartes dans un jeu de 52 cartes). Vous devrez remplir le tableau situé en annexe C et le joindre à votre rapport, en expliquant votre méthode de calcul. Ne cherchez pas à copier les résultats d'autres binômes, le but est d'obtenir vos propres résultats pour les comparer à des statistiques que vous allez obtenir de manière plus simple! Les résultats indiqués dans ce tableau ne seront pas notés. Vérification de ces probabilités Il s'agit dans cette partie de simuler un très grand nombre de tirages pour obtenir des statistiques sur les combinaisons obtenues. Les résultats obtenus seront d'autant plus proches des probabilités calculées que le nombre de tirages est élevé. Il vous faudra donc écrire un programme qui, d'après une main de départ choisie, effectue des tirages des cartes communes et calcule les combinaisons obtenues. Suite à tous ces tirages, vous devrez remplir le tableau de l'annexe C en indiquant les pourcentages obtenus par cette méthode. Comparez les résultats à ceux obtenus par calcul et analysez-les. Jeu multi-joueurs : pourcentages de gain Le poker ne devient intéressant que si plusieurs joueurs s'affrontent! L'étape suivante consiste à traiter la plus simple des versions multi-joueurs : le heads-up (un contre un). Dans ce cas, ce qui est intéressant n'est pas uniquement de connaître la valeur intrinsèque de votre main de départ (même si cette information est importante : mieux vaut avoir une paire d'as en cartes privées qu'un 4 de Cœur et un 9 de Pic ), mais de savoir si elle a des chances de l'emporter face à la main de votre adversaire. Il s'agit maintenant de comparer les chances de PokerStat 3
gain brutes de votre main par rapport à une autre main. Le principe est de construire un tableau indiquant les chances de gain d'une main de départ par rapport à une autre. Calcul des probabilités Les probabilités suivantes vous sont données : Paire d'as contre Paire de Roi : 81,71 % 17,82 % As et 10 (de couleur différente) contre Roi et Dame (de couleur différente) : 59,29 % 40,25% Vous expliquerez pourquoi les chances de gain totales ne sont pas égales à 100 %. Il vous appartient de compléter par calcul le tableau 1 de l'annexe D, en expliquant la méthode de calcul retenue. Vérification de ces probabilités Vous devrez également réaliser un programme qui effectue un grand nombre de tirages pour obtenir des pourcentages statistiques à reporter dans le tableau 2 de l'annexe D. Vous confronterez et analyserez les résultats obtenus. Jeu multi-joueurs : la paire d'as Très souvent, le fait de recevoir une paire d'as en cartes privées fait croire au joueur qu'il va forcément gagner la partie. Les probabilités et les statistiques vont une fois de plus montrer que ce n'est pas forcément le cas. Vous allez donc étudier les chances de gain d'une paire d'as en fonction du nombre de joueurs autour de la table, de 2 à 10. PokerStat 4
Vérification de ces probabilités Vous dresserez dans cette partie uniquement un tableau statistique des pourcentages de gain d'une paire d'as en fonction du nombre de joueurs : voici le tableau à remplir! Nombre de joueurs 2 3 4 5 6 7 8 9 10 Pourcentage parties de gagnées avec une paire d'as Contraintes techniques : Votre projet devra inclure l'utilisation de structures, de fonctions, et être codé de manière modulaire (en utilisant des couples de fichiers.c/.h). Le paquet de cartes à distribuer devra être modélisé par une structure, une carte sera aussi modélisée par une structure. PokerStat 5
Planning du projet Distribution du projet Semaine du 2 au 6 avril 20012 Constitution des binômes Chaque groupe devra fournir à M. FLASQUE avant le Vendredi 13 Avril une liste des binômes formés dans le groupe. Cette liste devra être fournie par mail à : flasque@efrei.fr. Au delà de cette date, les binômes seront attribués d'office. Dans le cas où un groupe comporte un nombre impair d'étudiants, un seul étudiant de ce groupe sera autorisé à être en binôme avec un étudiant d'un autre groupe. Compte-tenu des nombreuses difficultés rencontrées pour la constitution des binômes pour les projets précédents, j'invite tous les élèves un tant soit peu motivés à former leurs binômes tout de suite afin d'identifier les étudiants qui se retrouvent seuls le plus rapidement possible. Parmi ces étudiants qui se retrouveraient seuls, ceux qui souhaitent réellement travailler se verront intégrés dans un binôme en venant directement voir M. Flasque. Ces élèves intégrés à des binômes s'engagent, en venant voir M. Flasque, à fournir un réel travail sur ce projet. TP de projet 4 heures (par groupe) y seront consacrées le mercredi 11 Avril. Soutenance de projet 4 heures (par groupe) y seront consacrées le mercredi 16 Mai. Vous ferez une démonstration de votre programme, l'enseignant qui fait passer la soutenance vous posera des questions sur le programme ainsi que sur la manière dont vous vous êtes réparti les différentes tâches. Le projet et son rapport devront être remis à cette date par l'intermédiaire de Campus Efrei. Pour la soutenance, un ordre de passage sera publié sur Campus Efrei. PokerStat 6
Annexe A : ordre des cartes et des combinaisons Cartes : en ordre décroissant : As-Roi-Dame-Valet-10-9-8-7-6-5-4-3-2 Combinaisons : Rien : 5 cartes totalement dépareillées. La valeur de la combinaison est celle de la carte la plus forte. Une paire : deux cartes de même hauteur (ex : 8 de pique, 8 de carreau). Une paire d'as bat une paire de Rois, et ainsi de suite Deux paires : deux fois une paire. Pour la comparaison, on se base sur la hauteur de la paire la plus forte. Une paire d'as + une paire de 2 bat une paire de Rois + une paire de Dames Brelan : trois cartes de même hauteur. Classement selon la hauteur du brelan Suite (ou Quinte): cinq cartes dont les hauteurs sont consécutives (ex : 6, 7, 8, 9, 10), pas forcément dans la même couleur. On considère que As, 2, 3, 4, 5 est une suite. Par contre Dame, Roi, As, 2, 3 n'en est pas une. Classement selon la hauteur de la carte la plus élevée. Couleur : 5 cartes de la même couleur, qui ne se suivent pas forcément. Classement selon la valeur de la carte la plus élevée. Full : un brelan + une paire. Classement selon la hauteur du brelan : brelan de Rois+paire de 2 bat brelan de Dame + paire d'as Carré : 4 cartes de la même hauteur. Classement selon la hauteur de la carte du carré. Quinte Flush: suite dont les 5 cartes dont de la même couleur (ex : 4, 5, 6, 7, 8 de trèfle). Classement selon la hauteur de la carte la plus élevée. La couleur (trèfle/carreau/cœur/pique) n'intervient jamais pour classer les combinaisons. Annexe B : aspect légal des jeux Loi n 83-628 du 12 juillet 1983 Loi relative aux jeux de hasard Article 1 Modifié par Ordonnance 2000-916 2000-09-19 art. 3 JORF 22 septembre 2000 en vigueur le 1er janvier 2002. Le fait de participer, y compris en tant que banquier, à la tenue d'une maison de jeux de hasard où le public est librement admis, même lorsque cette admission est subordonnée à la présentation d'un affilié, est puni de deux ans d'emprisonnement et de 30000 euros d'amende. Le fait d'établir ou de tenir sur la voie publique et ses dépendances ainsi que dans les lieux publics ou ouverts au public et dans les dépendances, même privées, de ceux-ci tous jeux de hasard non autorisés par la loi dont l'enjeu est en argent est puni de six mois d'emprisonnement et de 7500 euros d'amende. PokerStat 7
Annexe C : Tableau de probabilités brutes Indiquez dans chaque case du tableau la probabilité calculée (en pourcentage) d'obtenir la combinaison voulue en fonction de la main de départ indiquée dans la première colonne Main de paire 2 paires brelan quinte couleur full carré Quinte départ flush 1 paire 100 % 2 cartes qui se suivent mais de couleur différente As et 8 de la même couleur "Suited connectors" 2 cartes qui se suivent dans la même couleur 7 de trèfle et 2 de carreau PokerStat 8
Indiquez dans chaque case du tableau les pourcentages statistiques de combinaisons obtenues en fonction de la main de départ indiquée dans la première colonne Main de départ 1 paire paire 2 paires brelan quinte couleur full carré Quinte flush 2 cartes qui se suivent mais de couleur différente As et 8 de la même couleur "Suited connectors" 2 cartes qui se suivent dans la même couleur 7 de trèfle et 2 de carreau PokerStat 9
Annexe D : Chances de gain brutes en confrontation heads-up Tableau 1 : probabilités calculées des chances de gain Mains de départ Paire d'as Paire de Roi 81,71 % 17,82 % Mains de départ Paire d'as As et Valet de même couleur Mains de départ As et 10 de couleur Roi et Dame de couleur 59,29 % 40,25 % Mains de départ Paire d'as 8 et 9 de même couleur Mains de départ As et Roi de couleur Paire de Dames Mains de départ As et 10 de couleur Paire de 10 Mains de départ Paire de Rois As et Valet de couleur Mains de départ Paire de 2 As et 7 de même couleur Tableau 2 : pourcentages statistiques des chances de gain Mains de départ Paire d'as Paire de Roi Mains de départ Paire d'as As et Valet de même couleur Mains de départ As et 10 de couleur Roi et Dame de couleur Mains de départ Paire d'as 8 et 9 de même couleur Mains de départ As et Roi de couleur Paire de Dames Mains de départ As et 10 de couleur Paire de 10 Mains de départ Paire de Rois As et Valet de couleur Mains de départ Paire de 2 As et 7 de même couleur PokerStat 10