Projet VBA : Simulation d'un jeux de poker - VB/VBA/VBS - Programmation
Marsh Posté le 17-05-2013 à 15:00:02
Ben pour désigner le vainqueur va falloir implémenter les règles pour le classement des mains : Main_au_poker
Ce qui va être la partie la plus longue /compliquée / intéressante du projet...
Pour le vainqueur, mettre ton code de partie dans une boucle (genre un do... while)
Imaginons un classe joueur avec une variable victoire.
pseudo code rustique
variable joueurListe = nouvelle liste de joueurs();
faire {
code d'une partie;
joueurListe[indexduVainqueur].victoire +=1;
} tant que (tous les joueurs .victoire < 5 )
Marsh Posté le 20-05-2013 à 15:34:38
Bonjour
Trouver la valeur d'une main au Poker, peut-être la pire chose qui soit, ou une simple "petite promenade de campagne"
Tout commence par le choix des noms de variables que l'on affecte aux cartes.
Ainsi si tu ranges tes cartes dans un tableau de 51 éléments et par ordre de taille tu peux avoir le tableau
C0,C1, C2…..C11, C12, D13, D14……,D25, H26, H27, ….. H38, S39,S40,…..S51. Pour respectivement les trèfles, les carreaux, les coeurs et les piques.
Après le tirage aléatoire des 5 premières cartes et (ce qui est le plus important) un tri par ordre croissant de ces cartes tu peux déceler immédiatement la présence d'une couleur (flush) : il suffit pour cela que toutes les cartes d'une main soient dans les intervalles [0,12],[13,25], [26,38] ou [39,51]
Ensuite, tes cartes étant classées par ordre croissant tu peux simplement ajouter 1 à la valeur de la plus petite, si le résultat est égal à celle de la seconde alors tu ajoutes encore 1 à celle de la seconde… et ainsi de suite si le test est vrai chaque fois, alors tu es en présence d'une quinte. Et si cela à lieu alors que tu as un flush, ta quinte est une quinte flush. Et si la plus petite est un 10 (qui dans l'exemple que je te donne a les valeurs C9, D22, H35 ou S47, alors il s'agit d'une flush royale.
Attention au fait que les règles du Poker stipulent que l' As peut prendre la valeur 1 dans le cas de la quinte avec 2,3,4,5 et As.
Un carré XXXX peut être classé de deux facons : yXXXX ou XXXXy et l'écart entre les X est toujours de 13.
Un Brelan XXX sera de la forme yzXXX, ou yXXXz ou XXXyz avec toujours 13 entre les X
Une paire XX sera w,y,z,X,X ou w,y,X,X,z ou w,X,X,y,z ou enfin X,X,w,y,z
Le Full sera une paire + un brelan.
Si tu veux plus de détails, fait moi signe, je reste à ta disposition.
Notes cependant que 10 joueurs sur une table compliquent sérieusement ton programme car avec 50 cartes distribuées tu es obligé en fonction de l'écart de chacun des joueurs de redistribuer des cartes qui proviennent des premières mains. Et en aucun cas de redonner à un joueur une carte qu'il vient de rejeter.
Dans le cadre d'un exercice scolaire, je te conseille plutôt de faire un programme de "DrawPoker". Dans ce cas, tu n'as qu'un seul joueur à qui l'ordinateur distribue 5 cartes. Le joueur choisi d'en garder le nombre qu'il souhaite et l'ordinateur remplace les cartes rejetées par 5,4,3,2,1,0 qu'il reprend dans le paquet des cartes restantes. En outre cela permet de faire intervenir une 53ème carte (le Joker) qui donne au jeu un attrait évident.
Marsh Posté le 17-05-2013 à 14:35:14
Bonjour, je suis étudiant et dans le cadre de mes études je dois réaliser un projet VBA. Mon choix s'est porté sur un simulateur de jeux de poker. Pour le moment je suis parvenu à tirer 5 cartes pour les 10 joueurs et deux cartes au hasards pour compléter le jeux.
Cependant,
Premier problème: je n'arrive pas à afficher un vainqueur pour chaque main ?
Second problème : Comment insérer un compteur me permettant de comptabiliser 1 point pour le joueur qui gagne et la fin du jeux lorsque le premier joueur atteint 5 points ?
Merci d'avance.
Option Explicit
Sub Poker_Dict()
' Requires a reference to the Microsoft Scripting Runtime
Dim NumCards As Integer, Players As Integer
Dim Suits(), Cards()
Dim J As Variant, K As Variant
Dim CardNum As Integer, i As Integer, v As Integer, CardPick As Integer
Dim Casino As Dictionary, CardName As String
Dim NewSheet As Worksheet
Set Casino = New Dictionary
' number of cards
NumCards = 5
' number of players
Players = 10
If NumCards * Players > 52 Then
MsgBox "You have exceeded one deck!", vbCritical
Exit Sub
End If
Application.ScreenUpdating = False
'Add a new sheet for the game
Set NewSheet = ActiveWorkbook.Sheets.Add
'Requires Excel 2000+ to use Array
Suits = Array("Spades", "Clubs", "Diamonds", "Hearts" )
Cards = Array("Ace", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", _
"Ten", "Jack", "Queen", "King" )
' Add the cards to the Dictionary Object.
i = 1
For Each J In Suits
For Each K In Cards
Casino.Add K & " of " & J, i
i = i + 1
Next K
Next J
'Pick a random card, deal it and remove it from the pack
For i = 1 To Players
NewSheet.Cells(1, i) = "Player " & i
For v = 1 To NumCards
CardPick = Int(Rnd() * Casino.Count)
CardName = Casino.keys(CardPick)
NewSheet.Cells(v + 1, i) = CardName
Casino.Remove (CardName)
Next v
Next i
'dump undealt cards
v = 1
NewSheet.Cells(v, i + 1) = "Undealt Cards"
For Each J In Casino
v = v + 1
NewSheet.Cells(v, i + 1) = J
Next J
'Autofit columns
NewSheet.UsedRange.EntireColumn.AutoFit
'show the result
Application.ScreenUpdating = True
Set Casino = Nothing
End Sub
Message édité par max78150 le 17-05-2013 à 14:39:05