Algo optimisation calcul des AS pour jeu de blackjack

Algo optimisation calcul des AS pour jeu de blackjack - Algo - Programmation

Marsh Posté le 23-02-2010 à 17:39:17    

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
Reply

Marsh Posté le 23-02-2010 à 17:39:17   

Reply

Marsh Posté le 23-02-2010 à 19:35:45    

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....

Reply

Marsh Posté le 16-03-2010 à 19:53:00    

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed