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. #141
    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 : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jordan62 Voir le message
    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..
    oui getCase() prend en paramètre colonne et ligne !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Position positionRoiJoue = e.getPosition(Roi.class, couleurControle);
    for(int colonne=0; colonne<8;colonne++) {
        for(int ligne=0; ligne<8;ligne++) {
            if (e.getCase(colonne,ligne).estOccupe(couleurAdverse)){
     
            }
        }
    }

  2. #142
    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 : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    j'ai repensé à l'idée de marquer en rouge toutes les cases du déplacements sauf celle de départ et d'arrivée : ça marche pas bien pour le cavalier
    à la place peut être marquer le roi en rouge et les cases qui contiennent les pièces qui menacent ?

  3. #143
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 139
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    oui getCase() prend en paramètre colonne et ligne !

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

    Donc je dois modifier cela maintenant ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    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);
     
    								}

  4. #144
    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 : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    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
    String couleurAdverse=COULEUR_JOUEUR_BLANC.equals(couleurControle)?COULEUR_JOUEUR_NOIR:COULEUR_JOUEUR_BLANC;
    							Position positionRoiJoue = e.getPosition(Roi.class, couleurControle);
    							for(int colonne=0; colonne<8;colonne++) {
    							    for(int ligne=0; ligne<8;ligne++) {
    							        if (e.getCase(colonne,ligne).estOccupe(couleurAdverse)){
     
    							        }
    							    }
    							}
    Merci

    Donc je dois modifier cela maintenant ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    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);
     
    								}
    pour l'instance on est seulement entrain de chercher à afficher le roi en echec, pas de gérer la fin de partie

    dans ton if :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (e.getCase(colonne,ligne).estOccupe(couleurAdverse)){
     
    							        }
    il faut mettre du code qui va détermine si la piece qui occupe la case valide pour le if menace le roi :

    pour cela simule un déplacement
    donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Deplacement simuleDeplacementEchec=new Deplacement(new Position(colonne, ligne),positionRoiJoue);
    ensuite tu testes si ce déplacement menace le roi (avec estValide() , e.cheminPossible et e.capturePionPossible : on a déjà fait plusieurs fois ce test ailleurs)
    si la condition est validé tu applique CoupPossible.echec à la case du roi et de la pièce adverse (tu en a les coordonnées, c'est facile)

    à partir de ce moment normalement tu as le roi qui apparait en rouge avec les pieces qui le menace en rouge aussi

    ensuite il faut pouvoir savoir qu'au moins une piece menace le roi : information que tu peux mémorise dans un boolean qui tu set à true si la condition précédent est vrai

    à la fin de la boucle
    tu teste si ce boolean est vrai, alors tu affiche un joptionpane avec le message "echec au roi" : ce message n'est pas affiché au même endroit que celui de fin de partie, parce que la détection d'un roi en echec se fait au début du coup, alors que la fin de partie se fait quand le roi est "mangé", donc a la fin du coup

    ensuite, tu peux enrichir ce test pour détecter le mat : dans ce cas, tu peux faire le message de fin de partie à cet endroit : ce faisant celui qui existe déjà ne servira plus à rien, puisqu'on ne l'atteindra plus (on aura la fin de partie sans manger le roi, mais des qu'un echec et mat est detecté)

  5. #145
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 139
    Points : 24
    Points
    24
    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
    							String couleurAdverse=COULEUR_JOUEUR_BLANC.equals(couleurControle)?COULEUR_JOUEUR_NOIR:COULEUR_JOUEUR_BLANC;
    							Position positionRoiJoue = e.getPosition(Roi.class, couleurControle);
    							for(int colonne=0; colonne<8;colonne++) {
    							    for(int ligne=0; ligne<8;ligne++) {
    							        if (e.getCase(colonne,ligne).estOccupe(couleurAdverse)){
    							        	Deplacement simuleDeplacementEchec=new Deplacement(new Position(colonne, ligne),positionRoiJoue);
    							        		if ((e.getCase(colonne,ligne).estValide(simuleDeplacementEchec) && e.cheminPossible(simuleDeplacementEchec)) || e.captureParUnPionPossible(simuleDeplacementEchec)){
    							        			e.getCase(colonne,ligne).CoupPossible.echec;
    							        		}
    							        }
    							    }
    							}
    Il faut utiliser positionroiJoue ?

    Merci

  6. #146
    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 : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    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
    							String couleurAdverse=COULEUR_JOUEUR_BLANC.equals(couleurControle)?COULEUR_JOUEUR_NOIR:COULEUR_JOUEUR_BLANC;
    							Position positionRoiJoue = e.getPosition(Roi.class, couleurControle);
    							for(int colonne=0; colonne<8;colonne++) {
    							    for(int ligne=0; ligne<8;ligne++) {
    							        if (e.getCase(colonne,ligne).estOccupe(couleurAdverse)){
    							        	Deplacement simuleDeplacementEchec=new Deplacement(new Position(colonne, ligne),positionRoiJoue);
    							        		if ((e.getCase(colonne,ligne).estValide(simuleDeplacementEchec) && e.cheminPossible(simuleDeplacementEchec)) || e.captureParUnPionPossible(simuleDeplacementEchec)){
    							        			e.getCase(colonne,ligne).CoupPossible.echec;
    							        		}
    							        }
    							    }
    							}
    Il faut utiliser positionroiJoue ?

    Merci
    oui

    pour mettre la case du roi en rouge il suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab[positionroiJoue.getColonne()][positionroiJoue.getLigne()].setCoupPossible(CoupPossible.echec);
    à la place de e.getCase(colonne,ligne).CoupPossible.echec qui ne doit pas marcher (CopuPossible est une énumération qu'on a mis dans CaseLabel, pas dans Case)
    et juste après tu fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab[colonne][ligne].setCoupPossible(CoupPossible.echec);
    pour mettre en rouge la pièce qui prend le roi

    tu noteras que lorsque le joueur mis en echec joue, on calcule les couleurs correspondant au déplacement possibles, aux pèces qu'on peut prendre, etc... ces changements de couleur vont probablement supprimer ceux qu'on fait pour le marquage qu'on est en train de faire pour l'echec : si tu veux pouvoir les conserver (c'est à dire les remettre à chaque fois que le joueur change de pièce), tu peux prendre tout le bout de code que tu es en train de faire pour traiter le cas de l'echec au roi le mettre dans une méthode que tu ajoutes à fenetre jeu : comme ça tu peux l'appeler aux 2 endroits nécessaires

    on peut aussi ne pas réutilsier le mêm code, refaire des tests similaires dans la boucle qu'on utilise pour les CoupPossible prisepion, mouvement, roque, etc... pour le gérer dans la boucle (une sorte de mix entre les 2 )

  7. #147
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 139
    Points : 24
    Points
    24
    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
    String couleurAdverse=COULEUR_JOUEUR_BLANC.equals(couleurControle)?COULEUR_JOUEUR_NOIR:COULEUR_JOUEUR_BLANC;
    							Position positionRoiJoue = e.getPosition(Roi.class, couleurControle);
    							for(int colonne=0; colonne<8;colonne++) {
    							    for(int ligne=0; ligne<8;ligne++) {
    							        if (e.getCase(colonne,ligne).estOccupe(couleurAdverse)){
    							        	Deplacement simuleDeplacementEchec=new Deplacement(new Position(colonne, ligne),positionRoiJoue);
    							        		if ((e.getCase(colonne,ligne).estValide(simuleDeplacementEchec) && e.cheminPossible(simuleDeplacementEchec)) || e.captureParUnPionPossible(simuleDeplacementEchec)){
    							        			tab[positionRoiJoue.getColonne()][positionRoiJoue.getLigne()].setCoupPossible(CoupPossible.echec);
    							        			tab[colonne][ligne].setCoupPossible(CoupPossible.echec);}
    							        }
    							    }
    							}
    On doit appliqué la méthode estValide sur quoi ? (j'ai essayé tab[position....][..] et egetcase mais sa ne fonctionne pas )

  8. #148
    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 : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    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
    String couleurAdverse=COULEUR_JOUEUR_BLANC.equals(couleurControle)?COULEUR_JOUEUR_NOIR:COULEUR_JOUEUR_BLANC;
    							Position positionRoiJoue = e.getPosition(Roi.class, couleurControle);
    							for(int colonne=0; colonne<8;colonne++) {
    							    for(int ligne=0; ligne<8;ligne++) {
    							        if (e.getCase(colonne,ligne).estOccupe(couleurAdverse)){
    							        	Deplacement simuleDeplacementEchec=new Deplacement(new Position(colonne, ligne),positionRoiJoue);
    							        		if ((e.getCase(colonne,ligne).estValide(simuleDeplacementEchec) && e.cheminPossible(simuleDeplacementEchec)) || e.captureParUnPionPossible(simuleDeplacementEchec)){
    							        			tab[positionRoiJoue.getColonne()][positionRoiJoue.getLigne()].setCoupPossible(CoupPossible.echec);
    							        			tab[colonne][ligne].setCoupPossible(CoupPossible.echec);}
    							        }
    							    }
    							}
    On doit appliqué la méthode estValide sur quoi ? (j'ai essayé tab[position....][..] et egetcase mais sa ne fonctionne pas )
    estValide est une méthode de Piece (regarde ailleurs ou c'est appelé) :
    donc tout simplement
    e.getCase(colonne,ligne).getPiece().estValide(simuleDeplacementEchec)

  9. #149
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 139
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    estValide est une méthode de Piece (regarde ailleurs ou c'est appelé) :
    donc tout simplement
    e.getCase(colonne,ligne).getPiece().estValide(simuleDeplacementEchec)
    Merci sa fonctionne (case rouge quand le roi est en echec)

    "pour mettre en rouge la pièce qui prend le roi"
    Est-ce nécessaire d'afficher ceci ?

    Merci

  10. #150
    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 : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jordan62 Voir le message
    Merci sa fonctionne (case rouge quand le roi est en echec)

    "pour mettre en rouge la pièce qui prend le roi"
    Est-ce nécessaire d'afficher ceci ?

    Merci
    c'est toi qui voit...c'est ton programme après tout...

    si tu penses qu'afficher le roi en rouge pour montrer qu'il y a echec au roi est suffisant, ça me va très bien. le joueur peut tout aussi bien chercher quelles pièces menacent son roi !

    c'est pareil pour le joptionpane : j'ai parlé de ça parce qu'en général aux echecs on annonce que le roi est en echec, mais le roi en rouge peut être suffisant

    si tu n'affiches que le roi en rouge, c'est plus la peine de faire ce que je disais dans le post précédent, à savoir remettre les cases en rouge à chaque fois que le joueur change de pièce sans jouer : à moins que je me trompe, il n'existe pas de cas ou tu affiches une case verte, orange ou jaune qui puisse etre le roi, donc le roi restera rouge tant que le joueur ne joue pas

  11. #151
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 139
    Points : 24
    Points
    24
    Par défaut
    Merci je vais laisser comme cela c'est déjà plus que pas mal!

    Donc pour gagner, il faudrait que le roi n'est plus aucune case verte et que des cases rouges autour de lui non ?

  12. #152
    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 : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jordan62 Voir le message
    Merci je vais laisser comme cela c'est déjà plus que pas mal!

    Donc pour gagner, il faudrait que le roi n'est plus aucune case verte et que des cases rouges autour de lui non ?
    regarde dans un des précédents posts : j'ai mis les condtions pour le mat

    c'est en effet ça (plus le roi en rouge évidemment) mais aussi (et c'est indispensable) qu'aucune pièce de sa couleur puisse se déplacer pour barrer le déplacement qu'une pièce adverse utilise pour le prendre, ou prendre la pièce qui le menace

    en gros, pour chaque simulDeplacementEchec, pour chacune des cases parcouru au cours du déplacement (sauf la case du roi, y compris la case de la pièce adverse), vérifier qu'une des pièces de la couleurControle ne puisse pas avoir un déplacement valide, cheminPossible ou captureParUnPionPossible (et même prisePionEnPassant en fait, puisqu'un pion peut menacer le roi d'echec et mat et etre prenable en passant), vers l'une de ces cases, qui permettrait au roi de ne plus être en echec du tout : donc que tous les simulDeplacementEchec soit invalidés par le déplacement de cette pièce

    c'est la cerise sur le gâteau : c'est toi qui voit si tu veux te lancer la dedans ou si le programme en l'état est suffisant

    tu as tout le week end : mais peut etre vaudrait il mieux que tu revoies tout ce que tu as fait pour assurer ta soutenance lundi, qui d'ajouter une nouvelle fonction qui en jetterait mais en même temps que tu ne sois pas complètement au point pour faire ta présentation : le mieux est parfois l'ennemi du bien

  13. #153
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 139
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    regarde dans un des précédents posts : j'ai mis les condtions pour le mat

    c'est en effet ça (plus le roi en rouge évidemment) mais aussi (et c'est indispensable) qu'aucune pièce de sa couleur puisse se déplacer pour barrer le déplacement qu'une pièce adverse utilise pour le prendre, ou prendre la pièce qui le menace

    en gros, pour chaque simulDeplacementEchec, pour chacune des cases parcouru au cours du déplacement (sauf la case du roi, y compris la case de la pièce adverse), vérifier qu'une des pièces de la couleurControle ne puisse pas avoir un déplacement valide, cheminPossible ou captureParUnPionPossible (et même prisePionEnPassant en fait, puisqu'un pion peut menacer le roi d'echec et mat et etre prenable en passant), vers l'une de ces cases, qui permettrait au roi de ne plus être en echec du tout : donc que tous les simulDeplacementEchec soit invalidés par le déplacement de cette pièce

    c'est la cerise sur le gâteau : c'est toi qui voit si tu veux te lancer la dedans ou si le programme en l'état est suffisant

    tu as tout le week end : mais peut etre vaudrait il mieux que tu revoies tout ce que tu as fait pour assurer ta soutenance lundi, qui d'ajouter une nouvelle fonction qui en jetterait mais en même temps que tu ne sois pas complètement au point pour faire ta présentation : le mieux est parfois l'ennemi du bien
    Oui c'est vrai , je vais me consacré a le comprendre , mais la je ne peux le laisser comme sa pour finir la partie.
    Je m'y connais pas trop aux échecs... Mais il me semble qu'on ne doit pas le manger.
    Je vais essayer la méthode plus "simple".


    La procédure de sauvegarde/chargement de partie est-elle longue a faire?
    Faut-il juste mémoriser l'emplacement des pions ?



    J'aurais aimé (dans la mesure du possible) faire un menu fichier en haut pour y être commencé , terminé , regle (avec une page qui s'ouvre pour indiquer les règles), quitter.
    Est-ce possible ?

    Merci

  14. #154
    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 : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jordan62 Voir le message
    Oui c'est vrai , je vais me consacré a le comprendre , mais la je ne peux le laisser comme sa pour finir la partie.
    Je m'y connais pas trop aux échecs... Mais il me semble qu'on ne doit pas le manger.
    Normalement oui, le roi ne peut pas être pris : le coup d'avant, si le roi est en echec et ne peut que se mettre en echec en bougeant et qu'aucune des ses autres pièces ne peut le sortir de la situation d'echec, il y a echec est mat.

    maintenant tu n'es peut être pas obligé d'implémenter toutes les règles. parce que si c'est le cas, il reste aussi toutes les règles du pat : et là tu vas pas chomé ce week end si tu veux les implémenter

    Citation Envoyé par Jordan62 Voir le message
    Je vais essayer la méthode plus "simple".



    La procédure de sauvegarde/chargement de partie est-elle longue a faire?
    Faut-il juste mémoriser l'emplacement des pions ?
    attention pour moi, il y a 2 types de sauvegardes, donc une seul est lié au chargement

    1) on veut sauvegarder la partie pour avoir un fichier texte de description de partie d'echec standard : par exemple en notation algébrique abrégé
    genre e2-e4, Cf6xe4, ...

    c'est relativement facile et rapide avec la classe Partie qu'on a faite

    2) on veut sauvegarder pour recharger la partie, pour faire une pause et continuer à jouer plus tard
    dans ce cas on va prendre une photo de l'echiquier vers un fichier xml, ou un fichier texte, ou binaire même : c'est très facile aussi
    et pour recharger c'est pas très difficile non plus







    Citation Envoyé par Jordan62 Voir le message




    J'aurais aimé (dans la mesure du possible) faire un menu fichier en haut pour y être commencé , terminé , regle (avec une page qui s'ouvre pour indiquer les règles), quitter.
    Est-ce possible ?

    Merci
    bien sur que c'est possible, tu peux ajouter tous les boutons que tu veux
    regarde la variable panelControle de FenetreJeu : par contre le layouting est un peu foireux (virer le layout et forcer les tailles des boutons a des tailles fixes n'est pas très souple) et ça va pas nous faciliter la présentation : il va falloir juste ajuster petit à petit les tailles des boutons pour faire rentrer les boutons que tu veux ajouter

    ce que tu peux faire c'est faire une grille sur papier avec tous les boutons : tu reportes les dimensions qui sont mises dans le programme, et tu répartis
    ensuite tu reportes dans le code

    par exemple tu trouveras le dimensionnement du bouton Commencer de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    boutonDebuter.setBounds(new Rectangle(15, 10, 130, 25));

  15. #155
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 139
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Normalement oui, le roi ne peut pas être pris : le coup d'avant, si le roi est en echec et ne peut que se mettre en echec en bougeant et qu'aucune des ses autres pièces ne peut le sortir de la situation d'echec, il y a echec est mat.

    maintenant tu n'es peut être pas obligé d'implémenter toutes les règles. parce que si c'est le cas, il reste aussi toutes les règles du pat : et là tu vas pas chomé ce week end si tu veux les implémenter



    attention pour moi, il y a 2 types de sauvegardes, donc une seul est lié au chargement

    1) on veut sauvegarder la partie pour avoir un fichier texte de description de partie d'echec standard : par exemple en notation algébrique abrégé
    genre e2-e4, Cf6xe4, ...

    c'est relativement facile et rapide avec la classe Partie qu'on a faite

    2) on veut sauvegarder pour recharger la partie, pour faire une pause et continuer à jouer plus tard
    dans ce cas on va prendre une photo de l'echiquier vers un fichier xml, ou un fichier texte, ou binaire même : c'est très facile aussi
    et pour recharger c'est pas très difficile non plus









    bien sur que c'est possible, tu peux ajouter tous les boutons que tu veux
    regarde la variable panelControle de FenetreJeu : par contre le layouting est un peu foireux (virer le layout et forcer les tailles des boutons a des tailles fixes n'est pas très souple) et ça va pas nous faciliter la présentation : il va falloir juste ajuster petit à petit les tailles des boutons pour faire rentrer les boutons que tu veux ajouter

    ce que tu peux faire c'est faire une grille sur papier avec tous les boutons : tu reportes les dimensions qui sont mises dans le programme, et tu répartis
    ensuite tu reportes dans le code

    par exemple tu trouveras le dimensionnement du bouton Commencer de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    boutonDebuter.setBounds(new Rectangle(15, 10, 130, 25));

    Merci de votre réponse,
    Concernant l'échec et mat, une simple fin sans trop de condition serait le top


    Pour la sauvegarde/chargement , la deuxième méthode est parfaite !


    Et enfin pour le fichier, je ne suis pas sur de mettre bien expliquer,
    J'aurais aimé un menu Fichier (comme on a en haut Fichier edition options)
    En passant sur Fichier, un menu déroulerais et montrerait les choix disponible (commencé, terminé, régle et quitter)


    Merci

  16. #156
    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 : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jordan62 Voir le message
    Et enfin pour le fichier, je ne suis pas sur de mettre bien expliquer,
    J'aurais aimé un menu Fichier (comme on a en haut Fichier edition options)
    En passant sur Fichier, un menu déroulerais et montrerait les choix disponible (commencé, terminé, régle et quitter)

    Merci
    ah oui ok, je vois j'avais pas capté en effet

    si tu n'as aucun problème avec l'anglais, il y a un tutorial
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://docs.oracle.com/javase/tutorial/uiswing/components/menu.html
    sinon on doit pouvoir trouver ça dans les tutoriaux du site developpez.com

    ce n'est pas très difficile si tu regardes l'exemple donné sur le tutorial

  17. #157
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 139
    Points : 24
    Points
    24
    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
    		joueurnoir.setLayout(new FlowLayout());
    		joueurnoir.add(jnoir);
    		JMenuBar menuBar;
    		JMenu menu, submenu;
    		JMenuItem menuItem;
    		JRadioButtonMenuItem rbMenuItem;
    		JCheckBoxMenuItem cbMenuItem;
     
    		//Create the menu bar.
    		menuBar = new JMenuBar();
     
    		//Build the first menu.
    		menu = new JMenu("Fichier");
    		menu.setMnemonic(KeyEvent.VK_A);
    		menuBar.add(menu);
     
    		//a group of JMenuItems
    		menuItem = new JMenuItem("Commencé",
    		                         KeyEvent.VK_T);
    		menuItem.setAccelerator(KeyStroke.getKeyStroke(
    		        KeyEvent.VK_1, ActionEvent.ALT_MASK));
    		menu.add(menuItem);
     
    		//a group of JMenuItems
    		menuItem = new JMenuItem("Terminé",
    		                         KeyEvent.VK_T);
    		menuItem.setAccelerator(KeyStroke.getKeyStroke(
    		        KeyEvent.VK_2, ActionEvent.ALT_MASK));
    		menu.add(menuItem);
     
    		menuItem = new JMenuItem("Regles",
                    KeyEvent.VK_T);
    		menuItem.setAccelerator(KeyStroke.getKeyStroke(
    				KeyEvent.VK_3, ActionEvent.ALT_MASK));
    		menu.add(menuItem);
     
    		menuItem = new JMenuItem("Quitter",
                    KeyEvent.VK_T);
    		menuItem.setAccelerator(KeyStroke.getKeyStroke(
    				KeyEvent.VK_4, ActionEvent.ALT_MASK));
    		menu.add(menuItem);
     
     
    		//J'attribue la couleur aux cases
    J'ai réalisé la structure mais il ne s'affiche pas (Je n'ai pas encore fait si l'utilisateur clique sur un des noms)




    Edit : j'avais mis l'ancien code

  18. #158
    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 : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    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
    JMenuBar menuBar;
    JMenu menu, submenu;
    JMenuItem menuItem;
    JRadioButtonMenuItem rbMenuItem;
    JCheckBoxMenuItem cbMenuItem;
     
     
    ...
    frame.setJMenuBar(theJMenuBar);
    J'ai réalisé la structure mais il ne s'affiche pas (Je n'ai pas encore fait si l'utilisateur clique sur un des noms)
    remplace theJMenuBar par menuBar et vire les trois petits points évidemments, et ça marchera (en tout cas moi ça marche)

  19. #159
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 139
    Points : 24
    Points
    24
    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
    	joueurnoir.add(jnoir);
    		JMenuBar menuBar;
    		JMenu menu, submenu;
    		JMenuItem menuItem;
    		//Create the menu bar.
    		menuBar = new JMenuBar();
     
    		//Build the first menu.
    		menu = new JMenu("Fichier");
    		menu.setMnemonic(KeyEvent.VK_A);
    		menuBar.add(menu);
     
    		//a group of JMenuItems
    		menuItem = new JMenuItem("Commencé",
    		                         KeyEvent.VK_C);
    		menuItem.setAccelerator(KeyStroke.getKeyStroke(
    		        KeyEvent.VK_1, ActionEvent.ALT_MASK));
    		menu.add(menuItem);
     
    		//a group of JMenuItems
    		menuItem = new JMenuItem("Terminé",
    		                         KeyEvent.VK_T);
    		menuItem.setAccelerator(KeyStroke.getKeyStroke(
    		        KeyEvent.VK_2, ActionEvent.ALT_MASK));
    		menu.add(menuItem);
     
    		menuItem = new JMenuItem("Regles",
                    KeyEvent.VK_R);
    		menuItem.setAccelerator(KeyStroke.getKeyStroke(
    				KeyEvent.VK_3, ActionEvent.ALT_MASK));
    		menu.add(menuItem);
     
    		menuItem = new JMenuItem("Quitter",
                    KeyEvent.VK_Q);
    		menuItem.setAccelerator(KeyStroke.getKeyStroke(
    				KeyEvent.VK_4, ActionEvent.ALT_MASK));
    		menu.add(menuItem);
    		 setJMenuBar(menuBar);
    J'ai enfin réussi a l'afficher,
    Je dois faire comment pour associé chaque clic sur un nom ?

    Merci

  20. #160
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2013
    Messages : 139
    Points : 24
    Points
    24
    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
    		joueurnoir.setLayout(new FlowLayout());
    		joueurnoir.add(jnoir);
    		JMenuBar menuBar;
    		JMenu menu;
    		JMenuItem menuItem;
    		//Create the menu bar.
    		menuBar = new JMenuBar();
    
    		//Build the first menu.
    		menu = new JMenu("Fichier");
    		menu.setMnemonic(KeyEvent.VK_A);
    		menuBar.add(menu);
    
    		//a group of JMenuItems
    		menuItem = new JMenuItem("Commencé",
    		                         KeyEvent.VK_C);
    		menuItem.setAccelerator(KeyStroke.getKeyStroke(
    		        KeyEvent.VK_1, ActionEvent.ALT_MASK));
    		menu.add(menuItem);
    		
    		//a group of JMenuItems
    		menuItem = new JMenuItem("Terminé",
    		                         KeyEvent.VK_T);
    		menuItem.setAccelerator(KeyStroke.getKeyStroke(
    		        KeyEvent.VK_2, ActionEvent.ALT_MASK));
    		menu.add(menuItem);
    		
    		menuItem = new JMenuItem("Regles",
                    KeyEvent.VK_R);
    		menuItem.setAccelerator(KeyStroke.getKeyStroke(
    				KeyEvent.VK_3, ActionEvent.ALT_MASK));
    		menu.add(menuItem);
    		
    		menuItem = new JMenuItem("Quitter",
                    KeyEvent.VK_Q);
    		menuItem.setAccelerator(KeyStroke.getKeyStroke(
    				KeyEvent.VK_4, ActionEvent.ALT_MASK));
    		menu.add(menuItem);
    		class menuItem extends AbstractAction {
    		    public menuItem(String text,Integer mnemonic) {
    		        super(text);
    		        putValue(MNEMONIC_KEY, mnemonic);
    		    }
    		    public void actionPerformed(ActionEvent e) {
    		        displayResult("Action for first button/menu item", e);
    		    }
    		}
    		 setJMenuBar(menuBar);
    J'ai tenté cela sans grand espoir...

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

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, 20h17
  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, 11h44
  3. directx et java?? possible??
    Par jiraiya dans le forum DirectX
    Réponses: 3
    Dernier message: 09/07/2002, 19h55
  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: 24/05/2002, 23h24
  5. Service de nommage java C++
    Par Anonymous dans le forum CORBA
    Réponses: 3
    Dernier message: 15/04/2002, 12h48

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