Progetto di Programmazione a Oggetti (A.A. 2004-05)



Sorgenti delle classi Java dell'interfaccia e
della specifica del progetto

Attenzione! È stata aggiornata la classe ArgomentiComando.

In particolare, sono stati modificati il metodo statico join e il costruttore della classe astratta ListaTesto. Nella precedente versione non si potevano avere oggetti delle sottoclassi di ListaTesto, ovvero di ListaCaseTesto, ListaMosseTesto e ListaPosPezziTesto, contenenti la lista vuota che, come stringa, corrisponde alla stringa vuota "". Adesso è possibile creare oggetti contenenti la lista vuota con new ListaCaseTesto("") e analogamente per le altre sottoclassi.


Alcuni suggerimenti per la compilazione dei sorgenti Java


Gli studenti che vogliono, possono sviluppare una interfaccia grafica per il progetto di gioco degli scacchi. Lo sviluppo dell'interfaccia grafica esonera dalla parte scritta dell'esame che pertnato verterà solo sulla discussione del progetto e dell'interfaccia.


Il progetto Java di quest'anno consiste nella implementazione di un package di classi per il gioco degli scacchi.

L'obiettivo è avere un'applicazione che permette di eseguire passo-passo le mosse di una partita di scacchi (verificandone la correttezza) ed in grado di restituire informazioni sulla situazione corrente della partita. Ad esempio, la classe corrispondente deve avere un metodo per eseguire una mossa ed aggiornare la posizione, dei metodi per ottenere la posizione dei pezzi sulla scacchiera, il giocatore che ha il tratto, il numero della mossa, le mosse che il giocatore con il tratto può giocare, e un metodo per verificare se il Re del giocatore che ha il tratto è sotto scacco o meno.

La parte di interfaccia viene fornita insieme alle specifiche del progetto. Gli studenti dovranno pertanto fornire una implemenatzione di una interface data (l'interface Partita). La classe che implementa tale interface si dovrà chiamare PartitaScacchi.java e dovrà avere due costruttori descritti nelle specifiche del progetto.

Specifiche del progetto

I metodi di PartitaScacchi.java

Si deve fornire una classe PartitaScacchi.java che implementa l'interface Partita.java.

Le classi degli oggetti che i metodi di Partita ricevono e ritornano (a parte quelle base di Java) sono definite come classi annidate nella classe contenitore ArgomentiComando.java.

Fondamentalmente si tratta di stringhe che rappresentano una delle seguenti informazioni

  • una casa della scacchiera (la classe CasaTesto), nella forma rt dove r è un carattere tra 'a' e 'h' che indica la colonna della casa e 't' un numero tra '1' e '8' che indica la traversa

  • la posizione di un pezzo sulla scacchiera (la classe PosPezzoTesto), nella forma Xrt dove X è una iniziale di pezzo tra Re, Donna, Torre, Alfiere, Cavallo e Pedone che indica il corrispondente pezzo e rt una casa della scacchiera, se l'iniziale del pezzo è maiuscola si tratta di un pezzo del Bianco, se minuscola si tratta di un pezzo del Nero

  • la mossa di un pezzo (la classe MossaTesto), nella forma rtps dove rt è la casa di partenza e ps la casa di arrivo, opppure nella forma rtps=X nel caso di promozione di un pedone, dove X è il pezzo a cui si intende promuovere il pedone (l'arrocco è indicato dalla coppia di case di partenza e di arrivo del Re)

  • liste di una delle precedenti informazioni (le classi ListaCasaTesto, ListaPosPezzoTesto, ListaMossaTesto), in pratica, sequenze di stringhe del precedente tipo separate da spazi bianchi

Le uniche operazioni che si possono eseguire sulle suddette classi sono:

  • chiamare il costruttore della classe su di una stringa che si suppone corretta rispetto all'informazione che si vuole memorizzare

  • riottenere la stringa memorizzata nell'istanza della classe mediante il metodo toString()

Se si cerca di costruire un oggetto di un certo tipo con una stringa sintatticamente errata, viene sollevata una eccezione della gerarchia di eccezioni con radice in NotazioneException. La classe NotazioneException e le sue sottoclassi sono definite come classi annidate all'interno della classe contenitore EccezioniTesto.java.

I compiti che i metodi da implementare devono svolgere sono specificati nei commenti contenuti nel sorgente della classe Partita.java. Si tratta di commenti nella sintassi di javadoc e possono quindi essere consultati in formato html.

L'esecuzione dei metodi di Partita può portare a degli errori (ad esempio, se si cerca di eseguire una mossa non valida). Le corrispondenti eccezioni sono definite e descritte nella classe EccezioniPartita.

I costruttori di PartitaScacchi.java

La classe PartitaScacchi.java deve avere due costuttori

  • PartitaScacchi(): che crea una nuova partita che comincia dalla posizione iniziale del gioco

  • PartitaScacchi(int n, ArgomentiComando.ListaPosPezziTesto l): che crea una nuova partita che comincia da una posizione data (sotto forma di lista di pezzi) e che comincia dalla mossa n-esima, assumendo che, se n è positivo il tratto è al Bianco, altrimenti il tratto è al Nero.

Per maggiori dettagli si veda una versione di prova di PartitaScacchi.

L'interfaccia comandi ed il programma di prova

Le classi ed interfacce descritte nelle precedenti parti sono le sole strettamente necessarie per l'implementazione del progetto.

Per semplificare la verifica della correttezza della classe PartitaScacchi.java implementata, il package scacchi contiene una classe eseguibile Prova.java. Il main di tale classe implementa un ciclo di lettura, esecuzione e stampa del risultato di comandi. La sintassi dei comandi è la seguente

# chiede il numero della mossa
@ chiede quale giocatore ha il tratto
e mossa esegue mossa
l lista tutte le mosse della partita
l n lista le ultime n mosse della partita
i torna indietro di una semi-mossa
i n torna indietro di n semi-mosse
p posizione dei pezzi
c casa case controllate dal pezzo in casa
m mosse valide per il giocatore che ha il tratto
m casa mosse valide per il pezzo in
n ricomincia una nuova partita
n i lista-pos-pezzi ricomincia una nuova partita a partire dalla posizione fornita in lista-pos-pezzi, i indica il numero della mossa, se positivo il tratto è al BIANCO, se negativo è al NERO.

Dopo aver lanciato il programma di prova, il primo comando deve creare una nuova partita (dalla poszione iniziale del gioco o da una fornita come argomento). In qualsiasi momento, l'esecuzione di un comando di nuova partita, termina la partita in corso e ne comincia una nuova.

Il programma di prov si basa su di una interfaccia comandi le cui classi sono contenute nel package scacchi.main. Una descrizione più dettagliata di come è realizzata questa interfaccia si trova alla pagina InterfacciaComandi. Per quanto utile da un punto di vista didattico, la conoscenza dell'implementazione dell'interfaccia comandi non è necessaria ai fini dello sviluppo del progetto.

Oltre al programma di prova della classe PartitaScacchi del package scacchi.soluzione (quella che dovrà essere implementata per risolvere il progetto), la distribuzione dei file contiene anche un programma di prova dell'interfaccia nel pacakge scacchi.prova basata su di una versione di PartitaScacchi di prova che implementa i metodi richiesti in modo banale (ritornando valori costanti predefiniti) e che a ogni esecuzione di un metodo stampa un avviso con una descrizione del messaggio che ha attivato il metodo.

Organizzazione in package

Le classi (e le interfacce) che servono per la specifica del progetto insieme a quelli che implementano l'interfaccia comandi appartengono al package scacchi.main, la classe da implementare, insieme a tutte le altre classi e/o interfacce che si riterrà di scrivere per implementarla, dovranno appartenere al package scacchi.soluzione.

Nella distribuzione dei file che trovate in fondo a questa pagina, il package scacchi.soluzione contiene una versione dummy di PartitaScacchi nella quale i metodi non fanno nulla e ritornano valori 0 o null.

Il package scacchi.prova contiene una versione di prova di PartitaScacchi che verifica l'interfaccia dei comandi.

Documentazione del codice

I codice dovrà essere documentato inserendo commenti javadoc che spiegano il significato, lo scopo e l'utilizzp di tutte le classi, i metodi e i campi che verranno scritti (anche di quelli privati). La qualità della documentazione avrà un peso non nullo nella valutazione del progetto.

Termini di consegna

Sino ad una settimana prima dell'appello in cui si intende discutere il progetto.

Modalità di consegna

Da definire...

Informazioni sul gioco degli scacchi

Le regole ufficiali del gioco degli scacchi (traduzione italiana del regolamento della federazione internazionale di scacchi FIDE) sono consultabili alla seguente pagina http://www.maskeret.com/micio/docfide.htm.

Per quanto riguarda la realizzazione del progetto, le regole che interessano sono quelle sulla disposizione iniziale dei pezzi sulla scacchiera e sul movimento dei pezzi.

Per quanto riguarda le mosse dei pezzi si richiama l'attenzione su:

  • la presa "en passant" (comma 3.7.(d))

  • la promozione (comma 3.7(e))

  • l'arrocco (comma 3.8(ii)), in particolare, si faccia attenzione alle situazioni che rendono l'arrocco illegale o temporaneamente proibito

Link utili

Edit | Attach | Watch | Print version | History: r14 < r13 < r12 < r11 < r10 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r14 - 2005-01-31 - StefanoGuerrini






 
Questo sito usa cookies, usandolo ne accettate la presenza. (CookiePolicy)
Torna al Dipartimento di Informatica
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback