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

Entrée/Sortie Java Discussion :

Lecture et écriture de fichier de sauvegarde pour un jeu.


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 217
    Par défaut Lecture et écriture de fichier de sauvegarde pour un jeu.
    Bonjour à tous, je reviens vers vous avec un nouvel exercice qui me pose problème.
    Voici l'énoncé :

    Votre programme devra être constitué des classes suivantes.

    Case:
    1.1-Attributs: ligne, colonne et valeur.

    1.2-Fonctions: Constructeurs et accesseurs (get et set).

    Grille:
    Attributs :
    2.1-Un tableau à double dimension d’entiers représentant les éléments de la grille.

    2.2-Le constructeur Grille(ArrayList al), qui permet d’initialiser l’objet grille à partir d’un arrayList.

    2.3-La fonction grilleToArrayList(ArrayList al), qui permet de sauvegarder la grille dans un ArrayList.

    2.4-La fonction estSurLigne(int _valeur, int _ligne) qui vérifie si la ligne _ligne comporte la valeur _valeur.

    2.5-La fonction estSurColonne(int _valeur, int _colonne) qui vérifie si la colonne _colonne comporte la valeur _valeur.

    2.6-La fonction estDansLeBloc (int _valeur, int _ligne, int _colonne) qui vérifie si la valeur _valeur est incluse dans le bloc contenant l’intersection de la ligne _ligne et de la colonne _colonne.

    2.7-La fonction imprimerGrille() qui permet d’afficher la grille selon l’affichage montré ci-dessous.

    Test:
    3.1-Fonction d’affichage du menu qui offre à l’utilisateur les choix suivants:

    3.2-Charger Jeu: cette fonction permet de charger la grille de sudoku du fichier texte, le fichier texte comporte une suite de triplet xyz séparé par des espaces:
    x: numéro de la ligne.
    y: numéro de la colonne.
    z: valeur

    3.3-SauvegarderJeu: cette fonction permet de sauvegarder la grille dans le fichier texte, les cases vides ne sont pas sauvegardées.

    3.4-JouerSudoku : cette fonction permet de jouer au Sudoku, l’utilisateur devra fournir la ligne, la colonne et la valeur à placer; le programme devra vérifier avant tout que la valeur n’existe ni dans la ligne, ni dans la colonne, ni dans le bloc avant de l’insérer dans la grille. Si la valeur est déjà existante, un message d’erreur s’affiche à l’utilisateur.

    3.5-Le programme devra demander à l’utilisateur après chaque placement s’il veut jouer encore.

    3.6-Fonction permettant la lecture du fichier et l’initialisation de la grille.

    3.7-Fonction de sauvegarde de la grille dans un fichier texte.

    Autres fonctions que vous jugez pertinentes.


    *************************************Sudoku***********************************
    Bienvenue dans le programme de Sudoku, ce programme ...

    Veuillez choisir un des choix suivants:
    1. Charger jeu.
    2. Jouer Sudoku.
    3. Quitter.
    Votre choix: 1
    Veuillez fournir le nom du fichier: c:/sudoku/partie12.txt
    Erreur, fichier inexistant!
    Veuillez fournir le nom du fichier: c:/sudoku/partie1.txt
    Fichier chargé!

    -------------------------------------------------------------------------------
    -----------------------
    | 4 3 | 7 | 9 8 |
    | 5 | 3 | |
    | 1 | | 3 |
    -----------------------
    | 6 | 2 7 | |
    | 4 7 | | 1 3 |
    | | 5 4 | 9 |
    -----------------------
    | 2 | | 3 |
    | | 5 | 4 |
    | 5 4 | 1 | 2 6 |
    -----------------------
    Veuillez choisir un des choix suivants:
    1. Sauvegarder jeu.
    2. Jouer Sudoku.
    3. Quitter.
    -------------------------------------------------------------------------------
    Votre choix: 2
    Veuillez choisir une ligne: 2
    Veuillez choisir une colonne: 6
    Veuillez choisir une valeur:7
    Erreur, la grille comporte déjà la valeur 7 dans le bloc représentant la case (2,6).

    -------------------------------------------------------------------------------

    | 4 3 | 7 | 9 8 |
    | 5 | 3 | |
    | 1 | | 3 |
    -----------------------
    | 6 | 2 7 | |
    | 4 7 | | 1 3 |
    | | 5 4 | 9 |
    -----------------------
    | 2 | | 3 |
    | | 5 | 4 |
    | 5 4 | 1 | 2 6 |
    -----------------------
    Veuillez choisir un des choix suivants:
    1. Sauvegarder jeu.
    2. Jouer Sudoku.
    3. Quitter.
    -------------------------------------------------------------------------------
    Votre choix: 2
    Veuillez choisir une ligne: 2
    Veuillez choisir une colonne: 6
    Veuillez choisir une valeur:4
    Bravo! La valeur 4 a été insérée dans la case (2,6).

    -------------------------------------------------------------------------------
    -----------------------
    | 4 3 | 7 | 9 8 |
    | 5 | 3 4 | |
    | 1 | | 3 |
    -----------------------
    | 6 | 2 7 | |
    | 4 7 | | 1 3 |
    | | 5 4 | 9 |
    -----------------------
    | 2 | | 3 |
    | | 5 | 4 |
    | 5 4 | 1 | 2 6 |
    -----------------------
    Veuillez choisir un des choix suivants:
    1. Sauvegarder jeu.
    2. Jouer Sudoku.
    3. Quitter.
    -------------------------------------------------------------------------------
    Votre choix: 1
    Veuillez fournir le nom du fichier: c:/sudoku/partie2.txt
    Fichier sauvegardé!

    -------------------------------------------------------------------------------
    -----------------------
    | 4 3 | 7 | 9 8 |
    | 5 | 3 4 | |
    | 1 | | 3 |
    -----------------------
    | 6 | 2 7 | |
    | 4 7 | | 1 3 |
    | | 5 4 | 9 |
    -----------------------
    | 2 | | 3 |
    | | 5 | 4 |
    | 5 4 | 1 | 2 6 |
    -----------------------
    Veuillez choisir un des choix suivants:
    1. Sauvegarder jeu.
    2. Jouer Sudoku.
    3. Quitter.
    -------------------------------------------------------------------------------
    Votre choix: 3
    Merci d’avoir joué au jeu sudoku.

    Contenu du fichier partie1.txt
    014 023 037 069 088 125 143 211 263 306 342 357 404 427 461 483 535 544 589 622 673 745 764 805 824 851 862 876

    Contenu du fichier partie2.txt
    014 023 037 069 088 125 143 211 263 306 342 357 404 427 461 483 535 544 589 622 673 745 764 805 824 851 862 876 154

    Je voulais savoir si vous pouviez m'aider à m'orienter pour la création de ce programme. Je vais bientôt poster ce que j'ai commencé à faire.

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 217
    Par défaut
    Voilà ce que j'ai fait:

    La classe Case avec les attributs ligne, colonne, valeur.
    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
    public class Case {
     
    	private int ligne;
    	private int colonne;
    	private int valeur;
     
     
    	public Case(int x, int y, int z) {
    		this.ligne = x;
    		this.colonne = y;
    		this.valeur = z;
     
     
    	}
     
    	public int setX() {
    		return this.ligne;
    	}
     
    	public int setY() {
    		return this.colonne;
     
    	}
     
    	public int setZ() {
    		return this.valeur;
    	}
     
     
    }
    Ensuite la classe Grille :
    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
     
    import java.util.*;
    public class Grille {
     
     
     
    	int[][] tab1 = { { 0, 4, 3,  7, 0, 0,  9, 0, 8 },
    			         { 0, 0, 5,  0, 3, 0,  0, 0, 0 }, 
    			         { 0, 1, 0,  0, 0, 0,  3, 0, 0 },
     
    			         { 6, 0, 0,  0, 2, 7,  2, 0, 3 }, 
    			         { 4, 0, 7,  0, 0, 0,  1, 0, 3 },
    			         { 0, 0, 0,  5, 4, 0,  0, 0, 9 },
     
    			         { 0, 0, 2,  0, 0, 0,  0, 3, 0 },
    			         { 0, 0, 0,  0, 5, 0,  4, 0, 0 }, 
    			         { 5, 0, 4,  0, 0, 1,  2, 6, 0 } };
     
    	public Grille(){
    		ArrayList al = new ArrayList();
    		al.add(tab1);
     
    	}
     
    		}
    J'ai plusieurs questions sur cette dernière classe.
    Ma première étant si j'ai bien répondu aux point 1.1, 1.2, 2.1, 2.2 et 2.3
    Mon autre question porte sur comment je fais pour vérifier si la ligne comporte la valeur.

  3. #3
    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
    Salut,

    1.1 ok

    1.2
    a) tu crois pas que ce serait plus logique d'avoir setValeur() que setZ() (ou setLigne() que setY()) ?
    b) un setter, ou mutateur, c'est pour affecter une valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void setColonne(int colonne) {
        this.colonne=colonne;
    }
    Un getter, ou accesseur, c'est pour lire une valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public int getColonner() {
       return colonne;
    }
    Là, tu as fais une sorte fusion : une sorte de sgetter, ou de mutcasseur, ou que sais-je

    2.2 On te demande d'écrire un constructeur qui initialise une grille (tableau à 2 dimension) avec une ArrayList (une liste, donc une dimension)
    a)l'ArrayList est un paramètre du constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public Grille(ArrayList<Integer> al) {
    }
    Il n'y a pas le paramètre <Integer> dans l'énoncé : peut-être est-ce un ancien sujet d'avant Java5 ?
    b)Ensuite, pose-toi la question : comment peut-on avoir dans une liste (à une dimension) des valeurs pour remplir un tableau à 2 dimensions ? Comment lire les valeurs dans l'ArrayList pour les mettres dans les cases d'un tableau à 2 dimensions ?
    2.3) tu n'as rien écrit à ce sujet : mais quand tu auras fait la 2.2 correctement, réaliser la méthode grilleToArrayList(ArrayList al) devrais couler de source.
    Autre solution : fais d'abord la 2.3, en répondant à la question "Comment mettre les valeurs d'un tableau à 2 dimensions dans une liste à une dimension" et tu auras la réponse à la première question que j'ai posé dans le 2.2)b). Et en découlera la réponse à la seconde question.
    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. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 217
    Par défaut
    Merci pour tes réponses,j'ai fait ce que tu m'as dit et j'ai pour la classe case ceci:
    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
    public class Case {
     
    	private int ligne;
    	private int colonne;
    	private int valeur;
     
    	public Case(int x, int y, int z) {
    		this.ligne = x;
    		this.colonne = y;
    		this.valeur = z;
     
    	}
     
    	public void setLigne(int ligne) {
    		this.ligne = ligne;
    	}
     
    	public void setColonne(int colonne) {
    		this.colonne = colonne;
     
    	}
     
    	public void setValeur(int valeur) {
    		this.valeur = valeur;
    	}
     
    	public int getLigne() {
    		return ligne;
    	}
     
    	public int getColonne() {
    		return colonne;
    	}
     
    	public int getValeur() {
    		return valeur;
    	}
    }
    J'ai trouvé comment créer un double tableau avec un ArrayList, le problème c'est je ne sais pas comment introduire les valeurs du tab1 dans le tableau ArrayList. En cherchant j'ai entendu parler de la méthode toArray, voici ce que j'ai trouvé :
    public <T> T[] toArray(T[] a) mais je crois que ça concerne la lecture à partir d'une liste.

    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
    import java.util.*;
    public class Grille {
    	int[][] tab1 = { { 0, 4, 3,  7, 0, 0,  9, 0, 8 },
    			         { 0, 0, 5,  0, 3, 0,  0, 0, 0 }, 
    			         { 0, 1, 0,  0, 0, 0,  3, 0, 0 },
     
    			         { 6, 0, 0,  0, 2, 7,  2, 0, 3 }, 
    			         { 4, 0, 7,  0, 0, 0,  1, 0, 3 },
    			         { 0, 0, 0,  5, 4, 0,  0, 0, 9 },
     
    			         { 0, 0, 2,  0, 0, 0,  0, 3, 0 },
    			         { 0, 0, 0,  0, 5, 0,  4, 0, 0 }, 
    			         { 5, 0, 4,  0, 0, 1,  2, 6, 0 } };
     
    	ArrayList<ArrayList<Integer>> al= new ArrayList<ArrayList<Integer>>();
     
     
     
    	public Grille(ArrayList<Integer>al){
     
     
     
    	}
     
    		}

  5. #5
    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 while.dede Voir le message
    J'ai trouver comment créer un double tableau avec un ArrayList, le problème c'est je ne sais pas comment introduire les valeurs du tab1 dans le tableau ArrayList.
    Pourtant le sceond est plus simple que le premier.

    Créer un tableau avec une arrayList :
    Code pseudocode : 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
     
    int nbcol // nombre de colonnes
    int nblig // nombre de lignes
    ArrayList<Integer> liste
     
    if ( list.size() != nbcol * nblog ) erreur : pas assez ou trop de données dans la liste
     
    tableau = new int[nblig][nbcol]
    int ligne=0
    int colonne=0
     
    pour tous les élément e de liste
        mettre e dans tableau[ligne][colonne]
        colonne ++
        si colonne >= nbcol alors 
           colonne = 0
           linge++
       fin si
    fin pour


    Mettre le tableau dans l'arrayList :
    Méthode algorithmique
    Code pseudocode : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ArrayList<Integer> // liste dans laquelle mettre la grille (paramètre de la méthode)
    int[][] tableau // tableau de valeurs
     
     
    pour ligne de 0 à taille tableau exclue
        pour colonne de 0 à taille de ligne exclue
     
             ajouter tableau[ligne][colonne] à liste
     
        fin pour colonne
     
    fin pour ligne

    Méthode par appels de méthodes Java :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(int[] ligne : tableau) {
        arrayList.addAll( Arrays.asList(ligne) );
    }
    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. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 217
    Par défaut
    Ok, merci je vais essayer de faire ça et je posterai ce que j'ai fait.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/07/2014, 14h41
  2. [Dvp.NET|Intégré] Lecture et écriture de fichiers INI
    Par tomlev dans le forum Contribuez
    Réponses: 12
    Dernier message: 23/01/2009, 01h15
  3. [Lazarus] Lecture et écriture de fichier Excel
    Par Vazily dans le forum Lazarus
    Réponses: 3
    Dernier message: 19/04/2008, 16h10
  4. [VB6] lecture et écriture de fichier
    Par robert_trudel dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 12/06/2006, 14h06
  5. [VB.NET]Problème de lecture et écriture sur fichier texte
    Par zouhib dans le forum Windows Forms
    Réponses: 25
    Dernier message: 23/05/2006, 15h30

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