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

AWT/Swing Java Discussion :

paintComponent n'affiche rien


Sujet :

AWT/Swing Java

  1. #21
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 45
    Par défaut
    salut Joel,
    j'ai essayé ce que tu m'as dit, je n'ai pas d'erreur mais le code il fait juste afficher les cartes une après l'autre
    j'ai l'impression que le timer ne se déclenche jamais
    voila mon bout de 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
     
    		for(int i =0;i<nRangees*nColonnes; i++){
    			this.add(cartes[i]);
    			cartes[i].addMouseListener(new MouseAdapter(){
    				CarteCouleur carteVisible;
    				Timer t=null;
    				boolean trouvee = false;
    				public void mouseClicked(MouseEvent e) {
    					CarteCouleur c1 =(CarteCouleur) e.getSource();
    						if(c1.estCachee()){
    							c1.montre();
    							if(carteVisible==null&&!trouvee){
    								carteVisible = c1;
    							}
    							if(carteVisible!=null&&!trouvee&&c1.rectoIdentique(carteVisible)){
    								carteVisible=null;
    								trouvee=true;
    							}
    							if(carteVisible!=null&&!trouvee&&!c1.rectoIdentique(carteVisible)){
    								System.out.println("c bon ici");
    								t = new Timer(2000,new ActionListener(){
    									public void actionPerformed(ActionEvent e){
    										c1.cache();
    										carteVisible.cache();
    									}
    								});
    								t.setRepeats(false);
    								t.start();
     
    							}
    						}
    						carteVisible=null;
    						t=null;
     
     
    				}
    			});
    		}
    	}	
    }
    merci d'y jeter un coup d’œil

  2. #22
    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 : 56
    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
    Billets dans le blog
    2
    Par défaut
    Il faut absolument que ça soit la même instance de MouseAdapter pour toutes les cartes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    MouseAdapter mouseAdapter = new MouseAdapter(){
       /*...*/
    };
    for(int i =0;i<nRangees*nColonnes; i++){
    			this.add(cartes[i]);
    			cartes[i].addMouseListener(mouseAdapter);
    Attention parce que trouvee doit être aboslument par carte, donc pas dans MouseAdapter. Soit tu modifies ta classe carte, soit tu fais un tableau de boolean pour stocker cette info. Je n'ai pas trop le temps de pousser plus avant l'analyse de ton code, mais j'ai vu rapidement un gros problème : les combinaisons de combinaisons sont bien sûr exclusives (les lignes de mon tableau), et à chaque combinaisons correspond à un évenement. Là, dans ton code, le fait qu'il y ait de if() successifs sans else, avec des modifications d'états traités par le if suivant doit faire n'importe quoi.
    tu dois avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if ( condition1 ) {
        changementEtat1();
    } else if (condition2 ) {
        changementEtat2();
    } ...
    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.

  3. #23
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 45
    Par défaut
    J'ai enlevé complétement la variable trouvee et j'ai réussi à le faire fonctionner plus au moins; je veux dire il marche normalement mais il ne faut pas que je clique sur une troisième carte pendant le timer sinon il me donne un nullPointerException avec une douzaines de messages d'erreurs, et je peux tourner plusieurs cartes en même temps. Je crois qu'il déclenche plusieurs timer en même temps, Mais ce qui est bizarre c'est qu'il ne plante pas, je continue à tourner des cartes jusqu’à la fin


    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
    MouseAdapter mouseAdapter = new MouseAdapter(){
    			CarteCouleur carteVisible;
    			Timer t=null;
    			public void mouseClicked(MouseEvent e) {
    				CarteCouleur c1 =(CarteCouleur) e.getSource();
    				if(c1.estCachee()){
    					c1.montre();
    					nbCoups++;
    					if(carteVisible==null){
    						carteVisible = c1;					}
    					else {
    						if(c1.rectoIdentique(carteVisible)){
    							carteVisible=null;
    							//System.out.println("ici c bon ");
     
    						}
    						else{
    							//System.out.println("c bon ici");
    							t = new Timer(2000,new ActionListener(){
    								public void actionPerformed(ActionEvent e){
    									c1.cache();
    									carteVisible.cache();
    									carteVisible=null;
    									repaint();
    								}
    							});
    							t.start();
    							t.setRepeats(false);
    						}
    					}
     
    				}
    			}
    		};
     
    		for(int i =0;i<nRangees*nColonnes; i++){
    			this.add(cartes[i]);
    			cartes[i].addMouseListener(mouseAdapter);
    		}

  4. #24
    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 : 56
    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
    Billets dans le blog
    2
    Par défaut
    Désolé pour le délai. En plus, j'avais 2 erreurs dans les lignes 3 et 4.

    Je t'ai encodée les règles pour exemple :

    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
    public class Memory extends JPanel {
     
    	public static final int TAILLE_BORDURE=5;
    	public static final int TAILLE_CARTE=128-TAILLE_BORDURE-TAILLE_BORDURE;
    	public static final Color COULEUR_DOS=Color.WHITE;
    	protected static final int DELAY = 2000;
     
    	private static final Color COULEUR_TROUVE = new Color(255,224,0);
     
    	private int nbCoupsTotal; // nombre de clics (y compris quand on retourne une carte visible unique)
    	private int nbCarteRetournee; // nombre de cartes montrées (dont on regarde la couleur)
     
    	public Memory() {
    		List<Carte> cartes = new ArrayList<>(); // la liste des cartes possibles (ici des couleurs)
    		for(Color color : Arrays.asList(Color.BLUE, Color.CYAN, Color.GREEN, Color.MAGENTA, Color.ORANGE, Color.PINK, Color.RED, Color.YELLOW, Color.RED.darker().darker())) {
    			cartes.add(new Carte(color));
    		}
    		List<PanelCarte> panelCartes = new ArrayList<>(); // la liste des cartes composants (en doubles donc)
    		for(Carte carte : cartes) {
    			for(int i=0; i<2; i++) {
    				PanelCarte panelCarte = new PanelCarte(carte);
    				panelCarte.setBorder(BorderFactory.createLineBorder(getBackground(),TAILLE_BORDURE));
    				panelCartes.add(panelCarte);
    			}
    		}
    		Collections.shuffle(panelCartes); // mélange des cartes
    		setLayout(new GridLayout(0,6));
    		MouseAdapter mouseAdapter = new MouseAdapter() {
     
    			private PanelCarte carteVisible; // la carte déjà visible, s'il y'en a une
    			private Timer timer; // le timer pour retourner les cartes au bout d'un délai
     
    			@Override
    			public void mousePressed(MouseEvent e) {
     
    				final PanelCarte panelCarte = (PanelCarte) e.getSource(); // récupération de la carte cliquée
     
    				if ( !panelCarte.estTrouvee() && timer==null ) { // si on clique sur une carte déjà trouvée ou on attend que les 2 cartes non appairées se retournent, on ne fait rien
    					nbCoupsTotal++; // on compte le coup
    					if ( carteVisible==null ) { // s'il n'y a pas de carte déjà visible
    						// if ( !panelCarte.estVisible() ) { // si la carte cliquée n'est pas visible : je l'ai mis en commentaire parce que c'est implicite (si carteVisible==null, forcément on clique sur une carte "invisible"
    							nbCarteRetournee++; // c'est une carte dont on regarde la couleur, on la compte
    							panelCarte.montre(); // on montre la couleur de la carte
    							carteVisible=panelCarte; // on dit que la carte dont on voit la couleur est celle-là
    						// }
    					}
    					else { // s'il y a déjà une carte visible
    						if ( panelCarte.estVisible() ) { // si la carte cliquée est visible, c'est celle là
    							panelCarte.cache(); // on annule en cachant
    						}
    						else {
    							nbCarteRetournee++;
    							panelCarte.montre(); // on montre la nouvelle carte cliquée
    							if ( carteVisible.estLaMemeCarte(panelCarte) ) { // si les couleurs sont les mêmes
    								panelCarte.setTrouvee(); // on dit que la couleur est trouvée (les 2 cartes de la même couleur deviennent trouvées)
    								panelCarte.setBorder(BorderFactory.createLineBorder(COULEUR_TROUVE,TAILLE_BORDURE));
    								carteVisible.setBorder(BorderFactory.createLineBorder(COULEUR_TROUVE,TAILLE_BORDURE));
    							}
    							else {
                                                                    // on va cacher les 2 cartes, mais au bout de 2 seconces
    								final PanelCarte carte1=carteVisible; // la première carte à cacher
    								final PanelCarte carte2=panelCarte; // la seconde carte à cacher
    								timer = new Timer(DELAY, new ActionListener() {
    									public void actionPerformed(java.awt.event.ActionEvent e) {
    										carte1.cache(); // on cache la carte
    										carte2.cache(); // on cache la carte
    										timer=null; // on utilise timer pour savoir qu'il y a un timer en cours (on pourrait aussi prendre un boolean)
    									}
    								});
    								timer.setRepeats(false); // pour que la timer agisse qu'une seule fois
    								timer.start(); // on lance le timer
    							}
    						}
    						carteVisible=null; // la carte actuelle retournée ne compte plus dans tous les cas (soit trouvée, soit bientôt cachée)
    					}
    				}
     
    			}
     
    		};
                    // on ajoute toutes les cartes au plateau et on enregistre l'écouteur de souris sur chacune d'entre-elles
    		for(PanelCarte panelCarte : panelCartes) {
    			add(panelCarte);
    			panelCarte.addMouseListener(mouseAdapter);
    		}
    		setBorder(BorderFactory.createLineBorder(getBackground(), 10));
    	}
     
     
    	public static class PanelCarte extends JPanel {
     
    		private final Carte carte; // la carte affichée
    		private boolean retourne; // indique si la couleur de la carte est visible (retourne==true)
     
    		public PanelCarte(Carte carte) {
    			this.carte=carte;
    			setPreferredSize(new Dimension(TAILLE_CARTE, TAILLE_CARTE));
    			setBackground(COULEUR_DOS);
    		}
     
    		public void setTrouvee() {
    			carte.setTrouvee(true);
    		}
     
    		public boolean estTrouvee() {
    			return carte.estTrouvee();
    		}
     
    		public boolean estVisible() {
    			return retourne;
    		}
     
    		public void montre() {
    			if ( !retourne ) {
    				retourne=true;
    				setBackground(carte.getCouleur());
    			}
    		}
     
    		public void cache() {
    			if ( retourne ) {
    				retourne=false;
    				setBackground(COULEUR_DOS);
    			}
    		}
     
    		public Carte getCarte() {
    			return carte;
    		}
     
    		public boolean estLaMemeCarte(PanelCarte panelCarte) {
    			return panelCarte.getCarte()==getCarte(); // on peut utiliser == parce que c'est la même instance de Carte pour chaque PanelCarte
    		}
     
    	}
     
    	public static class Carte {
     
    		private final Color couleur; // ici c'est une couleur, mais ça peut être n'importe quoi de comparable facilement (un id, un nom de fichier image...)
    		private boolean trouvee;
     
    		public Carte(Color couleur) {
    			this.couleur=couleur;
    		}
     
    		public Color getCouleur() {
    			return couleur;
    		}
     
    		public void setTrouvee(boolean trouvee) {
    			this.trouvee=trouvee;
    		}
     
    		public boolean estTrouvee() {
    			return trouvee;
    		}
     
    	}
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame("Démo");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		frame.add( new Memory() );
     
    		frame.pack();
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    }
    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.

  5. #25
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 45
    Par défaut
    Il n'y a aucun problème,
    un très grand merci pour tout ça,
    j'essaie maintenant d'intégrer mes différents thèmes
    si jamais j'ai d'autres questions je me permettrais de te déranger

  6. #26
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 45
    Par défaut
    re
    est ce que tu sais comment rajouter une horloge pour le temps, et est ce que c'est possible de mettre de l'effet quand on retourne les cartes?
    ce n'est pas vraiment important, mais ça m’intéresserait de savoir
    merci d'avance

  7. #27
    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 : 56
    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
    Billets dans le blog
    2
    Par défaut
    Oui, bien sûr, c'est possible.

    Pour l'horloge, il faut utiliser un timer spécifique qui met à jour toutes les secondes l'affichage.

    Pour l'effet, il faut voir quel type d'effet : je suppose que tu parles de toute manière d'animation, donc de timer aussi. Ensuite selon l'effet, on peut faire par exemple un simple stretch 2D, qui sera assez simple à faire (voir AffineTransform, scale). Toutefois, lorsqu'on commence à vouloir faire des animations d'images, il faut envisager de passer à Java2D au lieu d'utiliser l'affichage via JLabel/ImageIcon.
    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.

  8. #28
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 45
    Par défaut
    ok merci, je laisse tomber l'animation, sinon pour l'horloge, as tu un lien ou je peux comprendre ça (timer spécifique)
    Cependant j'ai une dernière question:
    Je manipule les cartes sous forme de tableaux Carte[] et je viens de m'apperçevoir que ma méthode melangeCartes n'a aucun effet, j'ai essayé donc de convertir le tableau en list comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<Carte> list = Arrays.asList(cartes);
    mais ça me donne l'erreur: the type List is not generic: it cannot be parameterized with arguments <Carte>

    sinon voici ma fonction mélangeCartes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public static void melangeCartes(Carte[] cartes){
    		int n = cartes.length;
    		Carte temp ;
    		for(int i=n-1;i>=2;i--){
    			Random rand = new Random();
    			int j = rand.nextInt(i);
    			temp = cartes[i];
    			cartes[i] = cartes[j];
    			cartes[j] = temp;
    		}
    	}

  9. #29
    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 : 56
    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
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par momo-mtl Voir le message
    ok merci, je laisse tomber l'animation, sinon pour l'horloge, as tu un lien ou je peux comprendre ça (timer spécifique)
    Non, pas de lien spécifique, mais c'est tout simple. Je te ferais un exemple plus tard.


    Citation Envoyé par momo-mtl Voir le message
    Cependant j'ai une dernière question:
    Je manipule les cartes sous forme de tableaux Carte[] et je viens de m'apperçevoir que ma méthode melangeCartes n'a aucun effet, j'ai essayé donc de convertir le tableau en list comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<Carte> list = Arrays.asList(cartes);
    mais ça me donne l'erreur: the type List is not generic: it cannot be parameterized with arguments <Carte>
    ça c'est probablement parce que tu as importé java.awt.List au lieu de java.util.List.


    Citation Envoyé par momo-mtl Voir le message
    sinon voici ma fonction mélangeCartes
    mmm, c'est bien compliqué, ça devrait mélanger plus ou moins à priori.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public static void melangeCartes(Carte[] cartes){
    		int n = cartes.length;
    		Carte temp ;
    		for(int i=n-1;i>=2;i--){ // pourquoi ne pas traiter i=0 et i=1?
    			Random rand = new Random(); // tu peux sortir ça de la boucle (il vaut mieux d'ailleurs pour avoir une bonne répartition équiprobable je pense)
    			int j = rand.nextInt(i);  
    			temp = cartes[i]; 
    			cartes[i] = cartes[j];
    			cartes[j] = temp;
    		}  
    	}
    A mon avis, le problème est dans l'appel. Mais avec une List, un shuffle sera plus simple et efficaces.
    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.

  10. #30
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 45
    Par défaut
    Je crois aussi que le problème est dans l'appel parce même avec shuffle ça ne marche pas
    en fait ce que je fait est le suivant:
    quand la partie est fini j'affiche une boite de dialogue qui donne le nombre de coups et trois choix "Réessayer la même grille", "Recommencer une autre" ou "Quitter"
    et c'est la que j'appelle la méthode pour mélanger càd dans le mouseClicked{} et je ne pense pas que c'est la bonne façon
    et d'ailleurs je ne sais pas aussi comment recommencer une autre partie en choisissant d'autres cartes
    j'en demande trop, je suis désolé

  11. #31
    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 : 56
    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
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par momo-mtl Voir le message
    Je crois aussi que le problème est dans l'appel parce même avec shuffle ça ne marche pas
    Montre-moi le code.

    Citation Envoyé par momo-mtl Voir le message
    en fait ce que je fait est le suivant:
    quand la partie est fini j'affiche une boite de dialogue qui donne le nombre de coups et trois choix "Réessayer la même grille", "Recommencer une autre" ou "Quitter"
    et c'est la que j'appelle la méthode pour mélanger càd dans le mouseClicked{} et je ne pense pas que c'est la bonne façon
    Faut voir, mais je dirais que le meilleur endroit c'est plutôt au début de la partie. Il faut imaginer le cycle de vie de l'application comme ça :
    1. Démarrer partie
      • choisir/créer jeu de cartes
      • mélanger cartes
      • afficher les cartes
      • tant que toutes les cartes ne sont pas trouvées (ou qu'on a pas atteint le nombre maximal de coup si on veut)
        1. jouer
      • fin tant que
    2. demander si "on veut rejouer" ou "quitter" : si on veut rejouer recommencer en 1


    Par exemple, si on prend mon exemple Memory, on peut déplacer le code qu'il y a dans le constructeur dans une méthode démarrer, ce qui permet de redémarrer le jeu.

    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
    217
    218
    219
    220
    public class Memory extends JPanel {
     
    	public static final int TAILLE_BORDURE=5;
    	public static final int TAILLE_CARTE=128-TAILLE_BORDURE-TAILLE_BORDURE;
    	public static final Color COULEUR_DOS=Color.WHITE;
    	protected static final int DELAY = 2000;
    	private int nbCoupsTotal;
    	private int nbCarteRetournee;
     
    	private static final Color COULEUR_TROUVE = new Color(255,224,0);
     
    	public Memory() {
    		start();
    	}
     
    	private void restart() {
    		reset();
    		start();
    		revalidate();
    		repaint();
    	}
     
    	private void reset() {
     
    		removeAll();
    		nbCoupsTotal = 0;
    		nbCarteRetournee=0;
     
    	}
     
    	private void start() {
     
     
    		List<Carte> cartes = new ArrayList<>();
    		for(Color color : Arrays.asList(Color.BLUE, Color.CYAN, Color.GREEN, Color.MAGENTA, Color.ORANGE, Color.PINK, Color.RED, Color.YELLOW, Color.RED.darker().darker())) {
    			cartes.add(new Carte(color));
    		}
    		List<PanelCarte> panelCartes = new ArrayList<>();
    		for(Carte carte : cartes) {
    			for(int i=0; i<2; i++) {
    				PanelCarte panelCarte = new PanelCarte(carte);
    				panelCarte.setBorder(BorderFactory.createLineBorder(getBackground(),TAILLE_BORDURE));
    				panelCartes.add(panelCarte);
    			}
    		}
    		Collections.shuffle(panelCartes);
    		setLayout(new GridLayout(0,6));
    		MouseAdapter mouseAdapter = new MouseAdapter() {
     
    			private PanelCarte carteVisible;
    			private Timer timer;
     
    			@Override
    			public void mousePressed(MouseEvent e) {
     
    				final PanelCarte panelCarte = (PanelCarte) e.getSource();
     
    				if ( !panelCarte.estTrouvee() && timer==null ) {
    					nbCoupsTotal++;
    					if ( carteVisible==null ) {
    						//if ( !panelCarte.estVisible() ) {
    							nbCarteRetournee++;
    							panelCarte.montre();
    							carteVisible=panelCarte;
    						//}
    					}
    					else {
    						if ( panelCarte.estVisible() ) {
    							panelCarte.cache();
    						}
    						else {
    							nbCarteRetournee++;
    							panelCarte.montre();
    							if ( carteVisible.estLaMemeCarte(panelCarte) ) {
    								panelCarte.setTrouvee();
    								panelCarte.setBorder(BorderFactory.createLineBorder(COULEUR_TROUVE,TAILLE_BORDURE));
    								carteVisible.setBorder(BorderFactory.createLineBorder(COULEUR_TROUVE,TAILLE_BORDURE));
    								testSiPartieTerminee(cartes);
    							}
    							else {
    								final PanelCarte carte1=carteVisible;
    								final PanelCarte carte2=panelCarte;
    								timer = new Timer(DELAY, new ActionListener() {
    									public void actionPerformed(java.awt.event.ActionEvent e) {
    										carte1.cache();
    										carte2.cache();
    										timer=null;
    									}
    								});
    								timer.setRepeats(false);
    								timer.start();
    							}
    						}
    						carteVisible=null;
    					}
    				}
     
    			}
     
    		};
    		for(PanelCarte panelCarte : panelCartes) {
    			add(panelCarte);
    			panelCarte.addMouseListener(mouseAdapter);
    		}
    		setBorder(BorderFactory.createLineBorder(getBackground(), 10));
     
    	}
     
    	private void testSiPartieTerminee(List<Carte> cartes) {
    		boolean touteTrouvee=true;
    		for(Carte carte : cartes) {
    			if ( !carte.estTrouvee() ) {
    				touteTrouvee=false;
    				break;
    			}
    		}
    		if ( touteTrouvee ) {
    			switch( JOptionPane.showOptionDialog(this, 
    					"Vous avez trouvé toutes les cartes !!! Bravo !!!", 
    					"Fin de partie",
    					JOptionPane.YES_NO_OPTION,
    					JOptionPane.INFORMATION_MESSAGE,
    					null,
    					new Object[]{"Recommencez","Quitter"},
    					"Recommencez" )
    					) {
    				case JOptionPane.YES_OPTION:
    					restart();
    					break;
    				case JOptionPane.NO_OPTION:
    					SwingUtilities.getWindowAncestor(this).dispose();
    					break;
    			}
    		}
    	}
     
    	public static class PanelCarte extends JPanel {
     
    		private final Carte carte;
    		private boolean retourne;
     
    		public PanelCarte(Carte carte) {
    			this.carte=carte;
    			setPreferredSize(new Dimension(TAILLE_CARTE, TAILLE_CARTE));
    			setBackground(COULEUR_DOS);
    		}
     
    		public void setTrouvee() {
    			carte.setTrouvee(true);
    		}
     
    		public boolean estTrouvee() {
    			return carte.estTrouvee();
    		}
     
    		public boolean estVisible() {
    			return retourne;
    		}
     
    		public void montre() {
    			if ( !retourne ) {
    				retourne=true;
    				setBackground(carte.getCouleur());
    			}
    		}
     
    		public void cache() {
    			if ( retourne ) {
    				retourne=false;
    				setBackground(COULEUR_DOS);
    			}
    		}
     
    		public Carte getCarte() {
    			return carte;
    		}
     
    		public boolean estLaMemeCarte(PanelCarte panelCarte) {
    			return panelCarte.getCarte()==getCarte();
    		}
     
    	}
     
    	public static class Carte {
     
    		private final Color couleur;
    		private boolean trouvee;
     
    		public Carte(Color couleur) {
    			this.couleur=couleur;
    		}
     
    		public Color getCouleur() {
    			return couleur;
    		}
     
    		public void setTrouvee(boolean trouvee) {
    			this.trouvee=trouvee;
    		}
     
    		public boolean estTrouvee() {
    			return trouvee;
    		}
     
    	}
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame("Démo");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		frame.add( new Memory() );
     
    		frame.pack();
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    }
    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.

  12. #32
    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 : 56
    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
    Billets dans le blog
    2
    Par défaut
    Une horloge (digitale) :
    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
    public class Horloge extends JPanel{
     
    	private final JLabel jlabel;
    	private Timer timer;
    	private static final String DEFAULT_DISPLAY ="XX:XX:XX";
     
    	public Horloge() {
    		jlabel = new JLabel(DEFAULT_DISPLAY , JLabel.CENTER);
    		add(jlabel);
    	}
     
    	public void start() {
    		if ( timer==null ) {
    			timer = new Timer(1000, e-> updateTime());
    			timer.start();
    			updateTime();
    		}
    	}
     
    	public void stop() {
    		if ( timer!=null ) {
    			timer.stop();
    			jlabel.setText(DEFAULT_DISPLAY);
    			timer=null;
    		}
    	}
     
    	private void updateTime() {
    		jlabel.setText(DateTimeFormatter.ofPattern("HH:mm:ss").format(LocalTime.now()));
    		revalidate();
    		repaint();
    	}
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame("Démo");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		Horloge horloge = new Horloge();
    		frame.add( horloge );
     
    		JPanel buttonPanel = new JPanel();
     
    		JButton buttonStart = new JButton("Start");
    		JButton buttonStop = new JButton("Stop");
     
    		buttonStart.addActionListener(e-> start(horloge, buttonStart, buttonStop));
    		buttonStop.addActionListener(e-> stop(horloge, buttonStart, buttonStop));
     
    		buttonPanel.add( buttonStart );
    		buttonPanel.add( buttonStop );
     
    		frame.add(buttonPanel, BorderLayout.SOUTH);
    		frame.addWindowListener(new WindowAdapter() {
    			public void windowClosed(java.awt.event.WindowEvent e) {
    				horloge.stop();
    			};
    		});
     
    		frame.pack();
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    		buttonStart.setEnabled(false);
    		horloge.start();
     
    	}
     
    	private static void start(Horloge horloge, JButton buttonStart,
    			JButton buttonStop) {
    		horloge.start();
    		buttonStart.setEnabled(false);
    		buttonStop.setEnabled(true);
    	}
     
    	private static void stop(Horloge horloge, JButton buttonStart,
    			JButton buttonStop) {
    		horloge.stop();
    		buttonStart.setEnabled(true);
    		buttonStop.setEnabled(false);
    	}
     
     
    }
    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.

  13. #33
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 45
    Par défaut
    merci pour ta disponibilité et ta réponse rapide,
    en fait, je me suis mal exprimé, ce que je voulais c'est juste une sorte de chrono, que je peux intégrer à mon PannelCartes, qui démarre avec la partie et s’arrête à la fin pour savoir combien on a mis de temps pour trouver toutes les paires

    Sinon voici le bout de code pour melangeCartes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if (nbPaires==nRangees*nColonnes/2){
    								horloge.stop();
    								int choix = JOptionPane.showOptionDialog(null,"Bravo, vous avez réussi en "+nbCoups+" coups ",	"Fin de la partie",
    											JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE,null,new String[]{"Réessayer", "Quitter"},"default");
    								if(choix == JOptionPane.OK_OPTION){
    									for(int i =0;i<nRangees*nColonnes; i++){
    										cartes[i].retourne();
    									}
    									Carte.melangeCartes(cartes);
    									nbPaires = 0;
    									nbCoups = 0;
    								}
     
    								}

  14. #34
    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 : 56
    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
    Billets dans le blog
    2
    Par défaut
    Tu ne me montre que l'appel : je ne peux en déduire que ça devrait fonctionner et le problème est peut-être que tu créés un nouveau tableau non trié de cartes au début de la nouvelle partie.

    Pour le chronomètre :
    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
    public class Chrono extends JPanel{
     
    	private final static DateTimeFormatter HHMMSS_FORMAT = DateTimeFormatter.ofPattern("HH:mm:ss");
    	public final static Function<Duration,String> FORMAT_HH_MM_SS = duration-> HHMMSS_FORMAT.format(LocalTime.ofNanoOfDay(duration.toNanos()));
    	public final static Function<Duration,String> FORMAT_SEC = duration-> String.valueOf(duration.getSeconds());
     
    	private JLabel jlabel;
    	private Timer timer;
    	private String DEFAULT_DISPLAY ="        ";
    	private Instant startTime;
    	private Instant endTime;
    	private Function<Duration, String> format;
     
    	public Chrono() {
    		this(FORMAT_HH_MM_SS);
    	}
     
    	public Chrono(Function<Duration,String> format) {
    		this.format = Objects.requireNonNull(format);
    		jlabel = new JLabel(DEFAULT_DISPLAY , JLabel.CENTER);
    		add(jlabel);
    	}
     
    	public void setFormat(Function<Duration,String> format) {
    		this.format = Objects.requireNonNull(format);
    		repaint();
    	}
     
    	public Function<Duration, String> getFormat() {
    		return format;
    	}
     
    	public void start() {
    		if ( timer==null ) {
    			timer = new Timer(1000, e-> updateTime());
    			startTime = Instant.now();
    			endTime = Instant.now();
    			timer.start();
    			updateTime();
    		}
    	}
     
    	public void stop() {
    		if ( timer!=null ) {
    			endTime = Instant.now();
    			timer.stop();
    			timer=null;
    		}
    	}
     
    	public Duration getDuration() {
    		if ( startTime==null ) {
    			Instant now=Instant.now();
    			return Duration.between(now, now);
    		}
    		return Duration.between(startTime, endTime);
    	}
     
    	private void updateTime() {
    		endTime = Instant.now();
    		final Duration duration = Duration.between(startTime, endTime);
    		jlabel.setText(format.apply(duration));
    		revalidate();
    		repaint();
    	}
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame("Démo");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		Chrono[] chronos = new Chrono[]{
    			new Chrono(),
    			new Chrono(Chrono.FORMAT_SEC),
    			new Chrono(duration-> {
    				final long s = duration.getSeconds();
    				return String.format("%02d:%02d", s / 60, s % 60);
    			}),
    			new Chrono(duration-> String.format("%d sec", duration.getSeconds()))
    		};
    		JPanel chronoPanel = new JPanel(new GridLayout(0,1));
    		for(Chrono chrono : chronos) {
    			chronoPanel.add(chrono);
    		}
     
    		frame.add( chronoPanel );
     
    		JPanel buttonPanel = new JPanel();
     
    		JButton buttonStart = new JButton("Start");
    		JButton buttonStop = new JButton("Stop");
     
    		buttonStart.addActionListener(e-> start(chronos, buttonStart, buttonStop));
    		buttonStop.addActionListener(e-> stop(chronos, buttonStart, buttonStop));
     
    		buttonPanel.add( buttonStart );
    		buttonPanel.add( buttonStop );
     
    		frame.add(buttonPanel, BorderLayout.SOUTH);
    		frame.addWindowListener(new WindowAdapter() {
    			public void windowClosed(java.awt.event.WindowEvent e) {
    				stop(chronos);
    			};
    		});
     
    		frame.pack();
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    		buttonStart.setEnabled(false);
    		start(chronos);
     
    	}
     
    	private static void start(Chrono[] chronos) {
    		for(Chrono chrono : chronos) chrono.start();
    	}
    	private static void stop(Chrono[] chronos) {
    		for(Chrono chrono : chronos) chrono.stop();
    	}
     
    	private static void start(Chrono[] chronos, JButton buttonStart,
    			JButton buttonStop) {
    		start(chronos);
    		buttonStart.setEnabled(false);
    		buttonStop.setEnabled(true);
    	}
     
    	private static void stop(Chrono[] chronos, JButton buttonStart,
    			JButton buttonStop) {
    		stop(chronos);
    		buttonStart.setEnabled(true);
    		buttonStop.setEnabled(false);
    	}
     
     
    }
    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.

  15. #35
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 45
    Par défaut
    C'est parce que je n'appelle pas une nouvelle partie, je veux recommencer avec la même grille mélangée
    et comme mon constructeur prend 5 paramètres(cRangees, nColonnes , cartes, delai1 delai2) je n'ai pas pu mettre les méthodes start() restart()....
    Je décide donc de le laisser comme ça pour le moment (réessayer la même grille non mélangée ou quitter) et j'arrête de te déranger.
    merci beaucoup pour le chono, je vais essayer de comprendre le principe
    bonne journée

  16. #36
    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 : 56
    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
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par momo-mtl Voir le message
    C'est parce que je n'appelle pas une nouvelle partie, je veux recommencer avec la même grille mélangée
    Ah, bah, dans ce cas, il faut retirer toutes les PanelCarte (removeAll()), et les remettre par rapport à l'ordre qu'il y a dans le tableau.

    Dans mon exemple, il y a :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    List<Carte> cartes = new ArrayList<>();
    		for(Color color : Arrays.asList(Color.BLUE, Color.CYAN, Color.GREEN, Color.MAGENTA, Color.ORANGE, Color.PINK, Color.RED, Color.YELLOW, Color.RED.darker().darker())) {
    			cartes.add(new Carte(color));
    		}
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    		List<PanelCarte> panelCartes = new ArrayList<>();
    		for(Carte carte : cartes) {
    			for(int i=0; i<2; i++) {
    				PanelCarte panelCarte = new PanelCarte(carte);
    				panelCarte.setBorder(BorderFactory.createLineBorder(getBackground(),TAILLE_BORDURE));
    				panelCartes.add(panelCarte);
    			}
    		}
    		Collections.shuffle(panelCartes);
    Et plus loin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for(PanelCarte panelCarte : panelCartes) {
    			add(panelCarte);
    			panelCarte.addMouseListener(mouseAdapter);
    		}
    • Le premier code set à générer le jeu de cartes (une seule de chaque couleur) (les modèle des cartes, rapport au MVC) ;
    • Le deuxième génère une paire de panels (les versions "graphiques" des cartes, les vues par rapport au MVC) à partir de ce jeu et les mets dans une liste, que je mélange (avec le shuffle) ;
    • Le troisième met ces composants dans le panel avec GridLayout (la grille), et y attache le MouseAdapter (le contrôleur par rapport au MVC) ;


    Imagine qu'on en fasse 3 méthodes :

    • creerTypeDeCartes
    • creerJeuDeCartes
    • poserCartesSurPlateau


    Dans mon code, on fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    List<Carte> cartes = creerTypeDeCartes();
    List<PanelCarte> panelCartes = creerJeuDeCartes(cartes);
    poserCartesSurPlateau(panelCartes, mouseAdapter);
    Si on fait une méthode placerCartes() qui fait les 2 dernières lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    List<Carte> cartes = creerTypeDeCartes();
    placerCartes(cartes , mouseAdapter);
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private void placerCartes(List<Carte> cartes, MouseAdapter mouseAdapter) {
          List<PanelCarte> panelCartes = creerJeuDeCartes(cartes);
           poserCartesSurPlateau(panelCartes, mouseAdapter);
    }

    Et bien, une méthode qui mélangerait les cartes posées (les panels donc (les vues)) serait tout simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private void replacerCartes(List<Carte> cartes, MouseAdapter mouseAdapter, boolean recommencer) {
         removeAll(); // supprimer tous les panels cartes déjà présents dans le plateau
         if ( recommencer ) {
            resetCartes(); // une méthode qu'il faut faire pour remettre toutes les cartes de la liste non visible, et non trouvée, si on veut pouvoir recommencer le jeu à zéro (il faut aussi remettre à jour les compteurs de coups...).
         }
         placeCartes(cartes, mouseAdapter);
    }
    Pour éviter d'avoir à passer les 2 paramètres, on peut les mettre attributs de classe (Memory).

    Si en plus, on veut régénérer un nouveau jeu de carte (mettons qu'on choisisse dans une liste différents jeux avec différentes images, ou couleurs) : il suffit de modifier cartes, et de rappeler replacerCartes().
    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.

  17. #37
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 45
    Par défaut
    Ok parfait, merci beaucoup

  18. #38
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 45
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Tu ne me montre que l'appel : je ne peux en déduire que ça devrait fonctionner et le problème est peut-être que tu créés un nouveau tableau non trié de cartes au début de la nouvelle partie.

    Pour le chronomètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class Chrono extends JPanel{
     
    	private final static DateTimeFormatter HHMMSS_FORMAT = DateTimeFormatter.ofPattern("HH:mm:ss");
    	public final static Function<Duration,String> FORMAT_HH_MM_SS = duration-> HHMMSS_FORMAT.format(LocalTime.ofNanoOfDay(duration.toNanos()));
    	public final static Function<Duration,String> FORMAT_SEC = duration-> String.valueOf(duration.getSeconds());
    Je n'arrive pas à exécuter le code, il me donne erreur au niveau de la 4ème ligne LocalTime cannot be resolved et pourtant j'ai importé tous les packages necéssaires

  19. #39
    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 : 56
    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
    Billets dans le blog
    2
    Par défaut
    A priori, tu n'as pas fait tous les imports :
    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
    import java.awt.BorderLayout;
    import java.awt.GridLayout;
    import java.awt.event.WindowAdapter;
    import java.time.Duration;
    import java.time.Instant;
    import java.time.LocalTime;
    import java.time.format.DateTimeFormatter;
    import java.util.Objects;
    import java.util.function.Function;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.Timer;
    tu es bien sous Java 8 ?
    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.

  20. #40
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 45
    Par défaut
    oui oui
    c'est bon ça marche maintenant, merci encore

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Boot mais n'affiche rien
    Par log2n dans le forum Assembleur
    Réponses: 28
    Dernier message: 03/11/2005, 22h16
  2. Mon programme n'affiche rien!!!!
    Par matthieu5978 dans le forum Langage
    Réponses: 1
    Dernier message: 03/11/2005, 12h28
  3. pourquoi mon quickreport n'affiche rien ?
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 8
    Dernier message: 31/07/2005, 01h59
  4. [LG]Programme qui n'affiche rien
    Par ousunas dans le forum Langage
    Réponses: 4
    Dernier message: 17/02/2004, 20h38
  5. Opengl n'affiche rien.
    Par Fugus02 dans le forum OpenGL
    Réponses: 4
    Dernier message: 06/01/2004, 16h41

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