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

avec Java Discussion :

Problèmes d'algorithme .


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2010
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Problèmes d'algorithme .
    Bonjour, voila étant donné que je doit faire un marquoir de tennis pour un travaille de vacance en programmation, j'ai un/des problèmes d'algorithme pour compter les points dans les sets.

    Je vais tenter de vous expliquer, je dit bien tenter car je suis nul en prog et je "connais" les règles du tennis que depuis peux.

    Pour gagner un set il faut avoir 6pts et 2pts d'avance sur l'autre joueur, si les deux joueurs ont 6/6, le premier qui a 7/6 gagne le set et on en commence un deuxième puis un troisième.

    C'est a cause de tout ceci que je n'arrive pas a finir l'algorithme qui est dans mon programme.

    Ces deux algorithmes comptent jusqu'à 6 dans le set 1 puis recommencent a compter jusqu'à 6 dans le set 2 et le même chose dans le set 3. Mais ils ne regardent pas si le joueur2 a 2pts de moins que le joueur1(ou inversement) ce qui ferait commencer un nouveaux set ou encore si les deux joueurs ont 6/6, le prochain point ferait gagner le set au joueur qui la marqué et on commence un nouveaux set.

    Je commence a m'embrouiller moi même ><

    J'espère que vous avez comprit :/

    J'ai moi même essayer d'ajouter des conditions avec des && ou || mais les compteurs commencent a compter jusqu'à l'infinie, ce qui n'arrange pas les choses...

    Voici mon code :

    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
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class set extends JFrame
    {
        private JFrame set;
        JButton player1 = new JButton("player1");
        JButton player2 = new JButton("player2");
        JLabel set1j1 = new JLabel("---");
        JLabel set2j1 = new JLabel("---");
        JLabel set3j1 = new JLabel("---");
        JLabel set1j2 = new JLabel("---");
        JLabel set2j2 = new JLabel("---");
        JLabel set3j2 = new JLabel("---");
        private int compteur1 = 0;
        private int compteur2 = 0;
        private int compteur3 = 0;
        private int compteur4 = 0;
        private int compteur5 = 0;
        private int compteur6 = 0;
        
         public set()
        {
            JPanel jpTableau = new JPanel();
            jpTableau.setLayout(new BorderLayout());
            
            JPanel label = new JPanel();
            label.setLayout(new GridLayout(2,3));
            
            label.add(set1j1);
            label.add(set2j1);
            label.add(set3j1);
            label.add(set1j2);
            label.add(set2j2);
            label.add(set3j2);
            
            jpTableau.add(label,BorderLayout.NORTH);
            
            JPanel bouton = new JPanel();
            bouton.setLayout(new GridLayout(1,2));
            
                ActionListener sp=new ActionListener(){
                public void actionPerformed(ActionEvent e)
                {
                    
                    if (compteur1 != 6) {
                        compteur1++;
                        set1j1.removeAll();
                        set1j1.setText(""+compteur1);
                        set1j1.validate();
                    } else if (compteur2 != 6) {
                        compteur2++;
                        set2j1.removeAll();
                        set2j1.setText(""+compteur2);
                        set2j1.validate();
                    } else if (compteur3 != 6) {
                        compteur3++;
                        set3j1.removeAll();
                        set3j1.setText(""+compteur3);
                        set3j1.validate();
                    }
                    
                    
                }
                };
                player1.addActionListener(sp);
                bouton.add(player1);
                
                
                ActionListener sp2=new ActionListener(){
                public void actionPerformed(ActionEvent e)
                {
                    
                    if (compteur4 != 6) {
                        compteur4++;
                        set1j2.removeAll();
                        set1j2.setText(""+compteur4);
                        set1j2.validate();
                    } else if (compteur2 != 6) {
                        compteur5++;
                        set2j2.removeAll();
                        set2j2.setText(""+compteur5);
                        set2j2.validate();
                    } else if (compteur6 != 6) {
                        compteur6++;
                        set3j2.removeAll();
                        set3j2.setText(""+compteur6);
                        set3j2.validate();
                    }
             
                }
                };
                player2.addActionListener(sp2);
                bouton.add(player2);
         
                jpTableau.add(bouton,BorderLayout.SOUTH);
                
                set = new JFrame("set");
                set.setContentPane(jpTableau);
                set.pack();
                set.setResizable(true);        
                set.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                set.setVisible(true);
                
            }
        }
    Merci d'avance

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 121
    Points : 136
    Points
    136
    Par défaut
    Bonjour DxShura
    Quelques remarques...
    - Cà serait plus facile avec un indice qui indique quel set est en cours et avec un tableau de résultats par set et par joueur.
    - Ta classe Set fait un extend de JFrame ce qui est superflux puisque tu déclares et visualise un autre JFrame dans ton constructeur.
    - Conventionellement il est recommandé de commencer le nom des classes par une majuscule pour les distinguer des variables (attention l'interface Set existe déjà en java) .

    Voici ton programme retouché pour faire ce que tu demandes
    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
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    
    public class ScoreTennis { // extends JFrame { <<< Ce JFrame ne sert à rien ici
    
        private JFrame set;
        JButton player1 = new JButton("player1");
        JButton player2 = new JButton("player2");
        
        //JLabel set1j1 = new JLabel("---");
        //JLabel set2j1 = new JLabel("---");
        //JLabel set3j1 = new JLabel("---");
        //JLabel set1j2 = new JLabel("---");
        //JLabel set2j2 = new JLabel("---");
        //JLabel set3j2 = new JLabel("---");
        JLabel resultats[][]=new JLabel[2][3];
        {
        	for (int joueur=0;joueur<2;joueur++) {
        		for (int set=0;set<3;set++) {
        			resultats[joueur][set]=new JLabel("---");
        		}	
        	}	
        }
        
        // Il faut tenir à jour le set en cours 
        private int setEnCours=0;
        
        // Ceci peut avantageusement être remplacé par un tableau >>>
        //
        //private int compteur1 = 0;
        //private int compteur2 = 0;
        //private int compteur3 = 0;
        //private int compteur4 = 0;
        //private int compteur5 = 0;
        //private int compteur6 = 0;
        //
        // <<< 
        private int compteurs[][]=new int[2][3]; 
        // remarque: L'initialisation à zéro est superflue en java
    
         public ScoreTennis() {
            JPanel jpTableau = new JPanel();
            jpTableau.setLayout(new BorderLayout());
            
            JPanel label = new JPanel();
            label.setLayout(new GridLayout(2,3));
            /*
            label.add(set1j1);
            label.add(set2j1);
            label.add(set3j1);
            label.add(set1j2);
            label.add(set2j2);
            label.add(set3j2);
            */
            for (JLabel resultat : resultats[0]) {label.add(resultat);}
            for (JLabel resultat : resultats[1]) {label.add(resultat);}
            
            jpTableau.add(label,BorderLayout.NORTH);
            
            JPanel bouton = new JPanel();
            bouton.setLayout(new GridLayout(1,2));
            
                ActionListener sp=new ActionListener(){
                public void actionPerformed(ActionEvent e)
                {
                	/* >>> !!! Le score peut dépasser 6
                    if (compteur1 != 6) {
                        compteur1++;
                        set1j1.removeAll();
                        set1j1.setText(""+compteur1);
                        set1j1.validate();
                    } else if (compteur2 != 6) {
                        compteur2++;
                        set2j1.removeAll();
                        set2j1.setText(""+compteur2);
                        set2j1.validate();
                    } else if (compteur3 != 6) {
                        compteur3++;
                        set3j1.removeAll();
                        set3j1.setText(""+compteur3);
                        set3j1.validate();
                    }
                    <<< */
                	if (!finDuMatch()) { // Actif jusqu'à la fin du match...
                		 compteurs[0][setEnCours]++;
                         resultats[0][setEnCours].setText(""+compteurs[0][setEnCours]);
                         resultats[0][setEnCours].validate();
                         if (leJoueurGagneLeSet(0,1)) setEnCours++;
                	}  
                }
                };
                player1.addActionListener(sp);
                bouton.add(player1);
                        
                ActionListener sp2=new ActionListener(){
                public void actionPerformed(ActionEvent e)
                {
                    /* >>> !!! Le score peut dépasser 6 
                    if (compteur4 != 6) { 
                        compteur4++;
                        set1j2.removeAll();
                        set1j2.setText(""+compteur4);
                        set1j2.validate();
                    } else if (compteur5 != 6) {
                        compteur5++;
                        set2j2.removeAll();
                        set2j2.setText(""+compteur5);
                        set2j2.validate();
                    } else if (compteur6 != 6) {
                        compteur6++;
                        set3j2.removeAll();
                        set3j2.setText(""+compteur6);
                        set3j2.validate();
                    }
             		<<< */
                	if (!finDuMatch()) { // Actif jusqu'à la fin du match...
                		compteurs[1][setEnCours]++;
                        resultats[1][setEnCours].setText(""+compteurs[1][setEnCours]);
                        resultats[1][setEnCours].validate();
                        if (leJoueurGagneLeSet(1,0)) setEnCours++;
                	}
                }
                };
                player2.addActionListener(sp2);
                bouton.add(player2);
         
                jpTableau.add(bouton,BorderLayout.SOUTH);
                
                set = new JFrame("set");
                set.setContentPane(jpTableau);
                set.pack();
                set.setResizable(true);        
                set.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                set.setVisible(true);
            }
         
         	/**
         	 * Détermine si le joeur qui viens de marquer le point gagne ce set
         	 * 
         	 * @param joueur     : index du joueur qui viens de marquer
         	 * @param adversaire : index de son adversaire
         	 * @return true = Le joueur qui viens de marquer ce point gagne le set
         	 */
         	boolean leJoueurGagneLeSet(int joueur, int adversaire) {
         		// Set jamais gagné avant le 6e point acquis
         		if (compteurs[joueur][setEnCours] < 6) return false;
         		
         		int ecart=(compteurs[joueur][setEnCours]-compteurs[adversaire][setEnCours]);
         		
         		// Le 6e point est acquis... 
         		if (compteurs[joueur][setEnCours]==6) 
         			return (ecart>=2); // C'est gagné avec 2 point d'écart
         		else 
         			return (ecart>=1); // Au delà...c'est gagné avec un point d'écart 
         	}
         	
         	/**
         	 * @return true = le match est fini 
         	 */
         	boolean finDuMatch() {
         		// Règle de fin de match à revoir... http://fr.wikipedia.org/wiki/Tennis
         		// En principe il peut y avoir plus que trois jeux
         		// Le match se déroule au maximum jusque 
         		return (setEnCours == 3); 
         	}
         
        }
    bonne continuation...

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2010
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Merci rebel64 pour le temps que tu a passé pour faire ce code qui marche a merveille et merci aussi pour les remarques et explications que tu m'a donné en même temps, ils me seront d'une grande aide pour la suite.


    Encore merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème d'algorithme snake
    Par skysee dans le forum Développement 2D, 3D et Jeux
    Réponses: 7
    Dernier message: 14/11/2007, 21h41
  2. [linprog] Problème avec algorithme simplex
    Par barbylon dans le forum MATLAB
    Réponses: 4
    Dernier message: 12/11/2007, 19h29
  3. problème exo algorithme
    Par greg96 dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 17/06/2007, 16h25
  4. Réponses: 10
    Dernier message: 23/05/2007, 10h30
  5. problème d'algorithme pour trouver les circuit d'un graphe
    Par marc_dd dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 21/08/2006, 17h36

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