Scacchi: lettura di un file esterno che contiene testo e cifre (matrice) java

di il
4 risposte

Scacchi: lettura di un file esterno che contiene testo e cifre (matrice) java

Ciao a tutti,
sto cercando di costruire un programma in JAVA che mi verifichi una possibile sequenza di mosse di un pezzo degli scacchi in scacchiere non necessariamente 8x8...(mooolto più grandi)
In pratica ho in entrata un file del tipo:
1^ riga: nome pezzo (scelta tra re , donna , alfiere, torre, cavallo)
2^ riga : grandezza matrice NxM in cifra
3^riga e seguenti matrice effettiva di mosse in cui è riportato in cifra la sequenza di mosse e il resto è tutto 0.
esempio:
torre
4 6
0 0 9 1 0 0
5 0 0 6 0
0 0 0 2 0 0
4 0 8 3 7 0
ho qualche problema nel riuscire leggere l'effettivo pezzo degli scacchi separatamente dalla grandezza della matrice e poi la matrice. non riesco in pratica a scrivere una funzione che legga il nome del pezzo e lo inserisca in una variabile stringa e un altra funzione che legga le dimensioni della matrice e che vada a leggere ogni cella della matrice contenuta nel file e la inserisca in una matrice che creo io.
In sintesi mi servirebbe una mano per scrivere il codice. grazie mille

4 Risposte

  • Re: Scacchi: lettura di un file esterno che contiene testo e cifre (matrice) java

    damocle ha scritto:


    ho qualche problema nel riuscire leggere l'effettivo pezzo degli scacchi separatamente dalla grandezza della matrice e poi la matrice. non riesco in pratica a scrivere una funzione che legga il nome del pezzo e lo inserisca in una variabile stringa e un altra funzione che legga le dimensioni della matrice e che vada a leggere ogni cella della matrice contenuta nel file e la inserisca in una matrice che creo io.
    No, non è un buon approccio. Intendo il fatto di fare una "funzione" solo per un dato del file, un'altra "funzione" per un altro dato, ecc.. Insomma, dovresti innanzitutto ragionare in modo più object-oriented.

    Hai un file con vari dati correlati, allora .... definisci una classe che "modella" quei dati! Ecco un aiuto per l'inizio:
    public class DatiFile {
        private String nomePezzo;
        private int numeroRighe;
        private int numeroColonne;
    
        // ... continua tu, con altri campi, costruttore/i, metodi getter/setter, ecc....
    }
    Poi da qualche parte (NON in DatiFile, che serve SOLO a modellare i dati), puoi fare un metodo del tipo:
    public static DatiFile leggiFile(File file) throws IOException
    Il quale "apre" il file (con quale tecnica, lo scegli tu), legge i dati, crea/popola l'oggetto DatiFile, chiude la/e risorsa/e e infine restituisce l'oggetto DatiFile. Se per leggere il file usi le classi di I/O base (non es. Scanner), che lanciano IOException, allora un errore "serio" sul I/O lo segnali appunto lasciando che leggiFile lanci fuori IOException.

    Poi ci possono essere altri errori di "struttura" del file ma non so cosa ti è stato richiesto/suggerito di fare a riguardo. Cioè cosa intendi fare se il file fosse "malformato". Cosa deve succedere se il nome del pezzo manca o è sbagliato? Se la seconda riga non contiene 2 valori? Se la seconda riga indica una matrice di 4 righe ma poi dopo ce ne sono solo 3? Sono tutte situazioni che denotano un file "malformato". Cosa fare a riguardo devi stabilirlo tu. Un minimo di validazione sarebbe buona cosa ma appunto devi valutare tu. E per segnalare questi errori, idem lanci fuori da leggiFile una eccezione, che potrebbe essere sempre un IOException o una tua sottoclasse di IOException o altro.
  • Re: Scacchi: lettura di un file esterno che contiene testo e cifre (matrice) java

    Grazie... In quanto a programmare con oggetti non lo abbiamo ancora fatto. Per quello chiedevo le funzioni. Il file è garantito che sia integro quindi non serve che io mi ponga il problema
  • Re: Scacchi: lettura di un file esterno che contiene testo e cifre (matrice) java

    damocle ha scritto:


    In quanto a programmare con oggetti non lo abbiamo ancora fatto.
    Capisco ... ok, allora se non si può ragionare "ad oggetti" (per qualunque motivo, mancanza di nozioni ecc..), allora il "meglio" (o per forse "meno peggio") che si potrebbe fare è una cosa del tipo: supponiamo che hai usato BufferedReader per leggere il file "a righe" e il BufferedReader lo crei es. nel tuo main:
    BufferedReader br = //..........
    
    String nomePezzo = leggiNomePezzo(br);
    int[] dimensioni = leggiDimensioni(br);
    int[][] matrice = leggiMatrice(br, dimensioni);
    Questi metodi sarebbero altri metodi static che puoi mettere nella stessa classe. Se è simile a quanto intendevi, sì, è fattibilissimo (anche se ripeto, non il massimo).

    P.S. e a dire il vero, il leggiNomePezzo sarebbe di una banalità che in teoria si potrebbe pure evitare di fare un metodo apposito. E leggiDimensioni/leggiMatrice sempre in teoria si potrebbero compattare in un solo metodo. Dipende ....
  • Re: Scacchi: lettura di un file esterno che contiene testo e cifre (matrice) java

    Grazie...una volta che ho creato la mia matrice come posso fare per vervìcare dentro il numero n più grande presente al suo interno e controllare che siano presenti tutti i numeri prima? cioè devo sapere quante mosse ha fatto (n+1) e controllare che non manchino numeri.....
Devi accedere o registrarti per scrivere nel forum
4 risposte