Progetto di Programmazione Internet A.A. 2006/07

Versione 2.0 del 15 maggio 2007

Descrizione del progetto

Il progetto consiste nell'implementazione di un programma per gestire una partita di scacchi tra due giocatori umani.

Regole del gioco

Le regole del gioco sono indicate in questo documento.

Funzionamento del programma

Il programma deve presentare una finestra principale contenente la schacchiera (completa delle indicazione delle traverse e delle colonne) sulla quale sono posizionati i 16 pezzi bianchi e i 16 pezzi neri secondo la disposizione iniziale prevista dal regolamento.

Ogni giocatore a turno può effettuare una mossa. A questo scopo il giocatore deve selezionare il pezzo che desidera muovere. Tale selezione dovrà avvenire cliccando con il mouse sul pezzo da selezionare; a seguito della selezione cambia il colore dello sfondo del pezzo in esame in modo tale che visivamente risulti diverso dagli altri pezzi. Se un giocatore si accorge di avere selezionato il pezzo sbagliato potrà annullare la selezione cliccando nuovamente sul pezzo selezionato (in questo caso lo sfondo ritornerà del colore originario). Una volta selezionato un pezzo, il giocatore potrà spostarlo nella posizione desiderata cliccando sulla casella di destinazione. Non è possibile annullare la mossa effettuata. Ad ogni giocatore deve essere consentito solo di selezionare i propri pezzi. Il programma dovrà controllare la validità di ogni mossa e nel caso questa non sia valida non permettere lo spostamento del pezzo e avvisare il giocatore emettendo un suono.

A seguito di ogni mossa il programma deve controllare se :

Nel primo caso la partita è vinta; nel secondo caso la partita è patta. In entrambi i casi il programma comunica il risultato della partita ai giocatori e chiede se vogliono iniziare una nuova partita. 

Nella finestra di gioco devono essere presenti 3 pulsanti: "nuova partita", "carica partita" e "salva partita".

Il pulsante "nuova partita" fa si che il programma chieda ai giocatori se desiderano effettuare il salvataggio della partita corrente (solo nel caso questa non sia stata già salvata), poi fa iniziare una nuova partita. Una partita si considera non salvata se dopo l'ultimo salvaggio sono state effettuate altre mosse.

Il pulsante "carica partita" permette di caricare una partita da un file di testo secondo il formato esposto in di seguito. Il programma dovrà effettuare le mosse descritte nel file a partire dalla situazione di partenza, se esiste, altrimenti dalla posizione iniziale. Il programma dovrà controllare la validità di ogni mossa; nel caso vi sia una mossa non valida non la dovrà eseguire dandone comunicazione all'utente; nella scacchiera verrà visualizzata la situazione ottenuta eseguendo tutte le mosse fino a quella non valida.

Il pulsante "salva partita" permette di salvare una partita su di un file di testo. Il salvataggio dovrà avvenire in unico file salvando la situazione di partenza della partita e tutte le mosse che sono state effettuate, secondo il formato esposto di seguito. Dopo ogni salvataggio la partita continuerà regolarmente.

Nel file usato per rappresentare una partita sono presenti un elenco di mosse (una su ogni riga) eventualmente precendute da una situazione di partenza (ogni traversa della scacchiera  è rappresentata su una riga, tra una casa e l'altra non devono esserci spazi).

Il formato per la situazione di partenza è il seguente:
Le mosse dovranno invece essere rappresentate secondo la usuale notazione algebrica descritta nel regolamento. Tra la situazione di partenza e l'elenco delle mosse dovranno esserci due linee vuote.

Sia per quanto riguarda il salvataggio del file che il suo caricamento dovrà essere mostrata una finestra di dialogo per permette all'utente di navigare nel file system segliendo il file da caricare o da salvare.

In qualunque momento deve essere possibile uscire dal programma cliccando sul pulsante di chiusura della finestra.

Note sull'implementazione

Il programma non dovrà fare uso di classi che non siano parte del programma stesso o che non siano parte della libreria di classi standard di Java 2, Standard Edition versione 1.5.

Nello sviluppo del progetto è importante attenersi strettamente alle specifiche, pena la non valutazione del progetto stesso.

Sviluppo del progetto

Il progetto può essere sviluppato in gruppi da due, tre o quattro studenti. In casi particolari possono essere ammesssi gruppi da uno, previa autorizzazione da richiedere alla dott.sa Turrini turrini@cs.unibo.it, giustificandone la ragione. I gruppi da quattro sono ammessi ma non consigliati.

Per eventuali chiarimenti si suggerisce di utilizzare il newsgroup del corso. Si suggerisce anche di visitare con frequenza il newsgroup stesso e il sito del corso per verificare eventuali precisazioni e/o modifiche.

Tempi di consegna

Chi intende sostenere lo scritto a Giugno dovrà consegnare il presente progetto entro le ore 14 del 13 Giugno 2007; indicativamente la discussione del progetto avrà luogo il 15 Giugno 2007.

Chi invece intende sostenere lo scritto a Luglio dovrà consegnare il presente progetto entro le ore 14 del 13 Luglio 2007; indicativamente la discussione del progetto avrà luogo il 17 Luglio 2007.

Infine, chi invece intende sostenere lo scritto in date successive, dovrà consegnare il presente progetto entro le ore 14 del 20 Luglio 2007; indicativamente la discussione avrà luogo la settimana successiva.

Non è possibile sostenere lo scritto se precedentemente non è stato consegnato il progetto.

Modalità di consegna

Occorre consegnare in formato digitale (mail a turrini@cs.unibo.it) un file in formato jar (per info sul formato jar fare riferimento a:
http://java.sun.com/docs/books/tutorial/jar/) contenente la directory (<nomeGruppo>) che a sua volta conterrà le seguenti directory:

La mail deve avere subject "consegna progetto <nomeGruppo>" e in attachment il file <nomeGruppo>.jar.
Il nome gruppo deve essere di al massimo otto digit (lettere o numeri), può essere formato con le sillabe iniziali dei cognomi, e deve contenere solo lettere e numeri; all'interno del messaggio vanno specificati i nomi degli appartenenti al gruppo.

Chi consegna entro la data di giugno deve specificare (nel corpo della mail) se almeno uno degli appartenenti al gruppo intende sostenere lo scritto a giugno.

La documentazione deve essere consegnata anche in formato cartaceo lasciandola nella casella di posta degli assegnisti (che si trova al primo piano del dipartimento di Scienze dell'Informazione) indirizzata alla dott.sa Turrini.

Vanno consegnati in forma cartacea il file project.html e tutti i file sorgenti stampati in orizzontale (sotto linux si può usare enscript -r nomefile). Ogni stampa deve essere graffettata nell'angolo in alto a sinistra.

I tempi per la consegna della documentazione cartacea sono gli stessi della consegna del progetto.