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. #121
    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 modifier capture par un pion possible :

    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
    public boolean captureParUnPionPossible(Deplacement deplacement) {
    		//Je verifie si la piece est un pion
    		if(plateau[deplacement.getDepart().getColonne()][deplacement.getDepart().getLigne()].getPiece() instanceof Pion)
    		{
    			//initialisation des variables, et savoir la couleur de la piece de depart et la case d'arrive.
    			Case Arrive = plateau[(int)deplacement.getArrivee().getColonne()][(int)deplacement.getArrivee().getLigne()];
    			String couleurDepart = plateau[(int)deplacement.getDepart().getColonne()][(int)deplacement.getDepart().getLigne()].getPiece().getCouleur();
    			
    			//je verifie d'abord si la piece d'arrive existe et si elle est de la couleur contraire de celle de depart.
    			if(Arrive.estOccupe(couleurDepart==(COULEUR_JOUEUR_BLANC) ? COULEUR_JOUEUR_NOIR : COULEUR_JOUEUR_BLANC))
    			//on verifie  si le deplacement est valide par le produit du deplacement des ordonner et absices et si cela fait 1 pour les noir ou -1 pour les blanc cela sera accepter
               
    				if(prisePionEnPassant(deplacement))
    					return true;
    		
    		return (deplacement.getDeplacementY() * Math.abs(deplacement.getDeplacementX()) == (couleurDepart==(COULEUR_JOUEUR_NOIR) ? 1 : -1));
    
    		}	return false;
    	}
    il faut mettre le test avant de tester si la case est occupée, car prisePionEnPassant teste une case vide (celle derrière le pion, ou si tu préfères celles ou va aller le pion qui prend en passant)

    (en plus comme le code d'origine n'a pas de bloc de if, tu a cassé le if d'origine :
    du coup le return qui devait être fait sur le if ( Arrive.estOccupee...) est fait dans tous les cas (sauf si priseEnPassant est true), donc le pion peut se déplacer tout autour de lui vers des cases vides...

    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
    public boolean captureParUnPionPossible(Deplacement deplacement, boolean affichage) {
    //Je verifie si la piece est un pion
    if(plateau[deplacement.getDepart().getColonne()][deplacement.getDepart().getLigne()].getPiece() instanceof Pion) {
      //initialisation des variables, et savoir la couleur de la piece de depart et la case d'arrive.
      Case Arrive = plateau[(int)deplacement.getArrivee().getColonne()][(int)deplacement.getArrivee().getLigne()];
      String couleurDepart = plateau[(int)deplacement.getDepart().getColonne()][(int)deplacement.getDepart().getLigne()].getPiece().getCouleur();
      
      if ( prisePionEnPassant(deplacement, affichage) ) {
        return true;
      }
      
      //je verifie d'abord si la piece d'arrive existe et si elle est de la couleur contraire de celle de depart.
      if(Arrive.estOccupe(couleurDepart==(COULEUR_JOUEUR_BLANC) ? COULEUR_JOUEUR_NOIR : COULEUR_JOUEUR_BLANC))
        //on verifie  si le deplacement est valide par le produit du deplacement des ordonner et absices et si cela fait 1 pour les noir ou -1 pour les blanc cela sera accepter
           
        return (deplacement.getDeplacementY() * Math.abs(deplacement.getDeplacementX()) == (couleurDepart==(COULEUR_JOUEUR_NOIR) ? 1 : -1));
      }
      return false;
    
    }
    pour éviter les risque on peut si tu préfères faire une méthode totalement à part pour la priseEnPassant, en dupliquant les tests de tu début de captureParUnPionPossible


    il suffit après de remplacer tout les
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    e.captureParUnPionPosssible(deplacement)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    e.captureParUnPionPosssible(deplacement) || e.priseEnPassant(deplacement, <la bonne valeur selon qu'on veut affciher ou déplacer>)
    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. #122
    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'avais déjà virer méthodesEchiquier ( une fois que vous aviez expliqué son role)

    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
    	public boolean prisePionEnPassant(Deplacement deplacement, boolean affichage){
    		  Partie.Coup dernierCoupJoue=Partie.getDernierCoupJoue();
    		  if( dernierCoupJoue!=null ) {
    		    // si le coup est null, c'est le tout premier coup de la partie
    		 
    		    if ( dernierCoupJoue.getPieceJouee() instanceof Pion ) {
    		      if ( deplacement.getDeplacementY()==(affichage?0:(COULEUR_JOUEUR_NOIR.equals(dernierCoupJoue.getCouleur()) ? -1 : 1)) ) {
    		        if(Math.abs(dernierCoupJoue.getDepart().getLigne()-dernierCoupJoue.getArrivee().getLigne())==2){
    		          if(Math.abs(dernierCoupJoue.getArrivee().getColonne()-deplacement.getArrivee().getColonne())==0){
    		            if(dernierCoupJoue.getArrivee().getLigne()==deplacement.getDepart().getLigne()){
    		            	if(plateau[deplacement.getDepart().getColonne()][deplacement.getDepart().getLigne()].getPiece() instanceof Pion)
    		    			{
    		    				//initialisation des variables, et savoir la couleur de la piece de depart et la case d'arrive.
    		    				Case Arrive = plateau[(int)deplacement.getArrivee().getColonne()][(int)deplacement.getArrivee().getLigne()];
    		    				String couleurDepart = plateau[(int)deplacement.getDepart().getColonne()][(int)deplacement.getDepart().getLigne()].getPiece().getCouleur();
    		    				
    		    				//je verifie d'abord si la piece d'arrive existe et si elle est de la couleur contraire de celle de depart.
    		    				if(Arrive.estOccupe(couleurDepart==(COULEUR_JOUEUR_BLANC) ? COULEUR_JOUEUR_NOIR : COULEUR_JOUEUR_BLANC))
    		    				//on verifie  si le deplacement est valide par le produit du deplacement des ordonner et absices et si cela fait 1 pour les noir ou -1 pour les blanc cela sera accepter
    		    	           
    		    					return (deplacement.getDeplacementY() * Math.abs(deplacement.getDeplacementX()) == (couleurDepart==(COULEUR_JOUEUR_NOIR) ? 1 : -1));
    		    			}
    		            }
    		          }
    		        }
    		      }
    		    }
    		  }
    		  return false;
    		}	
    }
    J'ai dupliqué le code.

  3. #123
    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
    Merci,
    J'avais déjà virer méthodesEchiquier ( une fois que vous aviez expliqué son role)
    tu as raison : elle servait à rien

    Citation Envoyé par Jordan62 Voir le message

    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
    	public boolean prisePionEnPassant(Deplacement deplacement, boolean affichage){
    		  Partie.Coup dernierCoupJoue=Partie.getDernierCoupJoue();
    		  if( dernierCoupJoue!=null ) {
    		    // si le coup est null, c'est le tout premier coup de la partie
    		 
    		    if ( dernierCoupJoue.getPieceJouee() instanceof Pion ) {
    		      if ( deplacement.getDeplacementY()==(affichage?0:(COULEUR_JOUEUR_NOIR.equals(dernierCoupJoue.getCouleur()) ? -1 : 1)) ) {
    		        if(Math.abs(dernierCoupJoue.getDepart().getLigne()-dernierCoupJoue.getArrivee().getLigne())==2){
    		          if(Math.abs(dernierCoupJoue.getArrivee().getColonne()-deplacement.getArrivee().getColonne())==0){
    		            if(dernierCoupJoue.getArrivee().getLigne()==deplacement.getDepart().getLigne()){
    		            	if(plateau[deplacement.getDepart().getColonne()][deplacement.getDepart().getLigne()].getPiece() instanceof Pion)
    		    			{
    		    				//initialisation des variables, et savoir la couleur de la piece de depart et la case d'arrive.
    		    				Case Arrive = plateau[(int)deplacement.getArrivee().getColonne()][(int)deplacement.getArrivee().getLigne()];
    		    				String couleurDepart = plateau[(int)deplacement.getDepart().getColonne()][(int)deplacement.getDepart().getLigne()].getPiece().getCouleur();
    		    				
    		    				//je verifie d'abord si la piece d'arrive existe et si elle est de la couleur contraire de celle de depart.
    		    				if(Arrive.estOccupe(couleurDepart==(COULEUR_JOUEUR_BLANC) ? COULEUR_JOUEUR_NOIR : COULEUR_JOUEUR_BLANC))
    		    				//on verifie  si le deplacement est valide par le produit du deplacement des ordonner et absices et si cela fait 1 pour les noir ou -1 pour les blanc cela sera accepter
    		    	           
    		    					return (deplacement.getDeplacementY() * Math.abs(deplacement.getDeplacementX()) == (couleurDepart==(COULEUR_JOUEUR_NOIR) ? 1 : -1));
    		    			}
    		            }
    		          }
    		        }
    		      }
    		    }
    		  }
    		  return false;
    		}	
    }
    J'ai dupliqué le code.

    pas de chance c'était le début du test qu'il fallait dupliquer.

    parce que le test

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(Arrive.estOccupe(couleurDepart==(COULEUR_JOUEUR_BLANC) ? COULEUR_JOUEUR_NOIR : COULEUR_JOUEUR_BLANC))
    impose de se déplacer vers une case occupée : or la prise en passant on se déplace vers une case innocupée !

    j'ai pas ma machine de dev sous la main, donc je peux pas tester ce que je t'envoie, mais c'est un peu près ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public boolean prisePionEnPassant(Deplacement deplacement, boolean affichage){ {
    		//Je verifie si la piece est un pion
    		if(plateau[deplacement.getDepart().getColonne()][deplacement.getDepart().getLigne()].getPiece() instanceof Pion)
    		{
       ... et la tu mets le contenu de la méthode prisePionEnPassant  (celui de mon dernier post)
    }
    return 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.

  4. #124
    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


    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
    	public boolean prisePionEnPassant(Deplacement deplacement, boolean affichage){
    		//Je verifie si la piece est un pion
    		if(plateau[deplacement.getDepart().getColonne()][deplacement.getDepart().getLigne()].getPiece() instanceof Pion)
    		{
    			//Je verifie si la piece est un pion
    			if(plateau[deplacement.getDepart().getColonne()][deplacement.getDepart().getLigne()].getPiece() instanceof Pion) {
    			  //initialisation des variables, et savoir la couleur de la piece de depart et la case d'arrive.
    			  Case Arrive = plateau[(int)deplacement.getArrivee().getColonne()][(int)deplacement.getArrivee().getLigne()];
    			  String couleurDepart = plateau[(int)deplacement.getDepart().getColonne()][(int)deplacement.getDepart().getLigne()].getPiece().getCouleur();
     
    			  if ( prisePionEnPassant(deplacement, affichage) ) {
    			    return true;
    			  }
     
    			  //je verifie d'abord si la piece d'arrive existe et si elle est de la couleur contraire de celle de depart.
    			  if(Arrive.estOccupe(couleurDepart==(COULEUR_JOUEUR_BLANC) ? COULEUR_JOUEUR_NOIR : COULEUR_JOUEUR_BLANC))
    			    //on verifie  si le deplacement est valide par le produit du deplacement des ordonner et absices et si cela fait 1 pour les noir ou -1 pour les blanc cela sera accepter
     
    			    return (deplacement.getDeplacementY() * Math.abs(deplacement.getDeplacementX()) == (couleurDepart==(COULEUR_JOUEUR_NOIR) ? 1 : -1));
    			  }
    			  return false;
    Ai-je bien copier le bon code ?

    Donc nous avons ajouté un parametre en plus c'est bien cela ?

    Merci






    Pour la mauvaise manip, je sais pas trop si j'ai une faute :

    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
    	public boolean captureParUnPionPossible(Deplacement deplacement) {
    			//Je verifie si la piece est un pion
    			if(plateau[deplacement.getDepart().getColonne()][deplacement.getDepart().getLigne()].getPiece() instanceof Pion)
    			{
    				//initialisation des variables, et savoir la couleur de la piece de depart et la case d'arrive.
    				Case Arrive = plateau[(int)deplacement.getArrivee().getColonne()][(int)deplacement.getArrivee().getLigne()];
    				String couleurDepart = plateau[(int)deplacement.getDepart().getColonne()][(int)deplacement.getDepart().getLigne()].getPiece().getCouleur();
     
    				//je verifie d'abord si la piece d'arrive existe et si elle est de la couleur contraire de celle de depart.
    				if(Arrive.estOccupe(couleurDepart==(COULEUR_JOUEUR_BLANC) ? COULEUR_JOUEUR_NOIR : COULEUR_JOUEUR_BLANC))
    				//on verifie  si le deplacement est valide par le produit du deplacement des ordonner et absices et si cela fait 1 pour les noir ou -1 pour les blanc cela sera accepter
     
    					return (deplacement.getDeplacementY() * Math.abs(deplacement.getDeplacementX()) == (couleurDepart==(COULEUR_JOUEUR_NOIR) ? 1 : -1));
    			}
    			return false;
     
    	}



    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
    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))
    							{
    								Piece piecePrise = e.getCase(colonneClic, ligneClic).getPiece();
    								Icon iconPiecePrise = tab[colonneClic][ligneClic].getIcon();
    								if ( pieceTampon instanceof Pion && e.prisePionEnPassant(deplacement, false) ) {
     
    								  piecePrise = e.getCase(deplacement.getArrivee().getColonne(),deplacement.getDepart().getLigne()).getPiece();
    								  iconPiecePrise = tab[deplacement.getArrivee().getColonne()][deplacement.getDepart().getLigne()].getIcon();
    								  tab[deplacement.getArrivee().getColonne()][deplacement.getDepart().getLigne()].setIcon(null); // pièce prise
     
    								}
    								if ( iconPiecePrise!=null ) {
    									//je cree un jLabel avec l'icone de la piece manger
    									JLabel manger = new JLabel(iconPiecePrise);
    									manger.setHorizontalAlignment(SwingConstants.CENTER);
     
    									//je l'ajoute au bon jPanel
    									if (couleurControle==(COULEUR_JOUEUR_BLANC))
    										panelblanc.add(manger);
    									else		
    										panelnoir.add(manger);
    								}
    								Partie.nouveauCoup(couleurControle,pieceTampon,deplacement,piecePrise);
     
    								// 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.enregistreDeplacement(true);
    									if ( pieceTampon instanceof Pion ) {
     
    									}
    									if ( pieceTampon instanceof Roi ) {
    										if ( Math.abs(deplacement.getDeplacementX())==2) {
    											// faut que je déplace aussi la tour derrière le roi
    											int xtourDepart, xtourArrivee;
    											if( deplacement.getDeplacementX()<0 ) {
    												// déplacement vers la gauche = grand roque = roque avec la tour gauche (vue des blancs)
    												xtourDepart=0;
    												xtourArrivee=3;
    											}
    											else {
    												// déplacement vers la droite = petit roque = roque avec la tour droite (vue des blancs)
    												xtourDepart=7;
    												xtourArrivee=5;
    											}
    									                // on déplace la tour... donc la pièce et l'icone
    											Piece tour = e.getCase(xtourDepart, ligneClic).getPiece();
    											e.getCase(xtourArrivee, ligneClic).setPiece(tour);
    											e.getCase(xtourDepart, ligneClic).setPiece(null);
    											tour.enregistreDeplacement(true); // ce déplacement doit être compté
    											tab[xtourArrivee][ligneClic].setIcon(tab[xtourDepart][ligneClic].getIcon());
    											tab[xtourDepart][ligneClic].setIcon(null);
    										}

    C'est les deux derniers que j'ai touché , donc je sais pas si j'ai rajouter des choses pas très correctes...

  5. #125
    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
    Merci


    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
    	public boolean prisePionEnPassant(Deplacement deplacement, boolean affichage){
    		//Je verifie si la piece est un pion
    		if(plateau[deplacement.getDepart().getColonne()][deplacement.getDepart().getLigne()].getPiece() instanceof Pion)
    		{
    			//Je verifie si la piece est un pion
    			if(plateau[deplacement.getDepart().getColonne()][deplacement.getDepart().getLigne()].getPiece() instanceof Pion) {
    			  //initialisation des variables, et savoir la couleur de la piece de depart et la case d'arrive.
    			  Case Arrive = plateau[(int)deplacement.getArrivee().getColonne()][(int)deplacement.getArrivee().getLigne()];
    			  String couleurDepart = plateau[(int)deplacement.getDepart().getColonne()][(int)deplacement.getDepart().getLigne()].getPiece().getCouleur();
    			  
    			  if ( prisePionEnPassant(deplacement, affichage) ) {
    			    return true;
    			  }
    			  
    			  //je verifie d'abord si la piece d'arrive existe et si elle est de la couleur contraire de celle de depart.
    			  if(Arrive.estOccupe(couleurDepart==(COULEUR_JOUEUR_BLANC) ? COULEUR_JOUEUR_NOIR : COULEUR_JOUEUR_BLANC))
    			    //on verifie  si le deplacement est valide par le produit du deplacement des ordonner et absices et si cela fait 1 pour les noir ou -1 pour les blanc cela sera accepter
    			       
    			    return (deplacement.getDeplacementY() * Math.abs(deplacement.getDeplacementX()) == (couleurDepart==(COULEUR_JOUEUR_NOIR) ? 1 : -1));
    			  }
    			  return false;
    Ai-je bien copier le bon code ?
    enlève ce que j'ai marqué en rouge (ca concerne que captureParUnPionPossible) et en bleu c'est en double
    Citation Envoyé par Jordan62 Voir le message
    Donc nous avons ajouté un parametre en plus c'est bien cela ?
    dans prisePionEnPassant oui (pour captureParUnPionPossible ce n'est plus la peine puisque tu as 2 méthodes distinctes
    Citation Envoyé par Jordan62 Voir le message

    Merci






    Pour la mauvaise manip, je sais pas trop si j'ai une faute :

    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
    	public boolean captureParUnPionPossible(Deplacement deplacement) {
    			//Je verifie si la piece est un pion
    			if(plateau[deplacement.getDepart().getColonne()][deplacement.getDepart().getLigne()].getPiece() instanceof Pion)
    			{
    				//initialisation des variables, et savoir la couleur de la piece de depart et la case d'arrive.
    				Case Arrive = plateau[(int)deplacement.getArrivee().getColonne()][(int)deplacement.getArrivee().getLigne()];
    				String couleurDepart = plateau[(int)deplacement.getDepart().getColonne()][(int)deplacement.getDepart().getLigne()].getPiece().getCouleur();
     
    				//je verifie d'abord si la piece d'arrive existe et si elle est de la couleur contraire de celle de depart.
    				if(Arrive.estOccupe(couleurDepart==(COULEUR_JOUEUR_BLANC) ? COULEUR_JOUEUR_NOIR : COULEUR_JOUEUR_BLANC))
    				//on verifie  si le deplacement est valide par le produit du deplacement des ordonner et absices et si cela fait 1 pour les noir ou -1 pour les blanc cela sera accepter
     
    					return (deplacement.getDeplacementY() * Math.abs(deplacement.getDeplacementX()) == (couleurDepart==(COULEUR_JOUEUR_NOIR) ? 1 : -1));
    			}
    			return false;
     
    	}
    ça à l'air d'être bon
    Citation Envoyé par Jordan62 Voir le message

    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
    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) ||.e.prisePionEnPassant(deplacement,false))
    							{
    								Piece piecePrise = e.getCase(colonneClic, ligneClic).getPiece();
    								Icon iconPiecePrise = tab[colonneClic][ligneClic].getIcon();
    								if ( pieceTampon instanceof Pion && e.prisePionEnPassant(deplacement, false) ) {
    										
    								  piecePrise = e.getCase(deplacement.getArrivee().getColonne(),deplacement.getDepart().getLigne()).getPiece();
    								  iconPiecePrise = tab[deplacement.getArrivee().getColonne()][deplacement.getDepart().getLigne()].getIcon();
    								  tab[deplacement.getArrivee().getColonne()][deplacement.getDepart().getLigne()].setIcon(null); // pièce prise
    									 
    								}
    								if ( iconPiecePrise!=null ) {
    									//je cree un jLabel avec l'icone de la piece manger
    									JLabel manger = new JLabel(iconPiecePrise);
    									manger.setHorizontalAlignment(SwingConstants.CENTER);
    									
    									//je l'ajoute au bon jPanel
    									if (couleurControle==(COULEUR_JOUEUR_BLANC))
    										panelblanc.add(manger);
    									else		
    										panelnoir.add(manger);
    								}
    								Partie.nouveauCoup(couleurControle,pieceTampon,deplacement,piecePrise);
    								
    								// 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.enregistreDeplacement(true);
    									if ( pieceTampon instanceof Pion ) {
    										
    									}
    									if ( pieceTampon instanceof Roi ) {
    										if ( Math.abs(deplacement.getDeplacementX())==2) {
    											// faut que je déplace aussi la tour derrière le roi
    											int xtourDepart, xtourArrivee;
    											if( deplacement.getDeplacementX()<0 ) {
    												// déplacement vers la gauche = grand roque = roque avec la tour gauche (vue des blancs)
    												xtourDepart=0;
    												xtourArrivee=3;
    											}
    											else {
    												// déplacement vers la droite = petit roque = roque avec la tour droite (vue des blancs)
    												xtourDepart=7;
    												xtourArrivee=5;
    											}
    									                // on déplace la tour... donc la pièce et l'icone
    											Piece tour = e.getCase(xtourDepart, ligneClic).getPiece();
    											e.getCase(xtourArrivee, ligneClic).setPiece(tour);
    											e.getCase(xtourDepart, ligneClic).setPiece(null);
    											tour.enregistreDeplacement(true); // ce déplacement doit être compté
    											tab[xtourArrivee][ligneClic].setIcon(tab[xtourDepart][ligneClic].getIcon());
    											tab[xtourDepart][ligneClic].setIcon(null);
    										}

    C'est les deux derniers que j'ai touché , donc je sais pas si j'ai rajouter des choses pas très correctes...
    j'ai mis en rouge ce que tu as du supprimé par inadvertance

    j'ai ajouté en rouge ce qu'il faut ajouter parce que tu as fait 2 méthodes distinctes captureParUnPionPossible et prisePionEnPassant

    ce que j'ai mis en vert n'est plus nécessaire puisqu'on test si c'est un pion dans la méthode prisePionEnPassant depuis que tu a fait 2 méthodes distinctes, mais c'est pas grave si tu le laisses
    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.

  6. #126
    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 tout remis correctement sauf que maitenant dès que je bouge un pion , je ne peux pas j'ai l'erreur ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	public boolean prisePionEnPassant(Deplacement deplacement, boolean affichage){
    		//Je verifie si la piece est un pion
    		if(plateau[deplacement.getDepart().getColonne()][deplacement.getDepart().getLigne()].getPiece() instanceof Pion)
    		{	  
    			  if ( prisePionEnPassant(deplacement, affichage) ) {
    			    return true;
    			  }
    		}
    			  return false;		
    	}
    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
    	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) ||e.prisePionEnPassant(deplacement,false))
    							{
    								Piece piecePrise = e.getCase(colonneClic, ligneClic).getPiece();
    								Icon iconPiecePrise = tab[colonneClic][ligneClic].getIcon();
    								if ( e.prisePionEnPassant(deplacement, false) ) {
     
    								  piecePrise = e.getCase(deplacement.getArrivee().getColonne(),deplacement.getDepart().getLigne()).getPiece();
    								  iconPiecePrise = tab[deplacement.getArrivee().getColonne()][deplacement.getDepart().getLigne()].getIcon();
    								  tab[deplacement.getArrivee().getColonne()][deplacement.getDepart().getLigne()].setIcon(null); // pièce prise
     
    								}
    								if ( iconPiecePrise!=null ) {
    									//je cree un jLabel avec l'icone de la piece manger
    									JLabel manger = new JLabel(iconPiecePrise);
    									manger.setHorizontalAlignment(SwingConstants.CENTER);
     
    									//je l'ajoute au bon jPanel
    									if (couleurControle==(COULEUR_JOUEUR_BLANC))
    										panelblanc.add(manger);
    									else		
    										panelnoir.add(manger);
    								}
    Merci

  7. #127
    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
    c'est normal tu appelles prisePionEnPassant en boucle infinie (tu l'as même mis en rouge l'auto-appel

    à la place de cette partie en rouge il faut mettre le code du test qu'on mis au point aujourd'hui
    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. #128
    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
    voilà la méthode prisePionEnPassant complète :

    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
    public boolean prisePionEnPassant(Deplacement deplacement, boolean affichage) {
    	// Je verifie si la piece est un pion
    	if (plateau[deplacement.getDepart().getColonne()][deplacement
    			.getDepart().getLigne()].getPiece() instanceof Pion) {
                    // on a besoin du dernier coup joué
    		Partie.Coup dernierCoupJoue = Partie.getDernierCoupJoue();
    		if (dernierCoupJoue != null) {
    			// si le coup est null, c'est le tout premier coup de la partie
    			if (dernierCoupJoue.getPieceJouee() instanceof Pion) {
    				// si le dernier coup joué l'était par un pion
    				if (deplacement.getDeplacementY() == (COULEUR_JOUEUR_NOIR
    						.equals(dernierCoupJoue.getCouleur()) ? -1 : 1)) {
    					// et que le déplacement testé est une case en avant
    					if (Math.abs(dernierCoupJoue.getDepart().getLigne()
    							- dernierCoupJoue.getArrivee().getLigne()) == 2) {
    						// et que le coup d'avant le pion s'est déplacé de 2 cases
    						if (Math.abs(dernierCoupJoue.getArrivee()
    								.getColonne()
    								- deplacement.getArrivee().getColonne()) == 0) {
    							// et que le déplacement testé arrive sur la colonne du pion du dernier coup joué
    							if (dernierCoupJoue.getArrivee().getLigne() == deplacement
    									.getDepart().getLigne()) {
    								// et que les deux pions sont actuellement sur la même ligne
    								return true;
    							}
    						}
    					}
    				}
    			}
     
    		}
    	}
    	return 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.

  9. #129
    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 ça fonctionne !

  10. #130
    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
    y'a un petit truc bizarre mais on peut faire avec (je verrai si j'ai le temps d'améliorer ça) :

    pour la prise en passant, on affiche le pion prenable en rouge, mais il faut avancer son pion sur la case derrière le prion prenable, comme si on le prenait normalement

    on pourrait en fait afficher les 2 cases en rouge et valider la prise en passant en cliquant sur les 2 cases
    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. #131
    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
    y'a un petit truc bizarre mais on peut faire avec (je verrai si j'ai le temps d'améliorer ça) :

    pour la prise en passant, on affiche le pion prenable en rouge, mais il faut avancer son pion sur la case derrière le prion prenable, comme si on le prenait normalement

    on pourrait en fait afficher les 2 cases en rouge et valider la prise en passant en cliquant sur les 2 cases
    C'est très gentil de votre part mais ne vous embetez pas, je ne veux pas abusé ...


    Il reste ainsi:
    l'echec
    et si le temps le permet (charger/sauvegarde)

  12. #132
    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
    pour l'echec, ajoutes une nouvelle valeur dans CoupPossible (echec par exemple) auquel tu associe une couleur particulière, on pourrait utiliser le rouge ( et utilsier le orange à la place du rouge pour la prise de pièce)

    ensuite, il faut après chaque fin de mouvement, dans la méthode mouseClicked

    par exemple après ça :
    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
    pieceTampon = null;
    		iconeTampon = null;
    		temp = null;
     
    		couleurControle = couleurControle==(COULEUR_JOUEUR_BLANC) ? COULEUR_JOUEUR_NOIR : COULEUR_JOUEUR_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;
     
    }
    ajouter un code qui va parcourir toutes les cases,
    pour celle qui contiennent une pièce de la couleur opposée à couleurControle,
    simuler un mouvement vers le roi de la couleur couleurControle et et appeler les condition de validation ((deplacement.estValide()&& e.cheminPossible(deplacement)) || e.captureParUnPionPossible(deplacementdeplacement))
    pour tout deplacement simulé qui valide la condition : parcourir toutes les cases sauf celle de départ et celle d'arrivée et appeler setCoupPossible(CoupPOssible.echec) pour cette case

    tu auras les chemins de menaces de toutes les pièces en echec

    si un déplacement au moins valide la condition tu peux afficher ensuite un message "Echec au roi" avec un JOptionPane par exemple

    on peut aussi en plus détecter l'echec et mat sans être obligé de prendre le roi le coup d'après en ajoutant un petit bout de code qui consiste
    1) à faire la même chose que pour l'echec mais pour toutes les cases libres à coté du roi
    2) à tester si une autre pièce de la couleur du joueur menacé ne peut pas aller sur une des cases menacées (celles qu'on a détecté dans le test pour l'echec) : on peut le faire en mémorisant par exemple les cases détectées lors du test dans une liste, puis en parcourant toutes les cases qui ont une pièce de la couleur jouée, en simulant le déplacement entre ces cases et les cases de la liste, et si l'un valide deplacement.estValide() && e.cheminPossible(deplacement), ily a pas mat
    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. #133
    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
    voilà la méthode prisePionEnPassant complète :

    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
    public boolean prisePionEnPassant(Deplacement deplacement, boolean affichage) {
    	// Je verifie si la piece est un pion
    	if (plateau[deplacement.getDepart().getColonne()][deplacement
    			.getDepart().getLigne()].getPiece() instanceof Pion) {
                    // on a besoin du dernier coup joué
    		Partie.Coup dernierCoupJoue = Partie.getDernierCoupJoue();
    		if (dernierCoupJoue != null) {
    			// si le coup est null, c'est le tout premier coup de la partie
    			if (dernierCoupJoue.getPieceJouee() instanceof Pion) {
    				// si le dernier coup joué l'était par un pion
    				if (deplacement.getDeplacementY() == (COULEUR_JOUEUR_NOIR
    						.equals(dernierCoupJoue.getCouleur()) ? -1 : 1)) {
    					// et que le déplacement testé est une case en avant
    					if (Math.abs(dernierCoupJoue.getDepart().getLigne()
    							- dernierCoupJoue.getArrivee().getLigne()) == 2) {
    						// et que le coup d'avant le pion s'est déplacé de 2 cases
    						if (Math.abs(dernierCoupJoue.getArrivee()
    								.getColonne()
    								- deplacement.getArrivee().getColonne()) == 0) {
    							// et que le déplacement testé arrive sur la colonne du pion du dernier coup joué
    							if (dernierCoupJoue.getArrivee().getLigne() == deplacement
    									.getDepart().getLigne()) {
    								// et que les deux pions sont actuellement sur la même ligne
    								return true;
    							}
    						}
    					}
    				}
    			}
     
    		}
    	}
    	return false;
    }
    Sa fonctionne car je peux jouer mais la méthode de priseenpassant ne fonctionne plus

    Edit : Je n'ai rien dit ..

  14. #134
    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
    ah oui mince j'ai repris un truc dans le forum mais c'était pas le bon,

    j'ai pas envie de rechercher dans le forum le bon code (normalement c'est dans les messages que j'ai envoyé entre 19h et 21h par là), je t'envoies ça demain : je le reprendrai direct dans le source
    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. #135
    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
    Sa fonctionne car je peux jouer mais la méthode de priseenpassant ne fonctionne plus

    Edit : Je n'ai rien dit ..
    si il manque un truc :

    à la place de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (deplacement.getDeplacementY() == (COULEUR_JOUEUR_NOIR
    				.equals(dernierCoupJoue.getCouleur()) ? -1 : 1)) {
    il faut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( deplacement.getDeplacementY()==(affichage?0:(COULEUR_JOUEUR_NOIR.equals(dernierCoupJoue.getCouleur()) ? -1 : 1)) ) {
    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. #136
    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
    pour l'echec, ajoutes une nouvelle valeur dans CoupPossible (echec par exemple) auquel tu associe une couleur particulière, on pourrait utiliser le rouge ( et utilsier le orange à la place du rouge pour la prise de pièce)
    Fais :

    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
    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, 129, 0)); //couleur d'un coup possible avec prise de pion : orange
                            break;
                      case roque:
    			setBackground(new Color(247, 255, 60)); //couleur d'un roque possible : jaune
                            break;
           //         case echec:
          //  	setBackground(new Color(255, 0 , 0)); //couleur pour echec : rouge
          //          	    break;
                    }

    Citation Envoyé par joel.drigo Voir le message
    ajouter un code qui va parcourir toutes les cases,
    pour celle qui contiennent une pièce de la couleur opposée à couleurControle,
    simuler un mouvement vers le roi de la couleur couleurControle et et appeler les condition de validation ((deplacement.estValide()&& e.cheminPossible(deplacement)) || e.captureParUnPionPossible(deplacementdeplacement))
    pour tout deplacement simulé qui valide la condition : parcourir toutes les cases sauf celle de départ et celle d'arrivée et appeler setCoupPossible(CoupPOssible.echec) pour cette case

    tu auras les chemins de menaces de toutes les pièces en echec

    si un déplacement au moins valide la condition tu peux afficher ensuite un message "Echec au roi" avec un JOptionPane par exemple

    on peut aussi en plus détecter l'echec et mat sans être obligé de prendre le roi le coup d'après en ajoutant un petit bout de code qui consiste
    1) à faire la même chose que pour l'echec mais pour toutes les cases libres à coté du roi
    2) à tester si une autre pièce de la couleur du joueur menacé ne peut pas aller sur une des cases menacées (celles qu'on a détecté dans le test pour l'echec) : on peut le faire en mémorisant par exemple les cases détectées lors du test dans une liste, puis en parcourant toutes les cases qui ont une pièce de la couleur jouée, en simulant le déplacement entre ces cases et les cases de la liste, et si l'un valide deplacement.estValide() && e.cheminPossible(deplacement), ily a pas mat
    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
    else
    							{
    								tab[temp.getColonne()][temp.getLigne()].setBorder(BorderFactory.createLineBorder(new Color(255, 0, 0),0));
    								pieceTampon = null;
    								iconeTampon = null;
    								temp = null;
     
    							}
    							for (int ligne = 0; ligne < 8; ligne++) {
    								   for (int colonne = 0; colonne < 8; colonne++) {
    									     if(tab[colonne][ligne].getPiece().getCouleur().equals(COULEUR_JOUEUR_BLANC)?COULEUR_JOUEUR_NOIR:COULEUR_JOUEUR_BLANC){
     
     
    									     }
    									   }
    								}

    Je n'arrive pas obtenir la couleur de chaque pièce, il va direct dans case JLABEL et non dans case ou il y a la méthode getCouleur()...

  17. #137
    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 n'arrive pas obtenir la couleur de chaque pièce, il va direct dans case JLABEL et non dans case ou il y a la méthode getCouleur()...
    oui parce qu'il faut parcourir les cases par l'instance d'Echiquier pour avoir les pièces et leur couleur, et non pas par tab[][] qui ne contient que des icones

    regarde dans la méthode RAZ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for (int ligne = 0; ligne < 8; ligne++) 
    			for (int colonne = 0; colonne < 8; colonne++) {
    				tab[colonne][ligne].setIcon(null);
    				e.getCase(colonne, ligne).setPiece(null);
    			}
    }
    ici on parcourt les deux (tab[][] et e.getCase()
    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. #138
    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
    ici on parcourt les deux (tab[][] et e.getCase()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for (int ligne = 0; ligne < 8; ligne++) {
    								   for (int colonne = 0; colonne < 8; colonne++) {
    										if((e.getCase(colonne, ligne).getPiece().getCouleur()==(COULEUR_JOUEUR_BLANC)?COULEUR_JOUEUR_NOIR:COULEUR_JOUEUR_BLANC) != null){
     
     
    									   }
    								}
    On me propose de mettre != null

  19. #139
    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((e.getCase(colonne, ligne).getPiece().getCouleur()==(COULEUR_JOUEUR_BLANC)?COULEUR_JOUEUR_NOIR:COULEUR_JOUEUR_BLANC) != null){
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    e.getCase(colonne, ligne).getPiece().getCouleur()
    c'est un String

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    e.getCase(colonne, ligne).getPiece().getCouleur()==(COULEUR_JOUEUR_BLANC)
    tu compares 2 String (tu devrais d'ailleurs écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    e.getCase(colonne, ligne).getPiece().getCouleur().equals(COULEUR_JOUEUR_BLANC))
    ou mieux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COULEUR_JOUEUR_BLANC.equals(e.getCase(colonne, ligne).getPiece().getCouleur())

    donc si ce test de comparaison est vrai, alors la valeur résultant est
    COULEUR_JOUEUR_NOIR
    sinon c'est
    COULEUR_JOUEUR_BLANC

    que tu compares ensuite à null par != null

    or si c'est COULEUR_JOUEUR_NOIR, c'est pas null
    et si c'est COULEUR_JOUEUR_BLANC, c'est pas null non plus
    donc ta condition est toujours vrai
    sauf si e.getCase(colonne, ligne).getPiece() est null (ce qui est le cas lorsque la case est vide) : dans ce cas tu as une NullPointerException parce que tu appeles getCouleur() sur null

    je suppose que tu essayes de faire
    Citation Envoyé par joel.drigo Voir le message
    pour celle qui contiennent une pièce de la couleur opposée à couleurControle,
    crée d'abord une variable couleurAdverse ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String couleurAdverse=COULEUR_JOUEUR_BLANC.equals(couleurControle)?COULEUR_JOUEUR_NOIR:COULEUR_JOUEUR_BLANC
    ensuite tu fais ta boucle sur colonne et ligne,
    et tu testes si la case est non vide et que la pièce est de la couleur adverse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( e.getCase().getPiece()!=null && couleurAdverse.equals(e.getCase().getPiece().getCouleur())
    il y a une méthode dans la classe Case qui sert à faciliter ce genre de test :

    estOccupe(String couleur)

    donc tu peux écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    e.getCase().estOccupe(couleurAdverse)
    à la place de la condition

    avant de faire ce test tu as intéret à chercher la case qui contient le roi de la couleurControl, que tu vas devoir utiliser pour simuler les déplacements à tester à partir des cases correspondant à la condition précédente

    rappel :
    Citation Envoyé par joel.drigo Voir le message
    simuler un mouvement vers le roi de la couleur couleurControle
    pour ça se serait intéressant de faire une nouvelle méthode dans Echiquier qui cherche une case qui contient une pièce d'une couleur :

    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
     
    /**
    * cherche la position de la case qui contient la pièce de classe et couleur spécifiée
    */
    public Position getPosition(Class<? extends Piece> classPiece, String couleur) {
         return getPosition(classPiece, couleur, 0);
    }
     /**
    * cherche la position de la case qui contient la pièce de classe et couleur spécifiée en position index (0 pour la première, 1 pour la deuxième, etc...)
    */
    public Position getPosition(Class<? extends Piece> classPiece, String couleur, int index) {
      for (int colonne = 0; colonne < 8; colonne++)
        for (int ligne = 0; ligne < 8; ligne++)
          if ( plateau[colonne][ligne].estOccupe(couleur) && 
                classPiece.isInstance(plateau[colonne][ligne].getPiece())) {
            if (index<=0)
            return new Position(colonne,ligne);
            else index--;
          }
      return null; // on renvoit null si on ne trouve aucune pièce qui correspond aux critères spécifiés
    }
    classPiece.isInstance(plateau[colonne][ligne].getPiece())) correspond à
    un test du genre
    plateau[colonne][ligne].getPiece()) instanceof <nom de classe>
    ou la classe est contenue dans une variable

    pour appeler cette méthode pour chercher la case qui contient le roi de la couleurControle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Position positionRoiJoue = e.getPosition(Roi.class, couleurControle);
    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. #140
    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 pour ces explications, j'ai donc ajouter la nouvelle méthode à échiquier et continuer la méthode de l'echec :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    String couleurAdverse=COULEUR_JOUEUR_BLANC.equals(couleurControle)?COULEUR_JOUEUR_NOIR:COULEUR_JOUEUR_BLANC;
    							for (int ligne = 0; ligne < 8; ligne++) {
    								   for (int colonne = 0; colonne < 8; colonne++) {
    									   Position positionRoiJoue = e.getPosition(Roi.class, couleurControle);
    									   if (e.getCase().estOccupe(couleurAdverse)){
    										   
    										   
    									   }
    										
    									   }
    								}
    Mais getCase() pose problème..

+ Répondre à la discussion
Cette discussion est résolue.
Page 7 sur 12 PremièrePremière ... 34567891011 ... 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