1 / 11

Docente : Raffaele Montella

Presentazione Progetto di Programmazione III e Laboratorio A.A. 2012/2013. IMPERIUM. Docente : Raffaele Montella. Candidato: Domenico Maria Maresca Matricola: 124/391. IMPERIUM. Cos’è Imperium. Imperium è un gioco di carte online multiplayer.

lucky
Download Presentation

Docente : Raffaele Montella

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Presentazione Progetto diProgrammazione III e LaboratorioA.A. 2012/2013 IMPERIUM Docente: Raffaele Montella Candidato: Domenico Maria MarescaMatricola: 124/391

  2. IMPERIUM Cos’è Imperium Imperium è un gioco di carte online multiplayer. Prende ispirazione dal famoso gioco di carte da tavolo «Dominion» e lo rivisita in chiave Galattica. I giocatori si metteranno nei panni di un piccolo imperatore galattico con lo scopo di ampliare il proprio impero e dominare la galassia. Partendo con poche risorse e con qualche asteroide, i giocatori dovranno adoperarsi al meglio per sfruttare ciò che possiedono. Acquisendo man mano nuove risorse cerceranno di conquistare altre lune e pianeti, ampliando così il proprio impero nella galassia. Al termine del gioco, vince «l’imperatore» con il maggior numero di possedimenti galattici.

  3. IMPERIUM Come si gioca SCOPO DEL GIOCOImperium è un gioco di carte, il cui svolgimento consiste nella costruzione di un mazzo (il deck), che rappresenta il proprio l’impero. PREPARAZIONEIl gioco inizia con 10 mazzetti di carte impero + 3 mazzetti di carte risorse+ 3 mazzetti di carte vittoria, posizionati nell’area di gioco.Ogni giocatore inizierà la propria partita con un mazzo di 10 carte: 7 carte risorse (metallo) e 3 impero (asteroidi).All’inizio del gioco ogni giocatore mischia il proprio deck e pesca 5 carte. SVOLGIMENTODurante il proprio turno i giocatori concorrono per “costruire” un deck di maggior valore (definito dall'ammontare totale di punti vittoria), giocando le carte in proprio possesso e acquisendone di nuove.Si guadagnano punti vittori acquistando carte impero. AREA DI GIOCOL’area di gioco consiste nei 16 mazzetti di carte che ogni giocatore potrà acquistare. Ogni mazzetto è composto da 10 carte. L’area di gioco del giocatore sarà costituita dal mazzo di carte, lo scarto (pila di carte scartate durante il gioco) e le carte correntemente in mano al giocatore.Quando il mazzo di carte è vuoto ed il giocatore non può pescare altre carte allora si mischia la pila dello scarto e si “rigenera” il mazzo.

  4. IMPERIUM Tipi di carte Ci sono 3 tipi di carte: Carte imperoHanno un valore in punti vittoria (Asteroide=>1, Luna => 3, Pianeta => 6) che viene totalizzato alla fine del gioco per determinare il vincitore, durante il gioco non hanno alcun valore Carte risorseDevono essere giocate nella fase di acquisto per generare risorse, punti con i quali acquistare altre carte;Le carte risorse sono: Elio-3 => 6, Deuterio => 3, Metallo => 1 Carte tecnologiaQueste carte generano effetti durante il turno di un giocatore e permetteranno di - pescare altre carte - ottenere risorse extra - effettuare nuovi acquisti o azioni - scartare carte dalla propria mano Ogni carta ha un costo espresso in punti risorsa.Le carte tecnologia hanno un elenco di azioni che generano.Le carte impero esprimono il valore dei punti vittoria.

  5. IMPERIUM Fasi di gioco • Ad ogni turno il giocatore esegue le seguenti fasi: • 1. Fase di azioneIl giocatore può giocare una carta tecnologiae ne segue le istruzioni. Poiché alcune carte tecnologia generano ulteriori azioni, il giocatore potrebbe eseguire una sequenza di più carte tecnologia, che generano risorse, acquisti o altri benefici. Le carte non giocate non hanno effetti nel resto del turno. • 2. Fase di acquistoIl giocatore inizia la fase con un acquisto, più eventuali altri acquisti generati durante la fase azione. Per acquistare le carte il giocatore può usare le carte risorse oppure le risorse ottenute nella fase azione dalle carte tecnologia.Il giocatore può comprare un numero di carte dall’area di gioco pari al numero di acquisti a sua disposizione. Il costo di una carta è in indicato in basso a sinistra.Le carte comprate vengono aggiunte alla pila degli scarti del giocatore (che sarà mischiata in un nuovo mazzo quando quello corrente sarà esaurito). Un giocatore non è obbligato a usare tutti gli acquisti, né a spendere tutte le risorse, ma risorse e acquisti inutilizzati non vengono conservati per il turno successivo. • 3. Fase di puliziaIl giocatore scarta tutte le carte ancora in mano e quelle che ha giocato nelle fasi precedenti nella pila degli scarti, quindi pesca una nuova mano di cinque carte dal suo mazzo. • Ogni volta che un giocatore deve pescare una carta dal suo mazzo, ma questo è esaurito, mischia la pila dei suoi scarti e la usa come nuovo mazzo.

  6. IMPERIUM Termine del gioco DIAGRAMMADI GIOCO Il gioco termina quando si verifica una delle due condizioni seguenti: il mazzo delle carte Pianeta (carta impero, quella con il maggior numero di punti vittoria) è stato esaurito oppure tre altri mazzi sono stati esauriti. In quel momento i giocatori contano il numero di punti vittoria in mano, nel loro mazzo e nella loro pila degli scarti e il giocatore con il maggior numero di punti vittoria è il vincitore.

  7. IMPERIUM Server & Client Il gioco consente partite online tra due giocatori. Tuttavia per come progettato esso già prevente sessioni tra 3 o più giocatori per consentire eventuali evoluzioni del gioco. Il progetto ha un architettura client-server.- il SERVER avrà il ruolo di gestire le comunicazioni con i client ed il gioco vero e proprio - il CLIENT invece gestirà l’interazione con l’utente in base ai messaggi scambiati con il server All’avvio del server questo rimarrà in ascolto attendendo l’arrivo di nuovi giocolatori, i quali verranno posti in una coda di attesa al fine di raggiungere il numero minimo per una nuova sessione di gioco. Inizialmente il client si connette al server principale il quale accetta la connessione su un nuovo Socket, diverso da quello in ascolto. Al raggiungimento del numero minimo di partecipanti sarà avviata nuova sessione di gioco e creata quindi una GameRoom a cui sarà demandato il reale compito di dover gestire la comunicazione tra i due client, creare l’istanza di gioco e gestire le relative fasi.

  8. IMPERIUM Protocollo di comunicazione tra client e server La comunicazione alla base di client e server avviene attraverso lo scambio di messaggi.Ogni messaggio è composto da un COMANDO ed una serie di PARAMETRI I parametri possono essere sotto forma di vettore o matrice. L’implementazione fa uso di uno stream di oggetti grazie alle classi ObjectInputStreame ObjectOutputStream. GIOCA CARTA (KO) C: PLAY [indice_carta] S: FAIL AUTENTICAZIONE C: HELLO S: HELLO C: NAME nome S: OKEY AVVIO PARTITA S: START S: OKEY S: PLRS [lista_giocatori] S: UVAL [turno,azioni,risorse,acquisti] S: RVAL S: DECK [{nome_deck},{id,nome,costo,numero}] (Matrice) S: HAND C: OKEY S: WAIT GIOCA CARTA (OK) C: PLAY [indice_carta] S: OKEY [PLAY,indice_carta_giocata,nome] S: HAND S: UVAL [turno,azioni,risorse,acquisti] S: RVAL [turno,azioni,risorse,acquisti] C: OKEY S: OACT (altri giocatori) GIOCA CARTA (OK) C: CBUY [nome deck] S: FAIL ACQUISTO CARTA (OK) C: CBUY [nome_deck] S: OKEY [CBUY,nome_carta] S: UVAL [turno,azioni,risorse,acquisti] C: OKEY S: OACT (altri giocatori) AZIONI AVVERSARI OACT, COMANDO_GIOCATORE, NOME_GIOCATORE, EXTRA

  9. IMPERIUM Protocollo di comunicazione tra client e server Elenco dei messaggi scambiabili tra client e server HELLOBevenuto INFO Informativo OKEY Conferma l'azione richiesta FAIL Errore per l'azione richiesta START Il gioco è iniziato WAIT Mette in attesa FASE Notifica una fase successiva NAME Richiede/Invia il nome del giocatore TURN Il giocatore passa il turno DECK Richiede/Invia la lista dei deck con le carte acquistabili PLAY Il giocatore gioca una carta OACT Notifica un azione da parte di un avversario CBUY Il giocatore acquista una carta PASS Il giocatore corrente passa il turno HAND Richiede/Invia l'elenco delle carte in mano del giocatore richiedente UVAL Richiede/Invia i valori del giocatore richiedente RVAL Richiede/Invia i valori del giocatori avversari al richiedente (posizionale) OPNT Richiede/Invia la lista dei giocatori avversari al richiedente (posizionale) PLRS Lista dei giocatori GEND Fine gioco QUIT Uscita dal gioco e chiusura connessione

  10. IMPERIUM 1/2 Alcuni dettagli implementativi Uno degli aspetti principali dello sviluppo è stato la ricerca di un metodo con cui disaccoppiare le classi a cui è demandato il compito di gestire la GUI e l’interazione con l’utente, e quelle che si devono occupare della comunicazione con il server. La soluzione è stata trovata adottando il pattern Observer. Il client vero e proprio rappresenta il soggetto da osservare, mentre le componenti della gui sono gli osservatori,che attendono i cambiamenti del client. Ogni volta che il client completa uno scambio di messaggi con il server, notifica agli osservatori i cambiamenti. In questo modo il client può comunicare liberamente con il server preoccuparsi di eventuali interferenze con i comandi inviati attraverso la GUI. Ovviamente la concorrenza tra l’accesso delle risorse offerte dal client è gestita attraverso appositi blocchi sincronizzati e lock di controllo.

  11. IMPERIUM 2/2 Alcuni dettagli implementativi Circa l’implementazione della GUI si è fatto largo uso delle componenti Swing e dei metodi di layout offerti. La finestra di gioco principale infatti, utilizza un BorderLayout per permettere di bloccare un Panel e una Label.Il panel funge da contenitore di altri panel, mentre la label mostra le informazioni provenienti dal server. Il panel contenitore adotta un CardLayoutche permette di contenere più sotto panel e mostrarne soltanto una alla volta. In questo modo ogni sotto panel gestisce una sezione grafica differente per Login, Messaggi, Gioco e Classifica. Il JFrame principale si occupa quindi di switchare i panel a seconda della situazione, in base agli eventi provenienti dal client.Infatti esso è un osservatore del client e quest’ultimo gli notificherà i messaggi scabiati con il server.

More Related