Skip to content

Architettura

TeoScardov edited this page Jul 7, 2021 · 15 revisions

MVC

L'architettura utilizzata a livello concettuale per questo progetto è del tipo MVC (Model - View - Controller) Nello schema architetturale MVC l'applicazione viene suddivisa in tre gruppi principali di componenti: Model, View e Controller. Questo schema consente di realizzare la separazione delle competenze. Grazie all'uso di questo schema, le richieste dell'utente vengono indirizzate a un controller responsabile di interagire con il modello per eseguire le azioni dell'utente e/o recuperare i risultati delle query.

Modello: Il modello è diviso in due modalità di gioco, singleplayer e multiplayer. Nel singleplayer ci sono dei Player, che sono un umano e tre bot, e che sono divisi in due Team. I Player interagiscono con un Game, che tiene le informazioni relative allo stato della partita. Alla fine i punti sono calcolati da un oggetto Callculator. Nel multiplayer si ha un Client che interagisce con un server utilizzando uno stub ClientHandler. Sul server viene simulata una partita MultiplayerGame, a cui si collegano da 1 a 4 giocatori che sono rappresentati dai loro Handler, che possono essere anche di tipo BotHandler se non si raggiunge il numero di 4 giocatori. Ad ogni modifica dello stato di gioco, viene inviata una notifica a tutti gli Handler.

Controller: Le classi di controllo gestiscono l'accoppiamento tra GUI e modello. Per gestire l'input dell'utente si utilizza un thread PlayerThread.

View: È la vista dell'utente, che comprende le interfacce grafiche, i bottoni e la grafica delle carte.

Server/Client

Si utilizza un'architettura Server/Client basata su RMI. Il client si collega al server e si registra, per cui gli viene assegnato un ClientHandler. Server e client si possono chiamare metodi definiti nelle interfacce remote rispettive.

Server: Il server assegna un ClientHandler ad ogni Client.

Client: Il client invoca i metodi offerti dall'interfaccia RemoteClientHandler.

Modelli concettuali dell'architettura

singleplayer.png

multiplayer.png

Clone this wiki locally