Simulation sur ordinateur
du jeu de bridge
On se propose de programmer un simulateur de jeu de bridge, avec un jeux de C×NC cartes, où C est le nombre de couleurs, et NC est le nombre de cartes par couleur. Chaque joueur doit possèder le même nombre de cartes. Donc il se peut que les dernières cartes du paquet, 1, 2 ou 3 cartes, restent non distribuées aux joueurs.
On développe notre simulateur sans connaitre préalablement de convention d'annonce, ni de convention de jeu de la carte.
On commence par étudier le jeu de la carte. On commence par jouer à sans-atout avec la stratégie du hasard égal pour chaque possibilité.
On applique les préceptes du développement informatique du monde libre linux.
On programme notre framework en langage de scripte ruby, puis en langage machine golang lorsque nous aurons besoin de rapidité de calcul pour produire des données statistiques, ce qui nous permettra de découvrire des indicateurs pertinents, de bonnes conventions du jeu de la carte, des stratégie de jeux de la carte, et de bonnes convention d'annonces.
On simule une donne, avec 4 joueurs numérotés comme suit et avec le mort au Nord :
0 : Sud
1 : Ouest
2 : Nord (mort)
3 : Est
Chaque joueur, de par sa position, possède une stratégie du jeu de la carte qui lui est propre et qui différe selon lequel des joueurs à fait l'entame. Il y a donc 8 procédures spécifiques pour jouer une carte : S00, S01, S02, S03, S10, S11, S12, S13, S20, S22, S23, S30, S31, S32. La procédure Sxy fait jouer une carte par le joueur n°x lorsque l'entame est le joueur n°y, et sachant que le mort est le joueur n°2.
La procédure Donne effectue une donne complète. Elle distribue les cartes aux joueurs sauf les 1, 2, ou 3 dernières cartes afin que les joueurs aient toujours le même nombre de cartes. Elle calcul des indicateurs pour chaque main. Puis elle choisie le joueur n°1 pour l'entame et lance les tours de jeux les uns à la suite des autres jusqu'à épuisement des cartes.
Une carte est représentée par un couple [n,c] où n+1 indique l'image chiffrée de la carte, et c la couleur :
0 : 2
1 : 3
2 : 4
3 : 5
4 : 6
5 : 7
6 : 8
7 : 9
8 : 10
9 : Valet
10 : Dame
11 : Roi
12 : As0 : Treffle
1 : Carreau
2 : Coeur
3 : Pique
Le nombre de carte par couleur est NC=13 dans le cas classique.
Le nombre de couleurs est C=4 dans le cas classique.
Un paquet de carte est représenté par une liste P[n] de C×NC cartes, n∈{0 ... C×NC-1}.
La main d'un joueur est représentée par les listes suivantes :
M[c][i] : la valeur à la i_ème place dans la couleur c (en commençant par i=0 pour la valeur la plus faible).
N[c] : nombre de carte dans la couleur c.L[n] : La liste des cartes (en commençant par n=0 pour la première carte).
Pour facilité la lecture du programme, on adopte une convention : les variables locales sont typées selon leur nom, comme suit :
n, i : Indexes de carte
c : Couleur de carte
v : Valeur de carte
j : Joueur
m : Borne supérieure
Dans le cas classique (C=4, NC=13), nous avons les points d'honneur suivant :
Les points d'honneurs :
As : 4
Roi : 3
Dame : 2
Valet : 1
Les point d'honneurs par joueurs H[j], où j∈{0 ... 3} indique le joueur.
Pour chaque donne on enregistre le résultat dans une nouvelle ligne du tableau : N, H0, H1, H2, H3,
N : Nombre de plis de l'équipe Nord-Sud
H0+H2 : Point d'honneurs de l'équipe Nord-Sud
On calcule pour chaque valeur de point, le nombre moyen de plis obtenus et l'écart type. Qu'est-ce qu'un bon indicateur, c'est celui qui va prédire de façon la plus étroite possible un résultat, c'est à dire, en première analyse en considérant une distribution de Gauss, tel que l'écart-type des résultats soit minimum.
|
Tous les joueurs ne sont pas au même niveau. Il faut prévoire un système de handicap et un système d'annonce adapté à la force du joueur au jeu de la carte. Et c'est pourquoi l'analyse des stratégies de bas niveau est utile en soi. Le niveau zéro correspond au jeu au hasard avec une probabilité égale pour chaque possibilité. Qu'elle sont les bons indicateurs du sans-atout ? Si on choisie le système d'évalution classique tel que les point d'honneurs, 4 pour l'As, 3 pour le roi, 2 pour la dame et 1 pour le valet, c'est une valuation des cartes selon leur numéro et que l'on somme sur les deux mains. On peut se poser la question, n'y a t-il pas pour ce même système d'évaluation une valuation des cartes plus fine ? On procède à une résolution approchée selon la méthode de Newton vectorielle. Méthode de Newton vectorielle.
|
Programme : bridge.rb
Pour pouvoir facilement modifier les règles de stratégie de jeu de la carte, il nous faut structurer le programme en isolant pour chaque joueur la déclaration d'un système de règles que l'on pourra modifier après sans modifier d'autre partie du programme..Pour cela, il nous faut définir un langage spécifique permettant d'écrire ces règles.
A la base de ces règles, il y a celles obligatoires du jeux de la carte, qui s'écrivent littéralement en deux règles comme suit :
1- La couleur de la première carte du plis est celle qui doit être jouée.
2- Si impossible d'appliquer la première règle, alors jouer une carte quelconque.
Puis vient trois premières règles de stratégie :
1- Si le plis est remporté par une carte de l'adversaire, alors jouer une carte de la même couleur juste supérieure.
2- Si impossible d'appliquer la première règle, alors jouer la carte de la couleur de la première carte du plis qui est la plus faible.
3- Si impossible d'appliquer la seconde règle, alors jouer une carte parmi les plus faibles.
---- 19 Août 2021 ----