PROVA FINALE (INGEGNERIA DEL SOFTWARE) Anno Accademico 2011/2012 PRESENTAZIONE PROGETTO 17/04/2012 1
Introduzione Il progetto consiste nello sviluppo di una versione semplificata del gioco da tavolo Carcassonne (terza edizione). Il progetto dovrà essere svolto in gruppi di due studenti e terminato entro il laboratorio del 19/06/2012. I gruppi composti da un solo studente (sconsigliato) dovranno sviluppare lo stesso progetto dei gruppi di due studenti. I gruppi composti da tre studenti (sconsigliato) dovranno sviluppare il gioco con le regole complete.
Cosa bisogna produrre? Il prodotto finale dovrà includere: diagrammi UML che mostrano come è stato progettato il software; implementazione funzionante del gioco conforme ai requisiti dati; codice sorgente dell implementazione; codice sorgente dei test di unità. La consegna dovrà essere effettuata utilizzando il repository Subversion.
Scadenze (non prorogabili ulteriormente) Comunicazione gruppi: 08/05/2012. Comunicazione tecnologia utilizzata: 08/05/2012. Consegna progetto con incremento voto: 12/06/2012. Consegna progetto: 19/06/2012.
Requisiti Sono presenti tre gruppi di requisiti: Requisiti base: sono lo stretto indispensabile per ottenere una valutazione sufficiente. Requisiti standard: aggiunti ai requisiti base permettono di ottenere il voto massimo di 30 e lode. Requisiti avanzati: aggiunti ai requisiti standard permettono di approfondire alcune tematiche e di ottenere un integrazione di punteggio (in positivo e in negativo) non predeterminata.
Cosa sarà valutato? Qualità della progettazione. Livello di autonomia e impegno. Stabilità dell implementazione e conformità rispetto ai requisiti dati. Qualità, leggibilità, e documentazione (JavaDoc) del codice scritto. Qualità e copertura dei casi di test con JUnit.
Consegna La data di consegna è fissata per il 19 Giugno 2012 e non è prorogabile! È possibile ottenere un incremento di punteggio non predeterminato se si consegna il progetto nel laboratorio del 12 Giugno 2012. Chi non consegna un progetto sufficiente entro il 19 Giugno 2012 dovrà svolgere un nuovo progetto nell edizione del corso dell anno prossimo!!! Non sono previsti appelli o recuperi.
Introduzione a Carcassonne Carcassonne è un gioco a turni da 2 a 5 giocatori in cui ogni giocatore dovrà contribuire alla costruzione di un paesaggio ispirato alla cittadina medievale francese di Carcassonne. Durante il suo turno ogni giocatore ha la possibilità di aggiungere al paesaggio strade, città e campi allo scopo di guadagnare punti vittoria. I punti vittoria serviranno per determinare il vincitore a fine partita.
Materiale di gioco Una pila di tessere territorio quadrate raffiguranti degli elementi che possono essere porzioni di strade, città e campi. 7 segnalini di controllo colorati per ogni giocatore.
Scopo del gioco Ogni giocatore posiziona delle tessere territorio e dei segnalini di controllo con lo scopo di guadagnare punti vittoria. Chi alla fine avrà totalizzato più punti vittoria sarà proclamato vincitore.
Preparazione del gioco Si pone la seguente tessera scoperta al centro del tavolo. Le altre tessere si tengono coperte in una pila. Ogni giocatore avrà a disposizione i suoi 7 segnalini.
Svolgimento del gioco Il gioco procede a turni, a partire dal primo giocatore si procederà in senso orario. In ogni turno un giocatore compie le seguenti azioni in questo preciso ordine: 1. deve pescare una tessera territorio coperta e posizionarla nell'area di gioco; 2. se vuole può posizionare uno dei suoi segnalini di controllo sulla tessera appena messa in gioco; 3. se il posizionamento della tessera ha completato strade o città, sono conteggiati i punti vittoria corrispondenti e i segnalini di controllo posizionati su di esse saranno nuovamente disponibili.
Posizionamento delle tessere la nuova tessera deve avere almeno un lato in contatto con il lato di una delle tessere già in gioco; la nuova tessera va posizionata in modo che città, strade e campi siano contigui a quelli della/e tessera/e con cui è in contatto (ad esempio una strada non può finire in un campo, oppure una città non può attaccarsi ad un campo senza chiudere le mura). Se per un qualche motivo la tessera pescata non avesse possibili posizionamenti legali questa è scartata e sostituita con un'altra.
Posizionamento dei segnalini Quando un giocatore ha posizionato una tessera può, se lo desidera, posizionare su di essa uno dei suoi segnalini di controllo: si può posizionare un solo segnalino per turno; è necessario scegliere su quale parte specifica della tessera posizionarlo (cioè va posizionato sopra la porzione di strada o città che deve essere controllata); non si può posizionare il segnalino su una strada/città se altre porzioni della stessa strada/città appartenenti a tessere precedentemente posizionate contengono già un segnalino.
Attribuzione dei punti vittoria Quando una città o una strada sono completate, vengono attribuiti dei punti al (ai) giocatore (giocatori) con il maggior numero di segnalini di controllo su di essa. Condizioni di completamento: Una strada si considera completa quando ambedue le estremità terminano in un incrocio, una città o se la strada compie un cerchio completo su di essa. Una città si considera completa quando è interamente circondata da mura senza alcuno spazio tra queste. I segnalini appartenenti ad una città o strada complete sono resi nuovamente disponibili.
Punti strada Una strada completa dà un punto per ogni tessera di strada. Una strada incompleta (a fine partita) dà un punto per ogni tessera di strada.
Punti città Una città completa dà due punti per ogni tessera di città. Una città incompleta (a fine partita) dà un punto per ogni tessera di città.
Fine del gioco Non appena viene posizionata l'ultima tessera il gioco termina e si procede con il conteggio dei punti relativi alle strade e città non completate, i quali si sommeranno ai punti guadagnati durante la partita. Il giocatore con più punti vittoria a fine partita sarà il vincitore.
Specifiche implementative Specifiche base: uguali e obbligatorie per tutti Specifiche standard: Uguali per tutti, ma con tecnologie diverse. Possibilità di scegliere tra Swing e Android. Specifiche avanzate: possono differenziarsi in base alla tecnologia utilizzata nei requisiti standard.
Specifiche base È richiesto di implementare il regolamento semplificato del gioco presentato (NB: ai gruppi di tre persone sarà richiesto il regolamento intero). L interazione con il gioco deve essere testuale: tutti i giocatori interagiranno al loro turno condividendo lo stesso monitor e tastiera. Non è richiesto l uso di Swing, del multithreading, o della programmazione di rete. Le tessere del gioco disponibili saranno fornite in un file.
Rappresentazione testuale del gioco
Interazione con l utente 1. Viene richiesto dall applicazione il numero dei giocatori. 2. Viene mostrata la griglia con la prima casella. 3. In ogni turno di gioco: 1. Viene mostrata la nuova tessera da posizionare; 2. Il giocatore può digitare ruota per ruotare la tessera di 90 gradi in senso orario; 3. Il giocatore può digitare x,y dove x e y sono le coordinate dove vuole posizionare la tessera; 4. Il giocatore può digitare il nome della porzione di città o strada in cui mettere il segnalino (sono identificati dalle stringhe C1, C2, S1, S2,...), oppure passo per non posizionare niente.
Specifiche standard Separare l applicazione in una parte server e una parte client. La parte client andrà estesa con la possibilità di utilizzare un interfaccia grafica basata su Swing o Android SDK. Client e server dovranno avere la possibilità di utilizzare sia socket che RMI nel caso di interfaccia Swing, solo socket nel caso di interfaccia grafica basata su Android. Il server dovrà supportare la gestione di più partite contemporaneamente. Client e server dovranno comunicare secondo un protocollo di comunicazione dettagliato che sarà fornito con la documentazione di specifica.
Specifiche avanzate Oltre alle specifiche standard è possibile implementare delle specifiche avanzate. Le specifiche avanzate sono un opportunità aggiuntiva per approfondire concetti inerenti le piattaforme o gli algoritmi di gioco. Le specifiche avanzate concorreranno alla valutazione, permettendo di aumentarla, ma anche di abbassarla. Le specifiche avanzate non devono essere implementate tutte, chi lo desidera potrà scegliere il sottogruppo di specifiche di suo interesse.
Estensioni generiche Gestione degli utenti. Realizzare un sistema di gestione degli utenti che supporti il login, conservi le statistiche di gioco e produca una classifica. Stateful sever. Implementare la possibilità di salvare lo stato del server su disco e di ricaricarlo all avvio successivo. Estensione del gioco. Per i gruppi di una o due persone, implementare le regole standard di Carcassonne. Bot player. Sviluppare un client in grado di giocare una partita autonomamente comunicando con il server tramite il protocollo di comunicazione testuale via socket.
Estensioni Swing Suggerimento mosse. Il client supporta le decisioni dell utente indicando le possibili mosse valide tra tutte quelle realizzabili con la tessera corrente. Screenshot. Salvataggio di uno screenshot grafico del tavolo di gioco. Il client offrirà al suo utilizzatore la possibilità di salvare uno screenshot in formato JPEG del tavolo di gioco. Storia. Indicare in un frame laterale la sequenza delle mosse effettuate da tutti i giocatori in ordine di occorrenza.
Estensioni Android Geolocalizzazione. Ogni terminale comunicherà periodicamente al server la propria posizione geografica e otterrà le posizioni geografiche degli altri giocatori. Il client Android, dopo aver ottenuto la posizione degli altri giocatori segnalrà al proprio utilizzatore tutti quelli posizionati nel raggio di 100m da lui. Condivisione. Invitare i propri amici a giocare inviando loro un email che indichi l indirizzo e la porta del server che ospita la partita. Energy awareness. Il sistema dovrà indicare in sovraimpressione il livello attuale di carica della batteria in percentuale. In verde per le percentuali sopra il 30, in giallo per quelle tra 20 e 30, e in rosso per quelle dal 10 in giù. Dovrà inoltre terminare la partita quando il livello raggiungerà il 3%, avvisando con un popup l utente.