Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    3

    Programma in java: Configurazione scacchi

    Dovrei realizzare questo programma, ma non so nemmeno come iniziare! Qualcuno ha dei consigli su come organizzare il lavoro? Quali classi fare o meno? E cosa fare fare a queste classi?

    "Si vuole realizzare un programma per il gioco degli scacchi .
    In un file di nome “pezzi.txt” è memorizzata la configurazione dei pezzi disposti sulla scacchiera. La notazione dei pezzi è una semplificazione della notazione standard. Il file è composto da stringhe, una per riga, ogni riga si riferisce al pezzo presente sulla scacchiera. Il formato della stringa su una riga è il seguente XYab, ovvero dove X può assumere valori:
    R per Re
    D per Donna
    T per Torre
    A per Alfiere
    C per Cavallo
    P per Pedone
    Y può assumere valori:
    B per Bianco
    N per Nero
    a può assumere valori:
    a,b,c,d,e,f,g,h b può assumere valori:
    1,2,3,4,5,6,7,8
    Ad esempio il file “pezzi.txt” che contiene le seguenti stringhe: TNa1 PBh8
    indica che nella scacchiera vi sono due pezzi, il re nero, in basso a sinistra e un pedone bianco in alto a destra. Il programma dovrà verificare che il file contenga una configurazione valida ovvero con numero, tipo e vincoli definiti dal gioco. Il programma, nel caso la configurazione sia valida, richiede all’utente di impostare una stringa nel formato definito che indica la mossa da effettuare. Anche in questo caso bisogna verificare che la stringa impostata sia valida e che la mossa richiesta sia possibile. Se la mossa e valida, il programma riscrive il file “pezzi.txt” con la nuova configurazione."

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,132
    Ciao e benvenuto,
    Errore forum? java non è javascript. Per trasferire la discussione segnalala usando icona (!) non aprire una nuova discussione perché è vietato
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Ciao. io farei così.
    Un oggetto Pezzo che avrà tipo, colore, posizione_X, posizione_Y
    e un metodo public void sposta() astratto, che andrai a ridefinire su ogni pezzo (creando gli oggetti: Re, Regina,...., Pedone).
    Un oggetto scacchiera che sarà una griglia di 64 oggetti di tipo Cella (oppure una scacchiera che sia una griglia di oggetti Pezzo come viene + facile a te) in cui andrai ad aggiungere i tuoi pezzi secondo le configurazioni scritte sul tuo file pezzi.txt.
    per le mosse creerei un'altro oggetto che faccia questo mestiere e che quindi aggiorni sempre il tuo file.

    Ciao.
    Ultima modifica di schumy2000; 13-02-2017 a 17:10
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    3
    Per il colore e la posizione del pezzo, mi consigli un ENUM? Per metodo public void sposta() intendi dove posizionare i pezzi o le mosse? Perch� le mosse solo facoltative quindi non le metto! Devo soltanto controllare con l' aggiunta di un nuovo pezzo se � possibile o meno.

  5. #5
    Beh per quanto leggo:
    Il programma dovrà verificare che il file contenga una configurazione valida ovvero con numero, tipo e vincoli definiti dal gioco
    Quindi un minimo devo controllare la mossa...
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    3
    Si ma per configurazione valida intende che non ci siano ad esempio più di due re o 8 cavalli e via dicendo... Anche perché se dovessi vedere tutte le mosse degli scacchi non ne verrei più fuori! Invece Per il colore e la posizione del pezzo, mi consigli un ENUM? Per metodo public void sposta() intendi dove posizionare i pezzi o le mosse?

  7. #7
    perdomani ma enum non l'ho mai usato, ho sempre ovviato a scelte differenti.
    Il problema chiede
    Il programma, nel caso la configurazione sia valida, richiede all’utente di impostare una stringa nel formato definito che indica la mossa da effettuare. Anche in questo caso bisogna verificare che la stringa impostata sia valida e che la mossa richiesta sia possibile
    immagino che aggiungendo la mossa del re non è possibile muoverlo di 10 caselle a zig zag, ma sarà possibile muoverlo di 1 in ogni direzione...e nel mio metodo "sposta" caricherei la posizione precedente e valuterei se è possibile fare la mossa richiesta infine fare una chiamata all'oggetto che si occupa di riaggiornare le posizioni del file.
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  8. #8
    Posto quello che ha scritto schumy che va benissimo,
    a naso farei proprio due enum { R, D, A... } e { B, N } (per semplificare in questo caso potrebbe bastarne uno { RB, RN, DB, DN... }, anche se meno elegante), anziché le varie sottoclassi.

    Qualche spunto (criptico) che potresti valutare o meno:
    la stringa di esempio TNa1:
    con gli enum puoi utilizzare valueOf(), di cui puoi gestire l'eventuale Eccezione;
    'a' è un char, e un char può essere... un int (puoi facilmente ottenere 'a' -> 1, e l'opposto per "rileggerlo");
    Character ha anche un metodo getNumericValue();
    con due int, puoi definire un Point.

    la scacchiera puoi rappresentarla anche con... un Rectangle(1, 1, 8, 8), che ha contains(Point).

    in un enum puoi ad es. implementare un metodo (di istanza) che validi la mossa Point a -> Point b (magari un switch all'interno).

    Poi il resto...

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Io personalmente ho utilizzato nella mia applicazione una enum PieceType per il tipo del pezzo e una semplice variabile booleana white memorizzata nella classe Piece.
    Ma non penso che questo aspetto faccia una gran differenza.

    Strutturare il resto invece è una bella rogna .

    Curiosità : è una traccia che hai trovato in giro o è un compito assegnato da un professore ? Nel secondo caso dovresti farti un'idea di quanto devi "spingerti in profondità" : come ti ha già fatto notare @schumy2000 il testo richiede anche di implementare l'inserimento di mosse, controllare la correttezza della mossa, e aggiornare la scacchiera.

    Questo, oltre a implicare l'ovvio fatto che ti devi preoccupare di ogni movimento a seconda del pezzo, pone una serie di problematiche che in un "programma serio" non puoi tralasciare, te ne cito solo alcune :

    - Prima di effettuare ogni mossa (o dopo ovviamente) devi controllare che non ci sia una posizione di scacco matto, stallo o una situazione di insufficienza di pezzi che terminerebbe all'istante la partita.
    - Oltre alla correttezza della mossa in sé (nel senso che il movimento del pezzo è compatibile con la posizione specificata), dovresti controllare che nell'effettuare il movimento il tuo pezzo non ne incontri altri per strada (ad eccezione del cavallo ovviamente) e che la casella di arrivo non sia occupata da un pezzo di chi muove, o che il re non si sposti in una casella minacciata dall'avversario.
    - Anche se la mossa supera il precedente requisito devi assicurarti che compiendo la mossa in questione non si vada a creare una posizione di scacco (per chi muove) o che una eventuale precedente posizione di scacco debba essere rimossa con la mossa corrente.

    Non sono cose proprio tanto banali

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.