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 :

Echiquier en Java


Sujet :

avec Java

  1. #21
    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
    ce code sert à remettre à zéro l'état couppossible pour que les cases vertes redeviennent noires ou blanches
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for (int ligne = 0; ligne < 8; ligne++) {
    		   for (int colonne = 0; colonne < 8; colonne++) {
    		      tab[colonne][ligne].setCoupPossible(false);
    		   }
    		}
    il faut le mettre quand un coup est joué, lorsque tu déplaces ta pièce

    dans ton code, tu as mis le commentaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //je cree un deplacement
    ce qui indique l'endroit à priori ou tu gères le déplacement
    donc c'est ici que tu dois mettre la remise à zéro des cases vertes

    pour afficher une case en rouge, c'est comme pour la mettre en vert
    sauf que maintenant tu as 3 états différents à gérer
    - case normal (noir ou blanche)
    - case vert (mouvement possible du joueur)
    - case rouge (mouvement possible avec prise d'un pion)

    tu peux gérer ça avec un second booleen, ou avec une variable de type entier, ou encore mieux avec une énumération, ce qui te permettra de gérer d'autres couleurs pour d'autres conditions
    pour déclarer une enumération, tu fais un peu comme pour une classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public enum CoupPossible {
         mouvement,
         prisepion
    }
    ta variable membre de la classe Case passe de boolean à CoupPossible

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class Case extends JLabel {
     
        ...
        private CoupPossible couppossible;
     
    }
    la méthode pour décider de la couleur va changer :

    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
    private void setCouleur() {
    		if ( couppossible!=null )
                  switch(couppossible) {
                      case mouvement:
    			setBackground(new Color(0, 240, 0)); //couleur d'un coup possible : vert
                            break;
                      case prisepion:
    			setBackground(new Color(255, 0, 0)); //couleur d'un coup possible avec prise de pion : rouge
                            break;
                      }
    		else if (blanc)
    			setBackground(new Color(255, 255, 255)); //couleur des cases : blanc
    		else
    			setBackground(new Color(153, 153, 153)); //couleur des cases : noir
    	}
    et la méthode setCoupPossible change aussi du coup :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void setCoupPossible(CoupPossible couppossible) {
        this.couppossible=couppossible;
        setCouleur();
    }
    évidemment l'appel de setCoupPossible va changer également

    au lieu de

    pour remettre à zéro il faudra faire

    c'est à dire pas de valeur particuliè_re pour couppossible, donc affichage de la couleur normale de la case

    et à la place de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setCoupPossible(<la codition que tu as mise si un déplacemnt est valide>)
    par un code détaille du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    si le déplacement est possible {
    si la case d'arrivée contient un pion
    alors setCoupPossible(CoupPossible.prisedepion);
    sinon setCoupPossible(CoupPossible.mouvement);
    }
    sinon setCoupPossible(null)

    maintenant pour ton problème de case verte occupée c'est exactement la même chose :
    fais évoluer ta condition "déplacement possible" en "déplacement possible et case innocupée");

    du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    si le déplacement est possible {
    si la case d'arrivée contient un pion
    alors setCoupPossible(CoupPossible.prisedepion);
    sinon {
    si la case pos est innocupée setCoupPossible(CoupPossible.mouvement);
    sinon setCoupPossible( ce que tu veux );
    }
    }
    sinon setCoupPossible(null)
    le "ce que tu veux" dans le code, c'est null si tu veux que la case reste dans sa couleur normal, ou CoupPossible.prisepio si tu veux qu'elle s'affiche en rouge, ou une nouvelle valeur que tu ajoutes à ton énumération si tu veux qu'elle s'affiche dans une autre couleur

    tu peux par exemple définir une valeur roque qui s'affiche en jaune pour indiquée qu'un roque est possible

    il suffit pour ça que tu ajoutes une nouvelle valeur à ton énumération CoupPossible et que tu modifies ta méthode setCouleur() pour que cette nouvelle valeur soit prise en compte dans le switch

    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public enum CoupPossible {
         mouvement,
         prisepion,
         roque
    }
    et
    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
    private void setCouleur() {
    		if ( couppossible!=null )
                  switch(couppossible) {
                      case mouvement:
    			setBackground(new Color(0, 240, 0)); //couleur d'un coup possible : vert
                            break;
                      case prisepion:
    			setBackground(new Color(255, 0, 0)); //couleur d'un coup possible avec prise de pion : rouge
                            break;
                      case roque:
    			setBackground(new Color(247, 255, 60)); //couleur d'un roque possible : jaune
                            break;
                    }
    		else if (blanc)
    			setBackground(new Color(255, 255, 255)); //couleur des cases : blanc
    		else
    			setBackground(new Color(153, 153, 153)); //couleur des cases : noir
    	}
    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.

  2. #22
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 139
    Par défaut
    Merci
    J'ai une erreur au niveau de setCouleur d'après le switch ..



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		if ((colonne + 1) % 2 == a)
    					tab[colonne][ligne].setCouleur(true); //couleur des cases : blanc
    				else
    					tab[colonne][ligne].setCouleur(false); //couleur des cases : noir

  3. #23
    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
    le setCouleur(booelan) n'est pas concerné par le switch

    le switch est dans la méthode privée setCouleur() sans arguments

    tu ne dois pas avoir modifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void setCouleur(boolean blanc) {
        this.blanc=blanc;
        setCouleur();
    }
    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.

  4. #24
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 139
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    setCoupPossible(<la codition que tu as mise si un déplacemnt est valide>)
    par un code détaille du type

    si le déplacement est possible {
    si la case d'arrivée contient un pion
    alors setCoupPossible(CoupPossible.prisedepion);
    sinon setCoupPossible(CoupPossible.mouvement);
    }
    sinon setCoupPossible(null)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if (pieceTampon.estValide(deplacement)){
          if(e.captureParUnPionPossible(deplacement)){
                setCoupPossible(CoupPossible.prisedepion);}
          else{
              setCoupPossible(CoupPossible.mouvement);}
    }
    else{
         setCoupPossible(null)
     
    }
    Est-ce bon ?

    Merci

  5. #25
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 139
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    le setCouleur(booelan) n'est pas concerné par le switch

    le switch est dans la méthode privée setCouleur() sans arguments

    tu ne dois pas avoir modifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void setCouleur(boolean blanc) {
        this.blanc=blanc;
        setCouleur();
    }
    Je l'avais supprimé sans faire attention, merci !

  6. #26
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 139
    Par défaut
    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
    public void mouseClicked(MouseEvent eve) {
    			// si on clique sur le bouton débuter
    			if (eve.getSource() == boutonDebuter) {
    				//initialise le champ texte, apelle la methode debuter, et initialise toute les variables 
    				champTexte.setText("blanc a vous de jouer");
                    champTexte.setEnabled(false);
    				boutonDebuter.setEnabled(false);
    				e.debuter(); // appel
    				String dossierIcone = "Icone/";
    				char[] ordrePiece = { 'T', 'C', 'F', 'D', 'R', 'F', 'C', 'T' };
    				int increment = 1;
    				int ligne = 0;
    				char couleur = 'N';
    				Piece tempo = null;
    				e.debuter(); // appel
    
    				// Je place les icones des pieces sur leur cases respectives
    				while (increment >= -1) {
    					for (int ctr = 0; ctr <= 7; ctr++) {
    						tab[ctr][ligne].setIcon(new ImageIcon(dossierIcone + ordrePiece[ctr] + couleur + ".gif"));
    						switch(ordrePiece[ctr])
    						{
    						case 'T':
    							tempo = new Tour(ligne < 5 ? "noir" : "blanc");
    						break;
    						
    						case 'C':
    							tempo = new Cavalier(ligne < 5 ? "noir " : "blanc");
    						break;
    						
    						case 'F':
    							tempo = new Fou(ligne < 5 ? "noir" : "blanc");
    						break;
    						
    						case 'D':
    							tempo = new Reine(ligne < 5 ? "noir" : "blanc");
    						break;
    						
    						case 'R':
    							tempo = new Roi(ligne < 5 ? "noir" : "blanc");
    						break;
    						}
    						e.getCase(ctr, ligne).setPiece(tempo);
    						tab[ctr][ligne + increment].setIcon(new ImageIcon(dossierIcone + 'P' + couleur + ".gif"));
    						e.getCase(ctr, ligne + increment).setPiece(new Pion(ligne < 5 ? "noir" : "blanc"));
    
    					}
    					couleur = 'B';
    					increment -= 2;
    					ligne = 7;
    				}
    
    			}
    			// si on clique sur le bouton recommencer
    			else if (eve.getSource() == boutonfin) {
    				//on appel la methode RAZ
    				RAZ();
    
    				
    			}
    
    			else if (eve.getSource() instanceof JLabel) // donc on a cliqué sur un Label
    			{
    				for (int i = 0; i < 8; i++)
    					//on determine sur quel Jlabel on a clique
    					for (int j = 0; j < 8; j++) 
    						if (eve.getSource() == tab[j][i]) {
    							ligneClic = i;
    							colonneClic = j;
    						}
    					//si on a clique sur une case non vide et que le tampon n'est pas null
    					if((e.getCase(colonneClic, ligneClic).getPiece() != null | pieceTampon != null) )
    					{
    						//si le tampon est null
    						if(pieceTampon == null )
    						{
    							//si c'est au tour de la couleur de controle a jouer
    							if(e.getCase(colonneClic, ligneClic).getPiece().getCouleur().equals(couleurControle)){
    								//J'initialise la piece tampon a la piece sur laquelle on a clique
    								pieceTampon = e.getCase(colonneClic, ligneClic).getPiece();
    								iconeTampon = (ImageIcon)tab[colonneClic][ligneClic].getIcon();
    								temp = new Position(colonneClic,ligneClic);
    								tab[colonneClic][ligneClic].setBorder(BorderFactory.createLineBorder(new Color(255,0 ,0),5));
    								for (int ligne = 0; ligne < 8; ligne++) {
    								     for (int colonne = 0; colonne < 8; colonne++) {
    								        Position pos = new Position(colonne,ligne);
    								        Deplacement deplacement=new Deplacement(temp,pos);
    								        tab[colonne][ligne].setCoupPossible(pieceTampon.estValide(deplacement));								    }
    								}	
    							}
    							
    						}
    						else
    						{
    							//je cree un deplacement
    							for (int ligne = 0; ligne < 8; ligne++) {
    								   for (int colonne = 0; colonne < 8; colonne++) {
    								      tab[colonne][ligne].setCoupPossible(null);
    								   }
    							}
    							Deplacement deplacement = new Deplacement(temp, new Position(colonneClic,ligneClic));
    							//je verifie si le deplacement est valide, si le chemin est possible et si il est possible, pour un pion de manger la piece
    							if ((pieceTampon.estValide(deplacement) && e.cheminPossible(deplacement)) | e.captureParUnPionPossible(deplacement))
    							{
    								//je cree un jLabel avec l'icone de la piece manger
    								JLabel manger = new JLabel(tab[colonneClic][ligneClic].getIcon());
    								manger.setHorizontalAlignment(SwingConstants.CENTER);
    								
    								//je l'ajoute au bon jPanel
    								if (couleurControle.equals("blanc"))
    									panelblanc.add(manger);
    								else		
    									panelnoir.add(manger);
    								
    								// je verifie si la piece manger est un roi, si oui le jeu est termine et l'utilisateur peut choisir si il veut continuer a jouer ou non
    								if(e.getCase(colonneClic, ligneClic).getPiece() instanceof Roi)
    								{
    									if(JOptionPane.showConfirmDialog(null, "Felicitation vous avez gagne ! Desirez-vous jouer de nouveau ?\n", "Victoire !!!", JOptionPane.YES_NO_OPTION) == 0){
    										RAZ();
    										tab[temp.getColonne()][temp.getLigne()].setBorder(BorderFactory.createLineBorder(new Color(0, 0, 0),0)); // j'enleve le cadre rouge de la piece selectionne
    									}
    
    									else
    										System.exit(0);
    
    								}
    								else//si on depose la piece sur une case vide
    								{
    									//on met le tampon sur la case vide et on vide le tampon apres
    									e.getCase(temp.getColonne(), temp.getLigne()).setPiece(null);
    									tab[temp.getColonne()][temp.getLigne()].setBorder(BorderFactory.createLineBorder(new Color(0, 0, 0),0)); // j'enleve le cadre rouge de la piece selectionne
    									tab[colonneClic][ligneClic].setIcon(iconeTampon);
    									e.getCase(colonneClic, ligneClic).setPiece(pieceTampon); // pour pouvoir le rebouger plusieurs fois dans une partie
    									tab[temp.getColonne()][temp.getLigne()].setIcon(null); // permet de faire bouger la piece selectionne en supprimant la piece bouger de sa position initiale 
    
    	
    									pieceTampon = null;
    									iconeTampon = null;
    									temp = null;
    	
    									couleurControle = couleurControle.equals("blanc") ? "noir" : "blanc";
    									champTexte.setText(couleurControle + " , a vous de jouer");
                                        		
    								}
    							}
    							else
    							{
    								tab[temp.getColonne()][temp.getLigne()].setBorder(BorderFactory.createLineBorder(new Color(255, 0, 0),0));
    								pieceTampon = null;
    								iconeTampon = null;
    								temp = null;
    
    							}
    						
    						}
    
    					}
    				
    					
    				}

    A la place de l'ecriture en rouge, je dois mettre cela ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if (pieceTampon.estValide(deplacement)){
          if(e.captureParUnPionPossible(deplacement)){
                setCoupPossible(CoupPossible.prisedepion);}
          else{
              setCoupPossible(CoupPossible.mouvement);}
    }
    else{
         setCoupPossible(null)
     
    }


    Merci

  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
    à la place de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab[colonne][ligne].setCoupPossible(pieceTampon.estValide(deplacement));
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if (pieceTampon.estValide(deplacement)){
          if(e.captureParUnPionPossible(deplacement)){
                tab[colonne][ligne].setCoupPossible(CoupPossible.prisedepion);}
          else{
              tab[colonne][ligne].setCoupPossible(CoupPossible.mouvement);}
    }
    else{
         tab[colonne][ligne].setCoupPossible(null)
     
    }
    en supposant que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    e.captureParUnPionPossible(deplacement))
    est bien la méthode qui te sert à savoir si un déplacement permet de prendre un pion
    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 confirmé
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 139
    Par défaut
    Merci,
    Sa m'affiche bien les cases en verte mais encore une fois il y a des cases occupés qui sont en verte...

  9. #29
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 139
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    à la place de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab[colonne][ligne].setCoupPossible(pieceTampon.estValide(deplacement));
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if (pieceTampon.estValide(deplacement)){
          if(e.captureParUnPionPossible(deplacement)){
                tab[colonne][ligne].setCoupPossible(CoupPossible.prisedepion);}
          else{
              tab[colonne][ligne].setCoupPossible(CoupPossible.mouvement);}
    }
    else{
         tab[colonne][ligne].setCoupPossible(null)
     
    }
    en supposant que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    e.captureParUnPionPossible(deplacement))
    est bien la méthode qui te sert à savoir si un déplacement permet de prendre un pion

    si le déplacement est possible {
    si la case d'arrivée contient un pion
    alors setCoupPossible(CoupPossible.prisedepion);
    sinon {
    si la case pos est innocupée setCoupPossible(CoupPossible.mouvement);
    sinon setCoupPossible( ce que tu veux );
    }
    }
    sinon setCoupPossible(null)



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     if (pieceTampon.estValide(deplacement)){
    								        	if(e.captureParUnPionPossible(deplacement)){
    								        	tab[colonne][ligne].setCoupPossible(CoupPossible.prisepion);}
    								        	else if (pos[colonne][ligne].estOccupe()){
    								        	tab[colonne][ligne].setCoupPossible(null);}
    								        	else {
    								        	tab[colonne][ligne].setCoupPossible(CoupPossible.mouvement);}
    								        	}
    								        	else{
    								        	tab[colonne][ligne].setCoupPossible(null);
    
    								        	}
    								     }
    Cela vous parait-il correct ?

    Merci

    Sachant que la classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	public boolean estOccupe()
    	{
            //sert a savoir si la case est occuper ou non
    		return (piece != null);	
    	}
    Edit : je n'arrive pas a utiliser pos ...

    Merci

  10. #30
    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 Jordan62 Voir le message
    Sachant que la classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public boolean estOccupe()
    	{
            //sert a savoir si la case est occuper ou non
    		return (piece != null);	
    	}
    La méthode pas la classe...

    Citation Envoyé par Jordan62 Voir le message
    Edit : je n'arrive pas a utiliser pos ...
    pos est de classe Position...
    Position, c'est pourtant bien une classe que tu as faites, non ?

    sinon le bon code c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     if (pieceTampon.estValide(deplacement)) {
        if(e.captureParUnPionPossible(deplacement)){
            tab[colonne][ligne].setCoupPossible(CoupPossible.prisepion);}
        else if (tab[colonne][ligne].estOccupe()){
            tab[colonne][ligne].setCoupPossible(null);}
        else {
    		    tab[colonne][ligne].setCoupPossible(CoupPossible.mouvement);}
        }
    } else {
        tab[colonne][ligne].setCoupPossible(null);
    }
    parce que c'est dans la classe Case la classe que tu as mis la méthode estOccupe pas Position

    avec ce code, une case vers laquelle la pièce cliquée par le joueur peut se déplacer, mais qui est occupée par une pièce (adverse ou pas) ne sera pas colorisée en vert : c'est bien ce que tu veux ?
    pourquoi ne pas afficher en vert quand même la case si elle est occupée par une pièce adverse par exemple ? ou dans une autre couleur pour indiquée qu'une pièce sera prise si le mouvement est effectué ?
    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.

  11. #31
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 139
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    La méthode pas la classe...



    pos est de classe Position...
    Position, c'est pourtant bien une classe que tu as faites, non ?

    sinon le bon code c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     if (pieceTampon.estValide(deplacement)) {
        if(e.captureParUnPionPossible(deplacement)){
            tab[colonne][ligne].setCoupPossible(CoupPossible.prisepion);}
        else if (tab[colonne][ligne].estOccupe()){
            tab[colonne][ligne].setCoupPossible(null);}
        else {
    		    tab[colonne][ligne].setCoupPossible(CoupPossible.mouvement);}
        }
    } else {
        tab[colonne][ligne].setCoupPossible(null);
    }
    parce que c'est dans la classe Case la classe que tu as mis la méthode estOccupe pas Position

    avec ce code, une case vers laquelle la pièce cliquée par le joueur peut se déplacer, mais qui est occupée par une pièce (adverse ou pas) ne sera pas colorisée en vert : c'est bien ce que tu veux ?
    pourquoi ne pas afficher en vert quand même la case si elle est occupée par une pièce adverse par exemple ? ou dans une autre couleur pour indiquée qu'une pièce sera prise si le mouvement est effectué ?
    J'ai tester le bout de code mais cela fait toujours pareil , c'est a dire que les possiblités sont en vert même celle occuper...
    Oui, j'aurais aimé en vert les cases qu'on peut atteindre et qui sont non occuper et en rouge celle ou il y a une piece adverse qu'on peut prendre ...

    Merci

  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
    Citation Envoyé par Jordan62 Voir le message
    J'ai tester le bout de code mais cela fait toujours pareil , c'est a dire que les possiblités sont en vert même celle occuper...
    Oui, j'aurais aimé en vert les cases qu'on peut atteindre et qui sont non occuper et en rouge celle ou il y a une piece adverse qu'on peut prendre ...

    Merci
    d'après le nom de la méthode captureParUnPionPossible, en rouge on devrait avoir une destination telle que si on bouge sa pièce vers celle ci, alors on se la fait prendre par un pion, donc pas vraiment ce que tu veux, mais c'est peut être le nom de la méthode qui est incorrecte, j'en sais rien, c'est toi qui a fait le code, c'est toi qui le sait

    dans les précédents post j'ai vu une méthode estOccupe(couleur) : cette méthode devrait te permettre de savoir si une case est occupée par une pièce de la couleur passé en paramètre(et tu dois connaitre la couleur de la pièce jouée, donc tu peux connaitre la couleur adverse), et ce test correspond peut être plus à ce que tu veux faire

    pareil pour estOccupe : tout dépend ce que fait la méthode, à priori le code que tu as posté montre que cette méthode renvoit true si piece n'est pas null,
    vérifie le, puis vérifie que piece est bien non null (en traçant ou en mode debug) : si piece est null alors il y a un problème ailleurs (soit tu l'initialises mal, soit tu modifies pas correctement sa valeur ou tu la modifies pas au bon moment, etc...)

    même si tu débute en java, tu dois au moins connaitre les différentes méthodes que tu as créés, à quoi elles servent, etc... c'est le minimum,
    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 confirmé
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 139
    Par défaut
    Merci de vos explications

    estOccupe(pieceDepart.getCouleur().equals("blanc") ? "blanc" : "noir")


    J'ai une methode qui me parait interressante :

    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
    	public boolean cheminPossible(Deplacement deplacement) {
    		Piece pieceDepart = plateau[(int)deplacement.getDepart().getColonne()][(int)deplacement.getDepart().getLigne()].getPiece();
    		
    		//deux premieres conditions fondamentales, que la case d'arrivee sois libre ou qu'elle posseede une piece de couleur contraire a celle de la piece de depart
    		if (!plateau[(int)deplacement.getArrivee().getColonne()][(int)deplacement.getArrivee().getLigne()].estOccupe(pieceDepart.getCouleur().equals("blanc") ? "blanc" : "noir")
    				| deplacement.isNul()){
    			if (!(pieceDepart instanceof Cavalier)){
    				if(!(pieceDepart instanceof Pion)){
    					//Je verifie que le deplacement est superieur a un.
                        //instanceof permet permet de connaitre le type d'une variable 
    					if(!(Math.abs(deplacement.getDeplacementX()) - Math.abs(deplacement.getDeplacementY()) <= 1
    							&& Math.abs(deplacement.getDeplacementX()) + Math.abs(deplacement.getDeplacementY()) <= 1)){
    
    						//JumpX et jumpY seront sois 0,  1 ou -1, ils indiquent l'incrementation que je devrai utiliser pour les valeurs X et Y pour verifier toute les cases entre le depart et l'arrivee
    						int jumpX = deplacement.getDeplacementX() == 0 ? 0 : (int)(deplacement.getArrivee().getColonne() - deplacement.getDepart().getColonne())
    								/Math.abs((int)(deplacement.getArrivee().getColonne() - deplacement.getDepart().getColonne()));
    				
    						int jumpY = deplacement.getDeplacementY() == 0 ? 0 : (int)(deplacement.getArrivee().getLigne() - deplacement.getDepart().getLigne())
    								/Math.abs((int)(deplacement.getArrivee().getLigne() - deplacement.getDepart().getLigne()));
    
    						//Je verifie succicessivement toutes les cases entre l'arrivee et le depart
    						for (int ctrX = (int)deplacement.getDepart().getColonne() + jumpX, ctrY = (int)deplacement.getDepart().getLigne() + jumpY;
    							ctrX != (int)deplacement.getArrivee().getColonne() | ctrY != (int)deplacement.getArrivee().getLigne();
    							ctrX += jumpX, ctrY += jumpY){
    							if (plateau[ctrX][ctrY].estOccupe()){
    								return false;
    							}
    						}
    						return true;
    					}
    					else
    						// Si le deplacement est egal il est automatiquement valide car il a passee les preecedents test. Puisque le deplacement est de 1, on a pas besoin de verifier les cases entre le depart et l'arrivee
    						return true;
    				}
    				else
    					//Si c'est un pion, je verifie si la case est libre de toute piece.
    					return !plateau[(int)deplacement.getArrivee().getColonne()][(int)deplacement.getArrivee().getLigne()].estOccupe();
    					
    			}
    			else
    				//je renvoie true car un cavalier peut sauter par dessus les autres pieces.
    				return true;
    		}
    		else
    			//Le deplacement est automatiquement invalide si la case d'arrive contient une piece de meme couleur que la piece de depart.
    			return false;
    
    		
    	}
    Je comprend le code, mais j'ai du mal a manipuler les méthodes entre elles...

  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
    mais c'est un code que tu as écris à partir de zéro ou c'est des bouts de codes récupérés d'un exemple trouvé sur le web ?
    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
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (!plateau[(int)deplacement.getArrivee().getColonne()][(int)deplacement.getArrivee().getLigne()].estOccupe(pieceDepart.getCouleur().equals("blanc") ? "blanc" : "noir")
    c'est ça, sauf que cette méthode vient visiblement d'une autre classe, donc qui n'a pas accès aux mêmes instances que celles qui te sont accessibles à l'endroit ou on a mis le code ou on appelle les setCoupPossible

    par exemple ici plateau doit s'appeler tab dans ton le code que tu dois modifier
    et tu n'as pas besoind de repasser par déplacement, puisque on créé Deplacement, donc on a déjà le départ et l'arrivée (c'est temp et pos)
    et à la place de pieceDepart, ca va être pieceTampon !

    et il y un ! devant la condition, donc c'est la condition inverse de ce que tu veux faire : si la case est occupé par une pièce noire si c'est blanc qui joue et inversement

    attention, la méthode estOccupe(couleur) retourne false si la case est innoccupé
    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.

  16. #36
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 139
    Par défaut
    D'un exemple, jamais n'aurais su écrire cela...

  17. #37
    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 n'as pas choisi un exemple facile à comprendre non plus : c'est plutôt super compliqué comme façon de faire. visiblement écrit par quelqu'un qui ne maitrise pas complètement la programmation objet, donc avec des parties assez alambiquées

    je voulais pas te parler de cet aspect parce que je pensais que c'était ton code, et que mon but n'est pas de te faire programmer dans les règles de l'art mais de t'aider sur des blocages précis


    bon j'ai été obligé un peu d'introduire certains trucs en ce sens (comme le fait de créer une classe Case, bien que cela n'est pas une bonne idée de la faire étendre directement JLabel, mais c'était plus simple comme ça pour te faire avancer)


    en plus y'a des trucs bizarres que j'ai vu en passant rapide dessus, comme les distances de déplacement de 1 ou 2, assez étranges pour gérer les déplacements de pièces de jeux d'échec, mais j'ai pas approfondi, peut être qu'il y a une astuce
    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.

  18. #38
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 139
    Par défaut
    J'aurais aimé juste afficher les choix en vert , les cases a prendre en rouge, le roque et si je pouvais la prise en passant mais c'est trop dur pour moi ...

  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
    Citation Envoyé par Jordan62 Voir le message
    Je suis noté sur 2/3 sur ce projet et je n'ai pas eu de cours orienté objet donc j'ai du mal ...
    c'est sur !
    mais y'a un truc qui m'interpelle... on te demande en TD, TP ou je ne sais quoi, de faire un jeu d'echec noté, sans que tu aies un minimum de formation ?

    J'aurais aimé juste afficher les choix en vert , les cases a prendre en rouge, le roque et si je pouvais la prise en passant mais c'est trop dur pour moi ...
    tu n'est pas loin alors
    les choix en vert c'est fait
    les cases à prendre en rouge, quasiment
    le roque c'est le même principe avec une condition plus siouxe
    la prise en passant je vois pas trop ce que tu voudrais faire
    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 confirmé
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 139
    Par défaut
    J'ai vu différentes classes, mais ce projet est dans le but de découvrir sauf que c'est dur ..

    Les cases vertes affichent aussi quand elles sont occupées ...
    Les cases rouges s'affichent pas...


    Sa parait simple quand on le lit mais quand il faut le faire c'est dure ...

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

Discussions similaires

  1. le Java est la continuité du C++ ???
    Par Vincent PETIT dans le forum Débats sur le développement - Le Best Of
    Réponses: 33
    Dernier message: 25/08/2005, 21h17
  2. Envoi de Datagrames par IP en JAVA
    Par the java lover dans le forum Développement
    Réponses: 2
    Dernier message: 14/08/2002, 12h44
  3. directx et java?? possible??
    Par jiraiya dans le forum DirectX
    Réponses: 3
    Dernier message: 09/07/2002, 20h55
  4. webcam : lire sur un port usb en c/c++ ou java. sous win. ?
    Par flo007 dans le forum Choisir un environnement de développement
    Réponses: 2
    Dernier message: 25/05/2002, 00h24
  5. Service de nommage java C++
    Par Anonymous dans le forum CORBA
    Réponses: 3
    Dernier message: 15/04/2002, 13h48

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