IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

NetBeans Java Discussion :

Problème Jeu BlackJack Netbeans


Sujet :

NetBeans Java

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Problème Jeu BlackJack Netbeans
    Bonjour,

    J'ai réalisé un petit programme de blackJack mais j'ai quelques petits problèmes que je n'arrive pas à résoudre.

    1) Quand on commence une nouvelle partie, le textfield du résultatJoueur ne se remet pas à 0. Il semble que l'erreur vienne de plateauJoueur qui ne se remet pas à 0. Pourtant j'ai créé une boucle avec "plateauJoueur.get(i).setValeur(0);" pour le remettre à 0, mais cela ne semble pas fonctionner.

    2) Un deuxième problème c'est quand on commence une nouvelle partie, le label1 qui affiche "Entrez une mise entre 0 et..." , ne se met pas à jour correctement avec la nouvelle valeur de cash. Dans la fonction compareScore(), j'ai dû créer une nouvelle variable cashFinal, sans quoi, il y avait des erreurs lors du calcul du nouveau cash.

    3) Lorsqu'un as tombe en 3 ème position ou après, il vaut 11. Et je ne comprends pas pourquoi il ne passe pas à 1 si la somme du joueur est supérieure à 21.

    Merci d'avance pour votre aide,

    Voici mes deux classes BlackJack.java et Cartes.java



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    import java.util.ArrayList;
     
    public class BlackJack extends javax.swing.JFrame {
     
        ArrayList <Cartes> plateauJoueur = new ArrayList() ; 
        ArrayList <Cartes> plateauBanque = new ArrayList() ;
        int cashJoueur = 10;
        int cashFinal = 10;
        int miseJoueur;
        int nbrCartesJoueur = 0 ;
        int nbrCartesBanque = 0 ;
        int nbrCartesJoueurVerso = 0;
        int nbrCartesBanqueVerso = 0;
        int sommeJoueur = 0;
        int sommeBanque = 0;
        boolean as = false;
     
     
        public BlackJack() {
            initComponents();
            this.setExtendedState(this.MAXIMIZED_BOTH);
     
           //this.setSize(1400, 1200); 
           //setContentPane(new JLabel(new ImageIcon("./tapis.jpg")));
            nouvellePartie();
        }
     
        public void nouvellePartie(){
            label1.setText("Entrez une mise entre 0 et "+cashJoueur);      
     
            for (int i=0; i<plateauJoueur.size(); i++){
                plateauJoueur.get(i).setValeur(0);
                resultatsJoueurTfld.setText("" + plateauJoueur.get(i));
            }
            System.out.println("sommeJoueur"+sommeJoueur);
            for (int i=0; i<2; i++){
     
                    nbrCartesJoueur = i ;
                    Cartes temp = new Cartes();
                    plateauJoueur.add(temp);
                    plateauPanelJoueur.add(temp).setBounds(120+(nbrCartesJoueur*(152+15)), 70, 152, 210);
            }
            for (int i=2; i<5; i++){
                    nbrCartesJoueurVerso = nbrCartesJoueur + i-1 ;
                    Cartes temp = new Cartes(true);
                    plateauJoueur.add(temp);
                    plateauPanelJoueur.add(temp).setBounds(120+(nbrCartesJoueurVerso*(152+15)), 70, 152, 210);
            }
            for (int i=0; i<1; i++){
                    nbrCartesBanque = i;
                    Cartes temp = new Cartes();
                    plateauBanque.add(temp);
                    plateauPanelBanque.add(temp).setBounds(120+(nbrCartesBanque*(152+15)), 10, 152, 210); 
            }
             for (int i=1; i<5; i++){
                    nbrCartesBanqueVerso = nbrCartesBanque + i ;
                    Cartes temp = new Cartes(true);
                    plateauBanque.add(temp);
                    plateauPanelBanque.add(temp).setBounds(120+(nbrCartesBanqueVerso*(152+15)), 10, 152, 210);
            }
           plateauPanelJoueur.validate();
           plateauPanelBanque.validate();
           calculeScoreJoueur();
        }
     
        public void miseJoueur(){
            if (miseJoueur<=cashJoueur){
               cashJoueur = cashJoueur - miseJoueur;
               cashTfld.setText("Votre cash vaut: " + cashJoueur) ;
            }
            else if (miseJoueur>cashJoueur){
                cashTfld.setText("Insérez une mise moins grande") ;
            }
            else if (cashJoueur==0){
                cashTfld.setText("Vous n'avez plus de quoi miser") ;
            }
        }
     
        public void nouvelleCarteJoueur(){
                resultatsJoueurTfld.setText("" + sommeJoueur);
                nbrCartesJoueur = nbrCartesJoueur+1;
                Cartes temp = new Cartes();
                plateauJoueur.add(temp);
                plateauPanelJoueur.add(temp).setBounds(120+((nbrCartesJoueur)*(152+15)), 70, 152, 210);
                plateauPanelJoueur.validate();
    }
     
        public void nouvelleCarteBanque(){
                nbrCartesBanque = nbrCartesBanque+1;
                Cartes temp = new Cartes();
                plateauBanque.add(temp);
                plateauPanelBanque.add(temp).setBounds(120+((nbrCartesBanque)*(152+15)), 10, 152, 210); 
        }   
     
        public void calculeScoreJoueur(){
            sommeJoueur=0;
            System.out.println ("sommeJoueur après "+ sommeJoueur);
           for (int i=0; i<plateauJoueur.size(); i++){
               sommeJoueur = sommeJoueur + plateauJoueur.get(i).getValeur();
           }
           if (sommeJoueur>21){
               as=false;
               for (int i=0; i<plateauJoueur.size(); i++){
                    if (plateauJoueur.get(i).getValeur()==11 && as==false){
                        sommeJoueur = sommeJoueur - 10;
                    }
                    as=true;
                }
           }
           System.out.println("Calcul joueur" + sommeJoueur);
           System.out.println("Calcul joueur" + plateauJoueur);
          resultatsJoueurTfld.setText("" + sommeJoueur);
        }   
     
        public void calculeScoreBanque(){
           sommeBanque = 0;
           for (int i=0; i<plateauBanque.size(); i++){
               sommeBanque = sommeBanque + plateauBanque.get(i).getValeur();
           }
           if (sommeBanque>21){
               as=false;
               for (int i=0; i<plateauBanque.size(); i++){
                    if (plateauBanque.get(i).getValeur()==11 && as==false){
                        sommeBanque = sommeBanque - 10;
                    }
                    as=true;
               }
           }
           resultatsBanqueTfld.setText("" + sommeBanque);
        }
     
        public void banqueJoue(){
           nouvelleCarteBanque();
           plateauPanelBanque.validate();
           calculeScoreBanque();
           compareScore();
        }
     
        public void compareScore(){
            int cashFinal;
            if (sommeJoueur==sommeBanque && sommeJoueur<=21){
                cashFinal = cashJoueur + miseJoueur;
                GagnantTfld.setText("Vous récupérez votre mise! Vous avez : "+ cashFinal);
            }
            if ((sommeJoueur>21) || (sommeJoueur<sommeBanque)){
                GagnantTfld.setText("Vous avez perdu, recommencez une partie! Votre cash vaut : "+cashJoueur);
            }
            if ((sommeBanque>21 && sommeJoueur<=21) || (sommeJoueur>sommeBanque && sommeJoueur<=21)){
                cashFinal = cashJoueur + 2*miseJoueur;
                GagnantTfld.setText("Vous avez gagné et récupérez 2x votre mise! Vous avez : "+cashFinal);
            } 
        }
         private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
            as=false;
            miseJoueur = Integer.parseInt(MiseTfld.getText());
            miseJoueur();
            plateauPanelJoueur.validate();
            calculeScoreJoueur();
     
        }                                        
     
        private void nouvelleCarteBtnActionPerformed(java.awt.event.ActionEvent evt) {                                                 
            if (sommeJoueur<21 && miseJoueur>0){
                nouvelleCarteJoueur();
                plateauPanelJoueur.validate();
                calculeScoreJoueur();
     
            }
            if (sommeJoueur == 21){
                while (sommeBanque<17){
                    banqueJoue();
                }
            }
            if (sommeJoueur>21){
                GagnantTfld.setText("Vous avez perdu, recommencez une partie! Votre cash vaut : "+cashJoueur);
            }
             resultatsJoueurTfld.setText("" + sommeJoueur);
        }                                                
     
        private void arretBtnActionPerformed(java.awt.event.ActionEvent evt) {                                         
           if (sommeBanque<17 && miseJoueur>0 && sommeJoueur<=21){
               do {
                   banqueJoue();
               } while (sommeBanque<17);
           }
     
        }                                        
     
        private void GagnantTfldActionPerformed(java.awt.event.ActionEvent evt) {                                            
            // TODO add your handling code here:
        }                                           
     
        private void nouvellePartieActionPerformed(java.awt.event.ActionEvent evt) {                                               
            if (miseJoueur>0){
                miseJoueur=0;
                MiseTfld.setText("");
                cashTfld.setText("") ;
                sommeJoueur=0;
                sommeBanque=0;
                resultatsJoueurTfld.setText("");
                resultatsBanqueTfld.setText("");
                GagnantTfld.setText("");
                nouvellePartie();
     
            }
        }                                              
     
        private void MiseTfldKeyPressed(java.awt.event.KeyEvent evt) {                                    
            if (evt.getKeyCode()==10){
                as=false;
                miseJoueur = Integer.parseInt(MiseTfld.getText());
                miseJoueur();
                plateauPanelJoueur.validate();
                calculeScoreJoueur();
            }
        }



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    import java.awt.Image;
    import javax.swing.ImageIcon;
     
     
    public class Cartes extends javax.swing.JPanel {
     
        private boolean carte = false;
        private int valeur = 0;
        private int nombre;
        private String verso = "./src/Images/verso.jpg";
        private String [] chemins = {
    "./src/Images/1ca.jpg",
    "./src/Images/1co.jpg",
    "./src/Images/1p.jpg",
    "./src/Images/1t.jpg",
    "./src/Images/2ca.jpg",
    "./src/Images/2co.jpg",
    "./src/Images/2p.jpg",
    "./src/Images/2t.jpg",
    "./src/Images/3ca.jpg",
    "./src/Images/3co.jpg",
    "./src/Images/3p.jpg",
    "./src/Images/3t.jpg",
    "./src/Images/4ca.jpg",
    "./src/Images/4co.jpg",
    "./src/Images/4p.jpg",
    "./src/Images/4t.jpg",
    "./src/Images/5ca.jpg",
    "./src/Images/5co.jpg",
    "./src/Images/5p.jpg",
    "./src/Images/5t.jpg",
    "./src/Images/6ca.jpg",
    "./src/Images/6co.jpg",
    "./src/Images/6p.jpg",
    "./src/Images/6t.jpg",
    "./src/Images/7ca.jpg",
    "./src/Images/7co.jpg",
    "./src/Images/7p.jpg",
    "./src/Images/7t.jpg",
    "./src/Images/8ca.jpg",
    "./src/Images/8co.jpg",
    "./src/Images/8p.jpg",
    "./src/Images/8t.jpg",
    "./src/Images/9ca.jpg",
    "./src/Images/9co.jpg",
    "./src/Images/9p.jpg",
    "./src/Images/9t.jpg",
    "./src/Images/10ca.jpg",
    "./src/Images/10co.jpg",
    "./src/Images/10p.jpg",
    "./src/Images/10t.jpg",
    "./src/Images/11ca.jpg",
    "./src/Images/11co.jpg",
    "./src/Images/11p.jpg",
    "./src/Images/11t.jpg",
    "./src/Images/12ca.jpg",
    "./src/Images/12co.jpg",
    "./src/Images/12p.jpg",
    "./src/Images/12t.jpg",
    "./src/Images/13ca.jpg",
    "./src/Images/13co.jpg",
    "./src/Images/13p.jpg",
    "./src/Images/13t.jpg",
    };          
     
        public Cartes() {
            initComponents();
            affichage();
        }
       public Cartes(boolean vide) {
           if (vide){
               initComponents();
               afficheVerso();
               nombre =0;
               //affichage verso
               //valeur =0
     
           }
     
        }
     
        public void setCarte (boolean newCarte ){
            carte = newCarte;
        }
     
        public boolean getCarte (){
            return carte;
        }
     
        public void setValeur(int valeur){
            this.valeur=valeur;
        }
     
        public int getValeur(){  
            if(nombre !=0){
            valeur = (int)((nombre/4)+1);
            if (valeur>10){
                valeur=10;
            }
            if (valeur == 1 ){
                valeur=11;
            }
            return valeur;}
            else return 0;
        }
     
        public void affichage(){
            nombre = (int) (Math.random()*52); 
            miseAJour(nombre);
        }    
     
        public void afficheVerso(){
            ImageIcon ico = new ImageIcon (verso); 
            Image uneImage = ico.getImage();        
            ico.setImage(uneImage);        
            jLabel1.setIcon(ico);
        }
     
        public void miseAJour(int chemin) {
            ImageIcon ico = new ImageIcon (chemins [nombre]); //Permet de changer d'image ()
            Image uneImage = ico.getImage();        //Récupère l'image qui est dans l'icône dans le but de redimensionner l'image
            ico.setImage(uneImage);        
            jLabel1.setIcon(ico);
        }

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    1) plateauJoueur.get(i).setValeur(0); ne fait que modifier un int : aucune répercussion sur un quelconque affichage. Ensuite dans la boucle, resultatsJoueurTfld.setText("" + plateauJoueur.get(i));, tu mets le résultat de l'appel de la méthode toString() de la classe Carte dans un champ unique, donc celui de la dernière instance de Carte de la liste. Ton code n'étant pas complet, la méthode toString() en particulier n'étant pas visible, je ne peux savoir ce qu'elle retourne et en déduire quoique ce soit d'autre.

    2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public void compareScore(){
       int cashFinal;
       if (sommeJoueur==sommeBanque && sommeJoueur<=21){
          cashFinal = cashJoueur + miseJoueur;
          GagnantTfld.setText("Vous récupérez votre mise! Vous avez : "+ cashFinal);
       }
       if ((sommeJoueur>21) || (sommeJoueur<sommeBanque)){
          GagnantTfld.setText("Vous avez perdu, recommencez une partie! Votre cash vaut : "+cashJoueur);
       }
       if ((sommeBanque>21 && sommeJoueur<=21) || (sommeJoueur>sommeBanque && sommeJoueur<=21)){
          cashFinal = cashJoueur + 2*miseJoueur;
          GagnantTfld.setText("Vous avez gagné et récupérez 2x votre mise! Vous avez : "+cashFinal);
       } 
    }
    la variable cashFinal est locale à cette méthode et le cash affiché lui correspond, mais à la sortie de la méthode le cashJoueur n'a pas changé. Je ne vois pas de quelle erreur de calcul tu parles qui t'obligerait à créer une nouvelle variable, à part un recouvrement de l'un des tests (le fait que au moins 2 des conditions des if soit vraies en même temps). En tout cas, si le cash du joueur à la fin de la méthode doit être cashFinal, il suffit d'ajouter à la fin cashJoueur=cashFinal.
    Il serait mieux que tu simplifies ces tests, et que tu les rendes exclusif par un else, afin de plus facilement comprendre ce que fait cette méthode à la relecture : l'erreur de calcul dont tu parles devrait être plus facilement compréhensible. Quelque chose comme ça :
    Code pseudocode : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    si ( condition pour que le joueur perde ) {
       afficher que le joueur a perdu
    } 
    else {
      if ( condition1 ) {
        // le joueur gagne une fois sa mise
      }
      else if ( condition2 ) {
        // le joueur gagne 2 fois sa mise
      }
      else {
        // ?
       }
    }

    Un test comme if ((sommeBanque>21 && sommeJoueur<=21) || (sommeJoueur>sommeBanque && sommeJoueur<=21)){ peut se simplifier par exemple en if ((sommeJoueur>sommeBanque || sommeBanque>21 ) && sommeJoueur<=21)){ par exemple.


    3) Le problème vient à priori de cette boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if (sommeJoueur>21){
       as=false;
       for (int i=0; i<plateauJoueur.size(); i++){
           if (plateauJoueur.get(i).getValeur()==11 && as==false){
              sommeJoueur = sommeJoueur - 10;
           }
           as=true;
       }
    }
    Dans la boucle, on fait systématiquement as=true : donc, à part lors de la première itération, le test if (plateauJoueur.get(i).getValeur()==11 && as==false){ est forcément faux. En résumé, si la première carte de la liste vaut 11, la somme du joueur est décrémentée de 10, sinon rien. Je ne suis pas au fait des règles du BlackJack, mais est-ce qu'on ne devrait pas décrémenter de 10 pour toute carte de type as, tant que la sommeJoueur est supérieure à 21 ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Problème de connexion NetBeans et SQL Server 2000
    Par mayssabac dans le forum NetBeans
    Réponses: 9
    Dernier message: 07/06/2017, 13h48
  2. [SDL] Problème jeu de labyrinthe
    Par Gottfried dans le forum SDL
    Réponses: 4
    Dernier message: 25/07/2007, 16h18
  3. Problème jeu de caractère dans base.
    Par juliobarna dans le forum Outils
    Réponses: 3
    Dernier message: 05/05/2007, 16h56
  4. Problème jeu de la vie de Wolfram
    Par romromp dans le forum Pascal
    Réponses: 14
    Dernier message: 11/03/2007, 19h58
  5. Problème jeu réseau - media center
    Par AsTeR_ dans le forum Windows XP
    Réponses: 1
    Dernier message: 03/12/2006, 13h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo