2026-06-19 22:14:29 +02:00
2026-03-07 16:40:43 +01:00
2026-06-19 22:14:29 +02:00
2026-03-07 16:40:43 +01:00
2026-06-14 21:53:26 +02:00
2026-06-10 22:15:32 +02:00
2026-03-07 16:40:43 +01:00
2026-06-14 18:47:54 +02:00
2026-06-19 21:56:31 +02:00

Mesos — Ingegneria del Software 2026

Gruppo GC14 — Pirrera · Radice · Pagani · Pellegrino


Funzionalità implementate

Funzionalità Stato
Regole complete del gioco
Interfaccia TUI (Text User Interface)
Interfaccia GUI (JavaFX)
Rete — RMI
Rete — Socket/TCP
FA1 — Persistenza
FA2 — Resilienza alla disconnessione

Note sulle funzionalità avanzate

FA1 — Persistenza Il server salva automaticamente lo stato della partita su disco (GameSaves/save.dat) dopo ogni evento di gioco. Se il server viene riavviato, la partita salvata viene ripristinata automaticamente e i client possono riconnettersi. Il salvataggio viene scartato solo se al momento del crash erano disconnessi tutti i giocatori tranne al massimo uno.

FA2 — Resilienza alla disconnessione Un client che perde la connessione viene marcato come disconnesso ma non termina la partita. La partita continua con gli altri giocatori. Il giocatore disconnesso può riconnettersi in qualsiasi momento con lo stesso username e ritrovare la partita nello stato corrente.


Requisiti di sistema

  • Java 25 o superiore
  • I JAR sono fat-jar (tutte le dipendenze incluse), non è necessario installare librerie esterne

Avvio — Server

java -jar Server.jar

All'avvio il server elenca le interfacce di rete IPv4 attive e chiede all'operatore di sceglierne una (necessario per il corretto funzionamento di RMI in rete locale). Se è presente una sola interfaccia, viene selezionata automaticamente.

Esempio di output:

[0] eth0 -> 192.168.1.10
[1] eth1 -> 192.168.95.7
Choose interface: 0
192.168.1.10
Server RMI: 192.168.1.10

Porte utilizzate dal server (non devono essere bloccate dal firewall):

Protocollo Porta
RMI registry 1099
TCP gioco 8080
TCP heartbeat 8081

Avvio — Client TUI

java -jar ClientTUI.jar

All'avvio il client chiede interattivamente:

Campo Valori accettati
Username stringa libera, max 10 caratteri
Number of players [2-5] intero tra 2 e 5
Network [rmi/tcp] rmi oppure tcp
Server IP [localhost] indirizzo IP del server; invio vuoto usa localhost

Comandi disponibili in-game (TUI)

Comando Descrizione
slot <pos> Sposta il totem nello slot in posizione <pos>
draw upper tribe <pos> Pesca la carta tribù in posizione <pos> dalla riga superiore
draw upper building <pos> Pesca la carta edificio in posizione <pos> dalla riga superiore
draw lower tribe <pos> Pesca la carta tribù in posizione <pos> dalla riga inferiore
draw lower building <pos> Pesca la carta edificio in posizione <pos> dalla riga inferiore
totem <pos> Sceglie il totem in posizione <pos> (fase di selezione totem)
skip Passa il turno (se non si possono eseguire altre azioni)
clear Ridisegna la board a schermo
details buildings Mostra la descrizione di tutti gli edifici
details events Mostra la descrizione di tutti gli eventi
details characters Mostra la descrizione di tutti i personaggi
rematch Torna alla schermata di login (solo a fine partita)
quit Disconnette e chiude il client

La TUI supporta il completamento automatico con Tab per tutti i comandi.


Avvio — Client GUI

java -jar ClientGUI.jar

Si apre direttamente la finestra grafica. Compilare i campi nella schermata di login:

  • Username — nome del giocatore
  • N. players — numero di giocatori (25)
  • Protocollo — toggle RMI / TCP (click per cambiare)
  • Server IP — indirizzo IP del server

Premere Accedi per connettersi. La GUI si avvia in modalità fullscreen; premere ESC per uscire dal fullscreen e F11 per rientrarci.


Test in locale (tutti su localhost)

  1. Aprire un terminale e avviare il server:

    java -jar Server.jar
    
  2. Aprire N terminali (uno per client) e avviare i client:

    # TUI
    java -jar ClientTUI.jar
    
    # oppure GUI
    java -jar ClientGUI.jar
    
  3. Non appena il numero di giocatori configurato si è connesso, la partita parte automaticamente.


Test in rete locale

  1. Il server gira sulla macchina con IP es. 192.168.1.10.
  2. Avviare il server e scegliere l'interfaccia 192.168.1.10.
  3. I client su altre macchine inseriscono quell'IP come Server IP.
  4. Assicurarsi che le porte 1099, 8080, 8081 siano raggiungibili dalla rete.

Struttura del progetto

src/main/java/it/polimi/ingsw/gc14/
├── Controller/          # GameController (server) e ClientController (client)
├── Model/               # Entità di gioco: Player, Game, Board, Card, Slot, ...
│   ├── Cards/           # BuildingCard, TribeCard, EventCard, Character
│   ├── GamePackage/     # Board, CurrentState, GameStages
│   └── Orders/          # Logica di ordinamento dei giocatori
├── Network/             # Protocolli di rete
│   ├── RMI/             # Client e server RMI
│   ├── TCP/             # Client e server TCP
│   └── NetworkEvents/   # Tutti gli eventi di rete serializzabili
├── View/
│   ├── GUI/             # Schermate JavaFX (Login, Totem, Main, Leaderboard)
│   └── TUI/             # Renderer testuale con JLine
├── ServerLauncher.java
├── ClientLauncherGUI.java
└── ClientLauncherTUI.java

Persistenza — dettagli tecnici

Il file di salvataggio viene creato nella directory da cui si lancia il JAR del server:

./GameSaves/save.dat

Per forzare una partita nuova (ignorando il salvataggio) è sufficiente eliminare questo file prima di avviare il server.

S
Description
No description provided
Readme 421 MiB
Languages
Java 100%