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 :

Enregistrer un jeu en format texte développé en Java


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 62
    Points : 18
    Points
    18
    Par défaut Enregistrer un jeu en format texte développé en Java
    Bonjour à tous,

    Je viens vous solliciter parce que je rencontre un gros soucis. Je vous explique, je dois développer un jeu en JAVA qui est le puissance 4 (ça c'est fait). Par contre, le joueur doit pouvoir s'il le souhaite enregistrer sa partie en cours pour la reprendre plus tard. Cette partie doit être enregistrer en format texte. Etant débutant en java, je me suis renseigné un peu partout. J'ai essayé de coder quelque chose, mais ça ne fonctionne pas comme je voudrais.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    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
     
    public class Serializer {
     
        private static final Serializer instance = new Serializer();
     
        private final String chemin = "puissance4.txt";
        private Object IHM;
        IHM i;
     
        private Serializer() {
            super();
        }
     
        public void serialiser(ArrayList<IHM> ihm){
            FileOutputStream fichier=null;
            ObjectOutputStream objet=null;
            try {
                    fichier = new FileOutputStream(chemin);
                    objet = new ObjectOutputStream(fichier);
                    objet.writeObject(IHM);
                    objet.flush();
            } 
            catch (FileNotFoundException e) {
                    e.printStackTrace();
            } 
            catch (IOException e) {
                    e.printStackTrace();
            }
            finally {
                    try {
                            if(objet!=null){
                                    objet.close();
                            }
                            if(fichier!=null){
                                    fichier.close();
                            }
                    }
                    catch (IOException e) {
                            e.printStackTrace();
                    }
            }
     
        }
     
        public ArrayList<IHM> deserialiser(){
    		ArrayList<IHM> res = null;
    		try {
    			FileInputStream fichier = new FileInputStream(chemin);
    			ObjectInputStream object = new ObjectInputStream(fichier);
    			res = (ArrayList<IHM>) object.readObject();
    		}
    		catch (java.io.IOException e) {
    			e.printStackTrace();
    		}
    		catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		}
                    i.setVisible(true);
    		return res;
    	}
     
        public static Serializer getInstance() {
            return instance;
        }
    }

    J'utilise donc une classe serializer qui me permet d'enregistrer ou de charger une partie. Mon fichier texte est bien crée mais voilà ce que j'obtiens dedans :
    "¬íNUL ENQ p" ça fait peu d'info pour voir que je veux enregistrer une partie de jeu.

    J'ai surement loupé quelques choses mais je ne sais pas quoi. Je viens donc vous demander votre aide car là, je sèche complètement.

    Je vous remercie d'avance.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    ObjectOutputStream n'enregistre pas en texte mais dans le format binaire de sérialisation de Java.

    Tu veux enregistrer en texte ? Tu le programmes toi-même, en écrivant dans un FileWriter, le texte qui représente ta partie.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 62
    Points : 18
    Points
    18
    Par défaut
    Oui je veux enregistrer en format texte.

    Voici ma classe qui représente ma 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
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
     
    public class IHM extends JFrame implements Serializable {
     
        //-----------
        // Attributs
        //-----------
        // Barre de menu
        JMenuBar menuBar;
     
        // Menu
        JMenu menu;
        JMenu couleur;
     
        // Menu du jeu 
        JMenuItem commencer;
        JMenuItem enregistrer;
        JMenuItem recharger;
        JMenuItem quitter;
        JMenuItem changerCouleur;
     
        // Variable affichant qui doit jouer
        String tour="C'est le tour de ";
     
        // Numéro du joueur en cours
        int joueurEnCours;  
     
        // Verification 
        verification verif;
     
        // Joueur
        Joueur joueur;
     
        //Panel contenant le plateau
        JPanel jeu;
        Plateau[] p;
        JLabel nomJ;
     
     
        //--------------
        // Constructeur
        //--------------
     
        public IHM(String titre,int x, int y, int largeur, int hauteur,Joueur j){
     
            // Titre, position de la fenêtre et taille préférée de la fenêtre
            setTitle(titre);
            setLocation(new Point(x,y));
            setPreferredSize(new Dimension(largeur,hauteur));
     
            // Initialisation de la barre des menus
            menuBar = new JMenuBar();
     
            // Initialisation du menu
            menu = new JMenu("Jeu");
            couleur = new JMenu("Couleur");
     
            // Initialisation des items du menu
            commencer = new JMenuItem("Commencer un nouveau jeu");
            enregistrer = new JMenuItem("Enregistrer");
            recharger = new JMenuItem("Recharger une partie");
            quitter = new JMenuItem("Quitter");
            changerCouleur = new JMenuItem("Changer de couleur");
     
            // Ajout des items
            this.menu.add(commencer);
            this.menu.add(enregistrer);
            this.menu.add(recharger);
            this.menu.add(quitter);
            this.couleur.add(changerCouleur);
     
            // Permet de quitter l'application
            quitter.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent arg0){
                    JOptionPane jop = new JOptionPane();
                    int option = jop.showConfirmDialog(null,"Etes-vous sûr de vouloir arrêter ? ", "Arrêt du jeu", JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);
     
                    if(option == JOptionPane.YES_OPTION)
                        System.exit(0);
     
                } // fin actionPerformed
            }); // fin ActionListener
     
            // Permet de commencer une nouvelle partie
            commencer.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent arg0){
                    Joueur j = new Joueur();
                    j.Joueur1.setText(joueur.j1);
                    j.Joueur2.setText(joueur.j2);
                    j.setVisible(true);
                    setVisible(false);
                } //  fin actionPerformed
            }); // fin ActionListener
     
            // Permet d'enregistrer le jeu
            enregistrer.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent arg0){
                    JOptionPane jop = new JOptionPane();
                    int option = jop.showConfirmDialog(null,"Etes-vous sûr de vouloir sauvegarder ? ", "Sauvegarde du jeu", JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);
     
                     if(option == JOptionPane.YES_OPTION){
     
                          ArrayList<IHM> ihm = new ArrayList<IHM>();
                          Serializer.getInstance().serialiser(ihm);
     
                            int reponse = JOptionPane.showConfirmDialog(null, "Voulez-vous continuer la partie?", "Mastermind", JOptionPane.YES_NO_OPTION);
                            if(reponse == 1)
                            {
                                Joueur j = new Joueur();
                                j.Joueur1.setText(joueur.j1);
                                j.Joueur2.setText(joueur.j2);
                                j.setVisible(true);
                                setVisible(false);
                            }     
                      }
     
                } // fin actionPerformed
            }); // fin ActionListener
     
            // Permet de recharger le jeu
            recharger.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent arg0){
                    JOptionPane jop = new JOptionPane();
                    int option = jop.showConfirmDialog(null,"Etes-vous sûr de vouloir charger une partie ? ", "Chargement du jeu", JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);
     
                    if(option == JOptionPane.YES_OPTION){
                       ArrayList<IHM> ihm = Serializer.getInstance().deserialiser();
     
                    }
                } // fin actionPerformed
            }); // fin ActionListener
     
            // Permet de changer de couleur
            changerCouleur.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent arg0){
                    JOptionPane jop = new JOptionPane();
                    int option = jop.showConfirmDialog(null,"Etes-vous sûr de vouloir changer de couleur ? ", "Changer de couleur", JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);
     
                    if(option == JOptionPane.YES_OPTION){
                        couleur c = new couleur();
                    }
     
                } // fin actionPerformed
            }); // fin ActionListener
     
            // Ajout de la barre des menus
            this.menuBar.add(menu);
            this.menuBar.add(couleur);
            this.setJMenuBar(menuBar);    
     
            this.joueur = j;
     
            // Le joueur courant est tiré aléatoirement
            for (int i = 0; i<2 ; i++)
            {
              joueurEnCours = (int)(Math.random() * 2);
            } // fin for
     
            //instanciation du JPanel général 
            this.jeu=new JPanel(new GridLayout(1,7));
     
            //instanciation du tableau de 'colonne'
            this.p=new Plateau[7];
     
            //pour toutes les colonnes du puissance 4
            for (int i=0;i<7;i++){
                    //on crée un nouvel objet colonne
                    this.p[i]=new Plateau(this);
                    //et on récupère le JPanel correspondant qu'on ajoute dans 'tout'
                    (this.jeu).add((this.p[i]).renvoyerPlateau());
            } // fin for
     
            //Création d'une instance de vérification
            verif=new verification(this.p);
     
            if(joueurEnCours==0){
                nomJ = new JLabel(tour + joueur.j1);
            }
            else if(joueurEnCours==1){
                nomJ = new JLabel(tour+ joueur.j2);
            }
     
            JPanel pan=new JPanel();
            pan.add(nomJ);
     
            getContentPane().add(pan,BorderLayout.SOUTH);
     
            //ajout dans la JFrame principale
            this.getContentPane().add(this.jeu,BorderLayout.CENTER);
     
            // Bloquer redimension de l'image
            this.setResizable(false);
     
            pack();
            this.setDefaultCloseOperation(EXIT_ON_CLOSE);
     
        }}
    Je peux quand même faire un FileWriter ?

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Narizuke Voir le message
    Je peux quand même faire un FileWriter ?
    Dès lors qu'on veut écrire du texte dans un fichier, on peut toujours faire un FileWriter.
    (Ou un OutputStreamWriter basé sur un FileOutputStream. Mais on va commencer simple.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 62
    Points : 18
    Points
    18
    Par défaut
    Ok, donc si je comprends bien, mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ObjectOutputStream objet = null
    je dois le remplacer par un FileWriter ou un OutputStreamWriter ?

    Désolé mais j'y connais vraiment rien dans tout ce qui est flux ou sérialisation du coup je préfère passer pour un boulet et demander.

    En tout cas, merci pour tes réponses.

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Narizuke Voir le message
    Ok, donc si je comprends bien, mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ObjectOutputStream objet = null
    je dois le remplacer par un FileWriter ou un OutputStreamWriter ?
    Oui. Et écrire des String dedans.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 62
    Points : 18
    Points
    18
    Par défaut
    Ok. J'essaierais ça demain, je te tiendrais au courant.
    Encore merci pour ton aide.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 62
    Points : 18
    Points
    18
    Par défaut
    J'ai donc fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    FIle file = new File("puissance4.txt");
     
     try {
           FileWriter writer = new FileWriter(file);
           writer.write(tour);
           writer.write(joueurEnCours);
           writer.write(joueur.j1);
           writer.write(joueur.j2);
           writer.close();
    } catch (IOException ex) {Logger.getLogger(Serializer.class.getName()).log(Level.SEVERE, null, ex);
    }
    ça m'enregistre bien mes chaines de caractères, mais je veux également enregistrer l'état du jeu, c'est-à-dire, un tableau d'objet, dois-je procéder de la même manière ?

  9. #9
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Si tu veux enregistrer des données brutes et simples, il est plus simple de procéder comme tu as fais c'est à dire d'écrire tes données brutes de forme dans un fichier.

    Citation Envoyé par Narizuke Voir le message
    ça m'enregistre bien mes chaines de caractères, mais je veux également enregistrer l'état du jeu, c'est-à-dire, un tableau d'objet, dois-je procéder de la même manière ?
    Par contre si tu veux pouvoir sauvegarder tes objets, là il va falloir passer par de la sérialisation.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 62
    Points : 18
    Points
    18
    Par défaut
    Merci pour le lien, peut-être qu'avec ce tuto j'arriverais mieux à me débrouiller que lors de mes précédents essais de code.
    Je vais essayer ça et je viendrais vous tenir au courant si ça fonctionne ou pas.

Discussions similaires

  1. [Débutant] enregistrer une image sous format texte
    Par sadok84 dans le forum Images
    Réponses: 3
    Dernier message: 28/12/2009, 20h53
  2. Enregistrement matrice image au format texte
    Par nourch dans le forum Images
    Réponses: 12
    Dernier message: 22/07/2008, 08h59
  3. Réponses: 1
    Dernier message: 06/03/2008, 20h40
  4. Comment enregistrer dans un format texte compréhensible
    Par Swiper dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/08/2007, 11h35

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