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

  FORUM HardWare.fr
  Programmation
  Algo

  Algo optimisation calcul des AS pour jeu de blackjack

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Algo optimisation calcul des AS pour jeu de blackjack

n°1968619
nurtysky
Posté le 23-02-2010 à 17:39:17  profilanswer
 

Hello la communauté,
Dans le carde du développement d'un balckjack en java, je me vois confronté à un problème d'algorithmie.
Je veut créer une méthode qui me rend la valeur d'une main au balckjack.
 
Voici ma classe carte qui est déjà complétement implémentée. Elle contient la classe interne "HashMapCartesBlackjack" qui étend HashMap. Ceci pour gérer les valeur des cartes. Vous remarquerez que pour l'as je décide de lui assigner la valeur 11.

Code :
  1. import java.util.HashMap;
  2. import javax.swing.ImageIcon;
  3.  
  4. /**
  5. *
  6. * @author nurty
  7. */
  8. public class Carte {
  9.    private final HashMapCartesBlackjack mapValeurPoint = new HashMapCartesBlackjack();
  10.    public enum CouleurCarte{Pique,Coeur,Carreau,Trefle};
  11.    public enum ValeurCarte{as,deux,trois,quatre,cinq,six,sept,huit,neuf,dix,valet,dame,roi};
  12.    private ImageIcon icone;
  13.    private ValeurCarte valeur;
  14.    private CouleurCarte couleur;
  15.    private int point;
  16.  
  17.    public Carte(CouleurCarte couleur, ValeurCarte valeur){
  18.        this.couleur = couleur;
  19.        this.valeur = valeur;
  20.        this.point = this.mapValeurPoint.get(this.valeur);
  21.        System.out.println("/images/"+this.couleur+"_"+this.valeur+".jpg" );
  22.        this.icone = new ImageIcon(this.getClass().getResource("/images/"+this.couleur+"_"+this.valeur+".jpg" ));
  23.    }
  24.  
  25.    public CouleurCarte getCouleur() {
  26.        return couleur;
  27.    }
  28.  
  29.    public ImageIcon getIcone() {
  30.        return icone;
  31.    }
  32.  
  33.    public HashMapCartesBlackjack getMapValeurPoint() {
  34.        return mapValeurPoint;
  35.    }
  36.  
  37.    public int getPoint() {
  38.        return point;
  39.    }
  40.  
  41.    public ValeurCarte getValeur() {
  42.        return valeur;
  43.    }
  44.  
  45.    /**
  46.     * Classe statique permettan d'initialiser un HashMap ayant pour clé la valeur de la carte
  47.     * (deux , dame, valet, ..) et comme value, le nombre de point associé à la valeur de la carte
  48.     */
  49.    public static class HashMapCartesBlackjack extends HashMap<ValeurCarte, Integer> {
  50.        /**
  51.         * permet d'initialiser un HashMap ayant pour clé la valeur de la carte
  52.         * (deux , dame, valet, ..) et comme value, le nombre de point associé à la valeur de la carte
  53.         */
  54.        private HashMapCartesBlackjack() {
  55.            this.put(ValeurCarte.as, 11);
  56.            this.put(ValeurCarte.deux, 2);
  57.            this.put(ValeurCarte.trois, 3);
  58.            this.put(ValeurCarte.quatre, 4);
  59.            this.put(ValeurCarte.cinq, 5);
  60.            this.put(ValeurCarte.six, 6);
  61.            this.put(ValeurCarte.sept, 7);
  62.            this.put(ValeurCarte.huit, 8);
  63.            this.put(ValeurCarte.neuf, 9);
  64.            this.put(ValeurCarte.dix, 10);
  65.            this.put(ValeurCarte.valet, 10);
  66.            this.put(ValeurCarte.dame, 10);
  67.            this.put(ValeurCarte.roi, 10);
  68.        }
  69.    }
  70.  
  71.  
  72. }


 
Et ici voici la classe Main qui étend simplement une ArrayList de carte. C'est dans cette classe que je veux faire ma méthode permettant de calculer la valeur de la main en tenant compte des règles du blackjack : J'aimerai que cette méthode me donne la valeur de la main en optimisant les AS. Un AS peut valoir 1 ou 11 le but étant de se rapprocher le plus de 21 (21 étant le must). Cette méthode peut me retourner un nombre supérieur à 21 mais devrai me retourner : 14 si j'ai deux As et un 2 / 21 si j'ai deux AS et un neuf / 17 si j' ai un DIX , un SIX et un AS / etc....

Code :
  1. import java.util.ArrayList;
  2.  
  3. /**
  4. *
  5. * @author nurty
  6. */
  7. public class Main extends ArrayList<Carte> {
  8.    /**
  9.     * METHODE A IMPLEMENTER!!!!!!!!!
  10.     * @return la valeur de la main
  11.     */
  12.    public int getValeur(){
  13.        int somme = 0;
  14.        boolean aUnAs = false;
  15.        if(this.size() > 0){
  16.            for(Carte maCarte : this){
  17.                if(maCarte.getPoint() == 11){
  18.                   aUnAs = true;
  19.                }
  20.                if(somme + maCarte.getPoint() > 21 && aUnAs){
  21.                    somme = somme + maCarte.getPoint() - 10;
  22.                }else{
  23.                    somme = somme + maCarte.getPoint();
  24.                }
  25.            }
  26.        }
  27.        return somme;
  28.    }
  29. }


 
Actuellement la methode getValeur() fonctionne si le joueur tire 1 ou aucun AS mais des qu'il en a 2 il y a problème...
 
Merci d'avance pour vos réponses[cpp][/cpp]

Message cité 1 fois
Message édité par nurtysky le 23-02-2010 à 17:43:57
mood
Publicité
Posté le 23-02-2010 à 17:39:17  profilanswer
 

n°1968686
breizhbugs
Posté le 23-02-2010 à 19:35:45  profilanswer
 

nurtysky a écrit :


Code :
  1. import java.util.ArrayList;
  2.  
  3. /**
  4. *
  5. * @author nurty
  6. */
  7. public class Main extends ArrayList<Carte> {
  8.    /**
  9.     * METHODE A IMPLEMENTER!!!!!!!!!
  10.     * @return la valeur de la main
  11.     */
  12.    public int getValeur(){
  13.        int somme = 0;
  14.        boolean aUnAs = false;
  15.        if(this.size() > 0){
  16.            for(Carte maCarte : this)
  17.            {
  18.                  if (maCarte.getPoint() == 11 && aUnAs == true)
  19.                  {
  20.                     somme += 1;
  21.                  }
  22.                  else
  23.                  {
  24.                     somme+=maCarte.getPoint();
  25.                  }
  26.                   if(maCarte.getPoint() == 11)
  27.                   {
  28.                     aUnAs = true;
  29.                  }
  30.            }
  31.        }
  32.        return somme;
  33.    }
  34. }


 


Un truc du genre je pense....

n°1974258
snafu8
Posté le 16-03-2010 à 19:53:00  profilanswer
 

Je suis pas sûr de comprendre. Au black jack, il me semble que quand tu ne peux choisir la valeur d'un as que quand tu le tires. Après sa valeur est fixe. Donc en gros tu es toujours dans le cas, ou tu connais la valeur de ta main avant de piocher un as, et, si tu tires un as, tu dois choisir sa valeur, donc c'est exactement le cas que tu as déjà implémenté. Le seul cas différent, c'est quand tes deux premières cartes sont des as, mais par défaut, tout le monde prendrait 1 + 11.
 
Si j'ai bien tout suivi, ton problème est que tu n'arrives à fixer la valeur des as dynamiquement, une fois que tu as toutes tes cartes en main, mais ca viole les règles.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Algo

  Algo optimisation calcul des AS pour jeu de blackjack

 

Sujets relatifs
Code simple, optimisation possible?Mastermind en algo puis en C
Excel calcul sur date en VBACalcul quantité licence récursivement
calcul automatiqueConseil d'optimisation BDD vs script ??
Calcul d'une clé privée RSA[ C# ] Librairie de calcul de statistique
Aide sur petit tableau de calcul de prix[DB2] calcul de pourcentages d'une occurence
Plus de sujets relatifs à : Algo optimisation calcul des AS pour jeu de blackjack


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