Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2419 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Projet VBA : Simulation d'un jeux de poker

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Projet VBA : Simulation d'un jeux de poker

n°2190603
max78150
Posté le 17-05-2013 à 14:35:14  profilanswer
 

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
mood
Publicité
Posté le 17-05-2013 à 14:35:14  profilanswer
 

n°2190612
deliriumtr​emens
sic transit intestinal...
Posté le 17-05-2013 à 15:00:02  profilanswer
 

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 )


Message édité par deliriumtremens le 17-05-2013 à 16:07:57
n°2190948
harratch
Posté le 20-05-2013 à 15:34:38  profilanswer
 

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.


Message édité par harratch le 20-05-2013 à 15:37:12

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Projet VBA : Simulation d'un jeux de poker

 

Sujets relatifs
graphe a partir d'excel par VBAListe déroulante & Autofilter VBA
Code VBA pour coller un tableau excel dans corps de mail OutlookIdentification et codage VBA
Vba import csv to xls[Excel/VBA] MàJ Données Graphique
[VBA] comparaison de 2 fichiers excelSimulation Éolienne PSIM
Migrer un projet de ruby 1.8.6 vers 2.0[VBA-Excel] selection d'une plage variable
Plus de sujets relatifs à : Projet VBA : Simulation d'un jeux de poker


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR