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. #161
    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
    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
    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...
    oups, excuse moi, je suis sur un problème ardu que je voudrais boucler ce soir avant de partir en week end

    pour réagir au clic sur un menu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    menuItem.addActionListener(new ActionListener() {
     
    			@Override
    			public void actionPerformed(ActionEvent paramActionEvent) {
     
    ... ici le code que tu veux faire ...
     
    			}
    		});
    par exemple pour le cas de ton menu Commencer (et pas Commencé )

    tu as écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    menuItem = new JMenuItem("Commencé",
    KeyEvent.VK_C);
    menuItem.setAccelerator(KeyStroke.getKeyStroke(
    KeyEvent.VK_1, ActionEvent.ALT_MASK));
    menu.add(menuItem);
    déjà sache que le KeyEvent.VK_C correspond à la touche de raccourci rapide (la lettre souligné dans ton menu) C ça va très bien

    menuItem.setAccelerator(KeyStroke.getKeyStroke(
    KeyEvent.VK_1, ActionEvent.ALT_MASK))

    c'est le raccourci clavier (ALT-1 ici)

    ensuite donc tu ajoute ton ActionListener :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    menuItem.addActionListener(new ActionListener() {
     
    			@Override
    			public void actionPerformed(ActionEvent paramActionEvent) {
     
    ... ici le code que tu veux faire ...
     
    			}
    		})
    le code qu'il faut faire quand on clique sur le menu commencer, c'est le code qui est fait actuellement quand on clique sur le bouton commencer :

    tu le trouves donc dans la méthode mouseClicked, c'est tout le bout de code qu'il y a dans ce test (sans le if bien sur parce que lui sert à tester qu'on a cliqué sur le bouton boutonDebuter) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (eve.getSource() == boutonDebuter) {
    				//initialise le champ texte, apelle la methode debuter, et initialise toute les variables 
     
    ....
     
    			}
    que tu dois donc déplacer dans ton action listener

    si tu remplaces tous tes boutons par des menus, je suppose que tu va supprimer tes boutons, il ne restera donc plus que le bloc suivant dans ton mouseClicked :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <s>else</s> if (eve.getSource() instanceof JLabel) // donc on a cliqué sur un Label
     
    ...
     
    }
    qui correspond à un clic dans l'échiquier (sur une CaseLabel)
    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. #162
    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 fait commencer et terminer, j'ai supprimer les anciens etc..

    Comment centrer un texte ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		champTexte.setBounds(new Rectangle(160, 10, 215, 25));
    		champTexte.setText("Bienvenue");
            champTexte.setEnabled(false);
            champTexte.setCaretPosition(JLabel.CENTER);


    Merci


    Deuxieme question , j'aurais aimé avoir une autre fenêtre qui s'ouvres avec les règles quand je clique sur le menu fichier -> Règles


    Merci

  3. #163
    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
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jordan62 Voir le message
    Merci j'ai fait commencer et terminer, j'ai supprimer les anciens etc..

    Comment centrer un texte ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		champTexte.setBounds(new Rectangle(160, 10, 215, 25));
    		champTexte.setText("Bienvenue");
            champTexte.setEnabled(false);
            champTexte.setCaretPosition(JLabel.CENTER);


    Merci
    c'est ce que je te disais aucun layout n'est utilisé, donc les champs sont positionné avec des coordonnées numérique

    j'ai pas vraiment le temps ce soir de t'expliquer ça
    je verrai si j'ai le temps demain mais ça m'étonnerait
    dimanche peut être en début d'am

    sinon cherche swing layout center : il y a des centaines d'exemple sur le web

    Citation Envoyé par Jordan62 Voir le message


    Deuxieme question , j'aurais aimé avoir une autre fenêtre qui s'ouvres avec les règles quand je clique sur le menu fichier -> Règles


    Merci
    pareil, pas le temps d'entrée dans le détail

    disons que tu as 2 types de fenêtre en gros : les modales qui bloquent les fenêtre qui les ouvrent, sinon les non modale qui peuvent s'ouvrir en parallèle sans bloquer la fenêtre qui les ouvrent

    quand on fait des fenêtre non modale, on fait en générale des JFrame, comme FenetreJeu : en gros tu fais new JFrame(), tu mets ce que tu veux dedans... etc... là pareil tu trouveras un foule d'exemple tout fait
    sinon pour les modales il y a les dialogues (JDialog, ou JOptionPane pour afficher un message : peut être un peu succint pour afficher les règles des echecs)

    pareil tu tapes java swing JDialog et tu auras des centaines d'exemples

    ensuite pour mettre du texte dans une fenêtre ou un dialogue, soit tu utilises un composant swing, un JLabel, un JTextField, un JTextArea, ou autre

    soit tu dessines du texte directement dans ta fenêtre : c'est un peu plus fastidieux mais tu peux faire ce que tu veux :
    regarde cet exemple : http://www.tutorialspoint.com/javaexamples/gui_font.htm

    une solution qui peut être pas mal c'est d'utiliser un JLabel et d'y mettre du html : j'essaye de trouver un petit moment demain pour te donner les détails
    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. #164
    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 beaucoup,

    Si vous pouvez pas ce n'est pas grave,
    Par contre le plus important , c'est l'échec et mat et la sauvegarde / charger si vous pouviez m'aider un peu s'il vous plait...


    Quitte a ne pas faire les règles tant que j'ai ces méthodes la ....


    J'abuse...

  5. #165
    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
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jordan62 Voir le message
    Merci j'ai fait commencer et terminer, j'ai supprimer les anciens etc..

    Comment centrer un texte ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		champTexte.setBounds(new Rectangle(160, 10, 215, 25));
    		champTexte.setText("Bienvenue");
            champTexte.setEnabled(false);
            champTexte.setCaretPosition(JLabel.CENTER);


    Merci


    Deuxieme question , j'aurais aimé avoir une autre fenêtre qui s'ouvres avec les règles quand je clique sur le menu fichier -> Règles


    Merci
    pour info
    le caret c'est le curseur de saisie (et cursor c'est le pointeur de la souris)

    bon la je te laisse vraiment, a demain
    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. #166
    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
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jordan62 Voir le message
    Merci beaucoup,

    Si vous pouvez pas ce n'est pas grave,
    Par contre le plus important , c'est l'échec et mat et la sauvegarde / charger si vous pouviez m'aider un peu s'il vous plait...


    Quitte a ne pas faire les règles tant que j'ai ces méthodes la ....


    J'abuse...
    bon de retour chez oim, je passe un petit moment pour 2 ou 3 trucs rapide

    le mat ce sera trop long, ça sera demain

    la sauvegarde ça peut être long, mais on peut commencer, le chargement ce sera plus long, çà attendra demain aussi

    juste en passant pour le texte à centrer, déjà c'est pas très malin d'avoir utiliser JTextField qui fait pour faire de la saisie: un JLabel aurait été plus adapté

    pour centrer le texte contenu dans un JTextField :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    champTexte.setHorizontalAlignment(SwingConstants.CENTER);
    pour un jlabel on peut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JLabel champTexte= new JLabel("",SwingConstants.CENTER);

    donc passons à la sauvegarde :

    donc on part sur l'idée de sauvegarder une "photo instantané" du jeu, de manière à pouvoir la recharger pour continuer à jouer plus tard

    on a plusieurs façon de faire ça : on peut sauvegarder les positions des pièces et 2 ou 3 autres informations supplémentaires (qui est entrain de jouer, le dernier coup joué pour la prise en passant, le fait que le roque a déjà été fait, etc...) notre fichier sera peut être plus petit, mais on va gérer que des cas particuliers et on risque d'en oublier et d'etre bien emmerdé

    le plus simple c'est de sauvegarde tous les coups de la partie

    ça tombe bien on a fait une classe pour les stocker

    ensuite il faut choisir un format de stockage : texte,binaire, xml, la ça dépend de ce que tu veux, mais disons qu'on va faire du binaire, c'est simple à gérer dans notre cas (voir plus loin)

    donc décrivons en gros notre procédure de sauvegarde :

    on clic sur un menu
    ça demande un fichier pour sauvegarder dedans (on peut décider d'une extension par exemple .rcl)
    et ça sauvegarde la partie dans le fichier

    on va ajouter une méthode save() à FenetreJeu, qu'on appellera dans l'ActionListener du menuitem voulu

    donc pour demander le fichier ,
    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
    public void save() {
    		JFileChooser filechooser = new JFileChooser();
    		filechooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
    		filechooser.setFileFilter( new FileNameExtensionFilter(
    		        "Partie de Jeu d'echec", "rcl", "rcl"));
     
    		int returnVal = filechooser.showSaveDialog(null);
     
    	    if (returnVal == JFileChooser.APPROVE_OPTION) {
     
                      File file=filechooser.getSelectedFile(); 
    	    	  // là on a un fichier on va ecrire dedans
                    ...
     
    	    } 
    	}

    avant de faire l'écriture du fichier proprement dite on va s'attaquer à l'aspect codage

    on va transformer les coups en chaines de caractères qu'on sera capable de décoder au moment du chargement

    on va écrire une méthode encode() dans la classe Coup


    donc pour rappel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public static class Coup {
    		private String couleur;
    		private Piece piecejouee;
    		private Position depart, arrivee;
    		private Piece pieceprise;
    ...
    }
    on doit stocker les informations suivantes :
    - une couleur (on a pas besoin de sauvegarde la vraie couleur, d'ailleurs vaut mieux pas des fois qu'on change la chaine "jaune et rouge" en "sang et or" et on pourrait plus charger les vieilles partie) donc on va utiliser un code 0 ou 1
    - un nom de pièce : la aussi on peut utiliser un code simplifié
    R, D, F, T, C, P (le code ascii de la lettre)
    - un position de départ, donc des coordonnées
    - une d'arrivee
    - un code de pièce prise

    on a pas vraiment besoin de position de départ et de code de pièce prise, on peut les reconstituer, mais ce sera plus simple en les ayant, donc on va les garder, ça mange pas de pain

    pour les coordonnées, un chiffre il n'y a que 8 colonnes et lignes

    on aura un fichier très compact constituer de série d'octet représentant un coup

    on pourrait encore plus compresser : noir ou blanc ç'est 2 valeurs donc ça prend qu'1 bit, 6 types de pieces ça tient sur 3 bits, 8 colonnes aussi, 8 lignes aussi,

    mais bon on va faire au plus simple

    on a trois informations qui tiennent sur un octet, et 2 qui tiennent sur 2

    donc il faut 7 octets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public byte[] encode(){
    			byte[] data=new byte[7];// on créé un tableau de 7 octets
    			data[0]=getCodeCouleur(FenetreJeu.COULEUR_JOUEUR_BLANC.equals(couleur));//couleur 
    			data[1]=getCodePiece(piecejouee); // code piece
    			data[2]=getCode(depart.getColonne()); // colonne départ
    			data[3]=getCode(depart.getLigne()); // ligne départ
    			data[4]=getCode(arrivee.getColonne()); // colonne arrivée
    			data[5]=getCode(arrivee.getLigne()); // ligne arrivée
    			data[6]=getCodePiece(pieceprise); // code piece
    			return data;
    }
    et chaque méthode de codage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private byte getCodeCouleur(boolean blanc) {
    	return (byte) (blanc?1:0); // 1 = blanc, 0 = noir
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private byte getCode(int value) {
    			return (byte) value;
    }
    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
    private byte getCodePiece(Piece piecejouee) {
    			if ( piecejouee instanceof Roi ) {
    				return 'R'; 
    			}
    			else if ( piecejouee instanceof Reine ) {
    				return 'D'; 
    			}
    			else if ( piecejouee instanceof Tour ) {
    				return 'T'; 
    			}
    			else if ( piecejouee instanceof Fou ) {
    				return 'F'; 
    			}
    			else if ( piecejouee instanceof Cavalier ) {
    				return 'C'; 
    			}
    			else if ( piecejouee instanceof Pion ) {
    				return 'P'; 
    			}
    			return 0; // pas de pièce
    }
    on pourrait utiliser des nombres de 0 à 7, mais bon ça un certain sens d'utiliser les lettres,

    donc ensuite pour sauver une partie complète, on va créer une méthode
    dans la classe partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public static void save(File file) {
     
    	}
    bon la suite au prochain épisode
    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.

  7. #167
    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
    Billets dans le blog
    2
    Par défaut
    maintenant pour écrire une partie dans un fichier, on va ajouter la méthode suivante à la classe Partie :

    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 static void save(File file) throws IOException {
    		OutputStream output = null;
    		try {
    			output=new BufferedOutputStream(new FileOutputStream(file));//on utilise un stream bufferisé pour ne pas a se soucier des octes
    			// on parcout tous les coups joués
    			for( Coup coup : coupsjoues ) {
    				output.write(coup.encode()); // les encoder et les écrires
    			}
    			output.flush(); //pour être sur que tous les octets sont écrits
    		}
    		finally {
    			if ( output!=null ) {
    				try {
    					output.close(); // on ferme le fichier
    				} catch (IOException e) {
    				}
    			}
    		}
    	}
    et pour l'appeler il suffit d'ajouter à notre sauvegarde de tout à l'heure :

    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 void save() {
    		JFileChooser filechooser = new JFileChooser();
    		filechooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
    		filechooser.setFileFilter( new FileNameExtensionFilter(
    		        "Partie de Jeu d'echec", "rcl", "rcl"));
     
    		int returnVal = filechooser.showSaveDialog(this);
     
    	    if (returnVal == JFileChooser.APPROVE_OPTION) {
     
                      File file=filechooser.getSelectedFile(); 
    	    	  // là on a un fichier on va ecrire dedans
                    try {
    	Partie.save(file);
    } catch (IOException e) {
    	JOptionPane.showMessageDialog(this, "Impossible de sauvegarder la partie", "Erreur", JOptionPane.ERROR_MESSAGE);
    }
     
    	    } 
    	}

    pour le chargement :

    on va d'abord faire l'inverse :
    choisir un fichier
    puis le lire, et créer les coups correspondant à ce qu'on lit, en créant une méthode decode()

    ensuite, on fera jouer automatiquement la partie pour arriver à l'état qu'on avait au moment de la sauvegarde
    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. #168
    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
    Billets dans le blog
    2
    Par défaut
    donc pour charger on va créer une méthode dans FenetreJeu q'on va appeler dans le menu Charger

    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 void load() {
    		JFileChooser filechooser = new JFileChooser();
    		filechooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
    		filechooser.setFileFilter( new FileNameExtensionFilter(
    		        "Partie de Jeu d'echec", "rcl", "rcl"));
     
    		int returnVal = filechooser.showOpenDialog(this);
    	    if (returnVal == JFileChooser.APPROVE_OPTION) {
     
    	    	File file=filechooser.getSelectedFile(); 
    	    	try {
      	    	PartieChargee partieChargee = Partie.load(file);
      	    	// on met à jour l'interface graphique a partir de partieChargée
     
      	    	Coup dernierCoupJoue=Partie.getDernierCoupJoue();
      	    	if( dernierCoupJoue==null ) {
      	    	// on a sauvée une partie non jouée
      	    	   couleurControl=COULEUR_JOUEUR_BLANC;
              }
              else {
      	    	   couleurControl=COULEUR_JOUEUR_BLANC.equals(coup.getCouleur())?COULEUR_JOUEUR_NOIR:COULEUR_JOUEUR_BLANC;
      	    	}
     
      	    	... ici on créé remplit l'échiquier des icones en utilisant PartieChargee.plateau
      	    	... et on remplit les panneaux de pièces prises, à partir de PartieChargee.pieceprisesParLesBlancs et PartieChargee.pieceprisesParLesNoirs
            } catch (IOException e) {
            	JOptionPane.showMessageDialog(this, "Impossible de charger la partie", "Erreur", JOptionPane.ERROR_MESSAGE);
            }
     
    	    }
    	}
    ça ressemble beaucoup à la méthode save, sauf pour la méthode utilisée pour ouvrir le dialogue de choix de fichier

    pour charger la partie on va créer une classe qui contient tout ce qui va nous permettre de créer une instance d'Echiquier à jour,
    de créer mettre les bons icones dans les CaseLabel et les panneaux des pièces prises et de déterminer la couleur du joueur qui doit jouer ensuite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class PartieChargee {
     
    	Case[][] plateau;
    	List<Piece> pieceprisesParLesBlancs;
    	List<Piece> pieceprisesParLesNoirs;
     
    }
    pour la couleur du prochain joueur, on pourra utiliser Partie.getDernierCoupJoue()

    ensuite on créer une méthode load(File file) dans Partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    public static PartieChargee load(File file) throws IOException {
     
    		// on crée un echiquier virtuel pour vérifier le fichier pendant le chargement et préparé le jeu
    		Case[][] plateau = new Case[8][8];
    		//pour préparer les panneaux des pièces prises
    		List<Piece> pieceprisesParLesBlancs = new ArrayList<Piece>();
    		List<Piece> pieceprisesParLesNoirs = new ArrayList<Piece>();
     
    		// on ne charge pas directement dans l'echiquier au cas ou on aurait une erreur en plein milieu,
    		//on aura pas des données pourries dans l'échiquier
     
    		// on initialise l'échiquier virtuel
    		// on reprend le code de FenetreJeu : on pourrait faire une méthode en commun
    		char[] ordrePiece = { 'T', 'C', 'F', 'D', 'R', 'F', 'C', 'T' };
    		int increment = 1;
    		int ligne = 0;
    		Piece tempo = null;
    		String couleur=FenetreJeu.COULEUR_JOUEUR_BLANC; 
     
    		// Je place les icones des pieces sur leur cases respectives
    		while (increment >= -1) {
    			for (int ctr = 0; ctr <= 7; ctr++) {
    				switch(ordrePiece[ctr])
    				{
    				case 'T':
    					tempo = new Tour(couleur);
    				break;
     
    				case 'C':
    					tempo = new Cavalier(couleur);
    				break;
     
    				case 'F':
    					tempo = new Fou(couleur);
    				break;
     
    				case 'D':
    					tempo = new Reine(couleur);
    				break;
     
    				case 'R':
    					tempo = new Roi(couleur);
    				break;
    				}
     
    				plateau[ctr][ligne]=new Case(tempo);
    				plateau[ctr][ligne + increment]=new Case(new Pion(couleur));
     
    			}
    			increment -= 2;
    			ligne = 7;
    			couleur=FenetreJeu.COULEUR_JOUEUR_NOIR; 
    		}
     
    		List<Coup> coupsjoues = new ArrayList<Coup>(); // pour lire les coups dans le fichier
    		byte[] data=new byte[7]; // pour lire un coup dans le fichier
    		InputStream input = null;
    		try {
    			input=new BufferedInputStream(new FileInputStream(file));//on utilise un stream bufferisé pour ne pas a se soucier des octes
     
    			// on parcourt le fichier, 
    			int read;
    			while ( (read=input.read(data))!=-1 ) {
    				if ( read<7 ) {
    					// pas assez de données lu
    					throw new IOException();
    				}
    				Coup coup = new Coup();
    				coup.decode(data, plateau);
    				coupsjoues.add(coup);
    				// on joue virtuellement le coup
    				plateau[coup.depart.getColonne()][coup.depart.getLigne()].setPiece(null);
    				plateau[coup.arrivee.getColonne()][coup.arrivee.getLigne()].setPiece(coup.piecejouee);
    				coup.piecejouee.enregistreDeplacement(true);
    				if ( coup.pieceprise!=null ) {
    					if ( FenetreJeu.COULEUR_JOUEUR_BLANC.equals(coup.couleur)) {
    						pieceprisesParLesBlancs.add(coup.pieceprise);
    					}
    					else {
    						pieceprisesParLesNoirs.add(coup.pieceprise);
    					}
    				}
    				// il y a le cas particulier du roque : on a sauvé que le mouvement du roi
    				if( coup.getPieceJouee() instanceof Roi ) {
    					int deplacementX=coup.getArrivee().getColonne()-coup.getDepart().getColonne();
    					if ( Math.abs(deplacementX)==2 ) {
    						// c'est un roque,il faut aussi bouger la tour
    						if ( deplacementX<0 ) {
    							// deplacement vers la gauche
    							plateau[coup.arrivee.getColonne()+1][coup.arrivee.getLigne()]=
    								plateau[0][coup.arrivee.getLigne()];
    							plateau[0][coup.arrivee.getLigne()]=null;
    						}
    						else {
    							// deplacement vers la droite
    							plateau[coup.arrivee.getColonne()-1][coup.arrivee.getLigne()]=
    								plateau[7][coup.arrivee.getLigne()];
    							plateau[7][coup.arrivee.getLigne()]=null;
    						}
    					}
    				}
    			}
     
     
    		}
    		finally {
    			if ( input!=null ) {
    				try {
    					input.close(); // on ferme le fichier
    				} catch (IOException e) {
    				}
    			}
    		}
     
    		// on a pas eu d'erreur jusque là
    		// on peut construire notre affichage à partir des données chargés 
    		Partie.reset();
    		Partie.coupsjoues.addAll(coupsjoues);
     
    		// on créé l'objet partiechargee pour retourner l'état de la partie chargée
    		PartieChargee partiechargee=new PartieChargee();
    		partiechargee.plateau=plateau;
    		partiechargee.pieceprisesParLesBlancs=pieceprisesParLesBlancs;
    		partiechargee.pieceprisesParLesNoirs=pieceprisesParLesNoirs;
     
    		return partiechargee;
    	}
    ensuite on va ajouter une méthode decode(byte[] data) dans la classe Coup :

    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 void decode(byte[] data, Case[][] plateau) throws IOException {
    			// on vérifie le tableau data
    			if ( data!=null && data.length>0 && data.length<8 ) {
    				couleur=decodeToCouleur(data[0]);
    				depart=new Position(decode(data[2]),decode(data[3]));
    				arrivee=new Position(decode(data[4]),decode(data[5]));
    				piecejouee=decodePiece(data[1],depart,data[0],plateau);
    				pieceprise=decodePiece(data[6],arrivee,1-data[0],plateau);
    			}
    			else {
    				throw new IOException();
    			}
    		}
     
    		private Piece decodePiece(byte code, Position position, int couleur, Case[][] plateau) throws IOException {
    			Piece piece = plateau[position.getColonne()][position.getLigne()].getPiece();
    			byte codepiece = getCodePiece(piece);
    			byte codecouleur = getCodeCouleur(couleur==1);
    			if (codepiece==code && codecouleur==getCodeCouleur(FenetreJeu.COULEUR_JOUEUR_BLANC.equals(piece.getCouleur()))) return piece;
    			throw new IOException();
    		}
     
    		private int decode(byte value) throws IOException {
                if ( value>=0 && value<8 ) {
                	return value;
                }
    			throw new IOException();
    		}
     
    		private String decodeToCouleur(byte code) throws IOException {
    			if ( code==1 ) return FenetreJeu.COULEUR_JOUEUR_BLANC;
    			else if ( code==0 ) return FenetreJeu.COULEUR_JOUEUR_NOIR;
    			else throw new IOException();
    		}
    il ne te reste plus que regénérer la partie graphique : tout ce qu'il faut pour le faire se trouve déjà dans la classe FenetreJeu
    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. #169
    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 tout !!

    J'ai juste trois petites erreur :
    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
    
    public void load() {
    		JFileChooser filechooser = new JFileChooser();
    		filechooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
    		filechooser.setFileFilter( new FileNameExtensionFilter(
    		        "Partie de Jeu d'echec", "rcl", "rcl"));
     
    		int returnVal = filechooser.showOpenDialog(this);
    	    if (returnVal == JFileChooser.APPROVE_OPTION) {
     
    	    	File file=filechooser.getSelectedFile(); 
    	    	try {
      	    	PartieChargee partieChargee = Partie.load(file);
      	    	// on met à jour l'interface graphique a partir de partieChargée
     
      	    	Coup dernierCoupJoue=Partie.getDernierCoupJoue();
      	    	if( dernierCoupJoue==null ) {
      	    	// on a sauvée une partie non jouée
      	    	   couleurControl=COULEUR_JOUEUR_BLANC;
              }
              else {
      	    	   couleurControl=COULEUR_JOUEUR_BLANC.equals(coup.getCouleur())?COULEUR_JOUEUR_NOIR:COULEUR_JOUEUR_BLANC;
      	    	}
     
      	    	//ici on créé remplit l'échiquier des icones en utilisant PartieChargee.plateau
      	    	// et on remplit les panneaux de pièces prises, à partir de PartieChargee.pieceprisesParLesBlancs et PartieChargee.pieceprisesParLesNoirs
            } catch (IOException e) {
            	JOptionPane.showMessageDialog(this, "Impossible de charger la partie", "Erreur", JOptionPane.ERROR_MESSAGE);
            }
     
    	    }
    Merci

  10. #170
    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
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jordan62 Voir le message
    Merci pour tout !!

    J'ai juste trois petites erreur :[code]
    tu as pu les corriger de toi même... sinon c'est un petit peu inquiétant pour lundi ?

    à la place de coup, c'est dernierCoupJoue bien sur

    à la place de couleurControl, c'est couleurControle, évidemment

    et pour Coup, y'a pas d'erreur, je t'ai mis que le code de la méthode, pas les import
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import projet.Partie.Coup
    tu peux écrire aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Partie.Coup dernierCoupJoue=Partie.getDernierCoupJoue();
    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. #171
    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'arrive à enregistrer la partie, , ensuite quand je fais pour la charger (je choisis le fichier) et la il me dit erreur, il reste donc a ouvrir le fichier ??

    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
    else {
            	  couleurControle=COULEUR_JOUEUR_BLANC.equals(dernierCoupJoue.getCouleur())?COULEUR_JOUEUR_NOIR:COULEUR_JOUEUR_BLANC;
      	    	}
     
      	    	//ici on créé remplit l'échiquier des icones en utilisant PartieChargee.plateau
      	    	// et on remplit les panneaux de pièces prises, à partir de PartieChargee.pieceprisesParLesBlancs et PartieChargee.pieceprisesParLesNoirs
            } catch (IOException e) {
            	JOptionPane.showMessageDialog(this, "Impossible de charger la partie", "Erreur", JOptionPane.ERROR_MESSAGE);
            }
     
    	    }else {
            	  couleurControle=COULEUR_JOUEUR_BLANC.equals(dernierCoupJoue.getCouleur())?COULEUR_JOUEUR_NOIR:COULEUR_JOUEUR_BLANC;
      	    	}
     
      	    	//ici on créé remplit l'échiquier des icones en utilisant PartieChargee.plateau
      	    	// et on remplit les panneaux de pièces prises, à partir de PartieChargee.pieceprisesParLesBlancs et PartieChargee.pieceprisesParLesNoirs
            } catch (IOException e) {
            	JOptionPane.showMessageDialog(this, "Impossible de charger la partie", "Erreur", JOptionPane.ERROR_MESSAGE);
            }
     
    	    }
    Je fais une boucle qui parcourt chaque case pour les remettre a leur place ?

    Merci

  12. #172
    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
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jordan62 Voir le message
    Merci...

    J'arrive à enregistrer la partie, , ensuite quand je fais pour la charger (je choisis le fichier) et la il me dit erreur, il reste donc a ouvrir le fichier ??
    tu as dupliqué un bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    else {
            	  couleurControle=COULEUR_JOUEUR_BLANC.equals(dernierCoupJoue.getCouleur())?COULEUR_JOUEUR_NOIR:COULEUR_JOUEUR_BLANC;
      	    	}
     
      	    	//ici on créé remplit l'échiquier des icones en utilisant PartieChargee.plateau
      	    	// et on remplit les panneaux de pièces prises, à partir de PartieChargee.pieceprisesParLesBlancs et PartieChargee.pieceprisesParLesNoirs
            } catch (IOException e) {
            	JOptionPane.showMessageDialog(this, "Impossible de charger la partie", "Erreur", JOptionPane.ERROR_MESSAGE);
            }
     
    	    }else {
            	  couleurControle=COULEUR_JOUEUR_BLANC.equals(dernierCoupJoue.getCouleur())?COULEUR_JOUEUR_NOIR:COULEUR_JOUEUR_BLANC;
      	    	}
     
      	    	//ici on créé remplit l'échiquier des icones en utilisant PartieChargee.plateau
      	    	// et on remplit les panneaux de pièces prises, à partir de PartieChargee.pieceprisesParLesBlancs et PartieChargee.pieceprisesParLesNoirs
            } catch (IOException e) {
            	JOptionPane.showMessageDialog(this, "Impossible de charger la partie", "Erreur", JOptionPane.ERROR_MESSAGE);
            }
     
    	    }
    Citation Envoyé par Jordan62 Voir le message
    Je fais une boucle qui parcourt chaque case pour les remettre a leur place ?
    Merci
    oui, pour commencer, à l'endroit ou j'ai mis le commentaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //ici on créé remplit l'échiquier des icones en utilisant PartieChargee.plateau
      	    	// et on remplit les panneaux de pièces prises, à partir de PartieChargee.pieceprisesParLesBlancs et PartieChargee.pieceprisesParLesNoirs

    tu boucles sur partieChargee.plateau, et tu places les Piece qui s'y trouve dans echiquier,

    d'abord les pièces dans l'échiquier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Piece piece=plateau[colonne][ligne].getPiece();
    e.getCase(colonne, ligne).setPiece(piece);
    je me rends compte que j'aurais pu faire un tableau de Piece plutot que de Case, ça aurait été un plus simple

    il faut aussi traiter les icônes

    si ton code avait été plus objet ça aurait simple, mais là il faut que détermine quel icone utiliser pour la pièce
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (piece==null) {
         tab[colonne][ligne].setIcon(null);
    }else {
         Icon icon=... en fonction de la pièce et sa couleur déterminer la bonne icône
         tab[colonne][ligne].setIcon(null);   
    }


    ensuite il faut que tu remplisses panelblanc et panelnoir

    par ailleurs je remarque que tu appelles e.debuter() (2 fois en plus) quand tu démarres une partie, et après tu refais une boucle pour mettre de nouvelles pièces dans l'echiquier (probablement parce que tu as changé les couleurs): soit tu enlève l'appel à débuter, soit tu modifie cette méthode pour qu'elle mette les pièces que tu veux, soit tu l'appelles plus et tu la supprimes
    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. #173
    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,
    Toute fois je n'ai pas compris comment boucler sur partieChargee.plateau

    Je le fais avec un for ?

    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++) {
    					   Piece piece=plateau[colonne][ligne].getPiece();
    					   e.getCase(colonne, ligne).setPiece(piece);
    				   }
    			}

  14. #174
    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
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jordan62 Voir le message
    Merci,
    Toute fois je n'ai pas compris comment boucler sur partieChargee.plateau

    Je le fais avec un for ?

    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++) {
    					   Piece piece=plateau[colonne][ligne].getPiece();
    					   e.getCase(colonne, ligne).setPiece(piece);
    				   }
    			}
    bah oui

    et tu dois mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Piece piece=partieChargee.plateau[colonne][ligne].getPiece();
    parce que plateau est une variable de la classe PartieChargee
    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. #175
    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,

    Donc j'ai :

    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
    Coup dernierCoupJoue=Partie.getDernierCoupJoue();
      	    	String couleurControle;
    			if( dernierCoupJoue==null ) {
      	    	// on a sauvée une partie non jouée
      	    		couleurControle=COULEUR_JOUEUR_BLANC;
              }
              else {
            	  couleurControle=COULEUR_JOUEUR_BLANC.equals(dernierCoupJoue.getCouleur())?COULEUR_JOUEUR_NOIR:COULEUR_JOUEUR_BLANC;
      	    	}
     
    			for (int ligne = 0; ligne < 8; ligne++) {
    				   for (int colonne = 0; colonne < 8; colonne++) {
    					   Piece piece=partieChargee.plateau[colonne][ligne].getPiece();
    					   e.getCase(colonne, ligne).setPiece(piece);
    				   }
    			}
            } catch (IOException e) {
            	JOptionPane.showMessageDialog(this, "Impossible de charger la partie", "Erreur", JOptionPane.ERROR_MESSAGE);
            }
     
    	    }
    J'avais une erreur au niveau de controlecouleur , faut-il l'initialiser ?
    Merci

  16. #176
    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
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jordan62 Voir le message
    Merci,

    Donc j'ai :

    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
    Coup dernierCoupJoue=Partie.getDernierCoupJoue();
      	    	String couleurControle;
    			if( dernierCoupJoue==null ) {
      	    	// on a sauvée une partie non jouée
      	    		couleurControle=COULEUR_JOUEUR_BLANC;
              }
              else {
            	  couleurControle=COULEUR_JOUEUR_BLANC.equals(dernierCoupJoue.getCouleur())?COULEUR_JOUEUR_NOIR:COULEUR_JOUEUR_BLANC;
      	    	}
     
    			for (int ligne = 0; ligne < 8; ligne++) {
    				   for (int colonne = 0; colonne < 8; colonne++) {
    					   Piece piece=partieChargee.plateau[colonne][ligne].getPiece();
    					   e.getCase(colonne, ligne).setPiece(piece);
    				   }
    			}
            } catch (IOException e) {
            	JOptionPane.showMessageDialog(this, "Impossible de charger la partie", "Erreur", JOptionPane.ERROR_MESSAGE);
            }
     
    	    }
    J'avais une erreur au niveau de controlecouleur , faut-il l'initialiser ?
    Merci
    il ne faut pas déclarer une nouvelle variable couleurControle dans la méthode load, sinon elle sera privée à ta méthode, or c'est celle de la classe FenetreJeu qu'il faut initlialiser, c'est celle qui est utilisée pendant le jeu (tu l'as bien déplacée de GestionnaireEvenement vers FenetreJeu,comme j'e l'avais dit dans un précédent post ?)
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  17. #177
    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
    Petit oubli de ma part => Modifier

    Arrivez vous à charger la partie ?
    Car logiquement il devrait entrer dans le if du load ... Car mon fichier de sauvegarde a pour extension rcl

  18. #178
    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
    Billets dans le blog
    2
    Par défaut
    j'ai tapé le code directement dans le forum, j'ai pas testé du tout.

    s'il rentre pas dans le if du load (tu parles bien du if (returnVal == JFileChooser.APPROVE_OPTION) { ?), a part si tu cliques annuler, je vois pas pourquoi
    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.

  19. #179
    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
    Oui j'arrive a choisir le fichier que je veux charger, une fois cliqué sur ok , il me dit Impossible de charger la partie

    Et a deux jours sa fait peur

    Pouvez vous m'aider terminé le chargement et l'echec et mat et tout sera ok ?

    Merci beaucoup

  20. #180
    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
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jordan62 Voir le message
    Oui j'arrive a choisir le fichier que je veux charger, une fois cliqué sur ok , il me dit Impossible de charger la partie

    Et a deux jours sa fait peur

    Pouvez vous m'aider terminé le chargement et l'echec et mat et tout sera ok ?

    Merci beaucoup
    ajout la stacktrace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    catch (IOException e) {
    e.printStackTrace();
            	JOptionPane.showMessageDialog(this, "Impossible de charger la partie", "Erreur", JOptionPane.ERROR_MESSAGE);
            }
    il affiche quoi ?
    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.

+ 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