Ciao,
devo sviluppare un Gioco di Ruolo composto dai seguenti elementi di gioco
- Personaggi: client che si connettono al Server e dopo l'autenticazione sono in grado di giocare muovendosi in varie stanze, chattando con i presenti, uccidendo mostri e accumulando punti esperienza
- Mappa: struttura che ho ipotizzato per gestire il gioco, contiene tutte le informazioni riguardanti le stanze
- Stanze: stanze nelle quali i giocatori interagiscono, possono contenere mostri e oggetti
- Mostri: se attaccati rispondono all'attacco, rilasciano oggetti e punti esperienza
- Oggetti: possono essere raccolti dai giocatori per avere alterazioni di stato
A grandi linee gli step compiuti dal Server dovrebbero essere questi:
- Instanziare un oggetto Mappa (si occuperà delle informazioni riguardanti le stanze contenute in un file di testo)
- Attivare il servizio ad una determinata porta (Socket)
- Creare i Thread per la gestione dei differenti Client (gestendofile di Log)
- Gestire il gioco (controllo del login, stop del servizio, espulsione di un giocatore..)
Quelli del Client invece:
- Richiedere il collegamento sul Server
- Effettuare il login
- Permettere all'utente di giocare (dare Input e ricevere Output dal Server)
Tra le varie particolaretà del gioco deve essere possibile l'attivazione di stanze su macchine remote (connesse in LAN), cioè una stanza che non sia sul Server principale alla quale i Client devono connettersi e giocare.
Le informazioni saranno salvate al momanto del logout (attivabile solo in una determinata stanza) su file presenti nel Server principale per cui non è necessario che vi sia una comunicazione tra i Server.
... un attimo eh, ho quasi finito...
Io ho già lavorato con una struttura Client-Server Multithread basata sui Socket ma volevo capire meglio il funzionamento della java RMI.Ho guardato su vari tutorial e gli esempi sulla documentazione ma ho ancora qualche dubbio sul funzionameno del comando Naming.bind:
- sarebbe possibile allocare direttamente dal Server principale un oggetto stanza su un determinato indirizzo? Risolverei i problemi della gestione dei Server Secondari se con il comando Naming.lookup di quell'oggetto attivato sui vari Client potessi ottenere la stanza.
- sarebbe più funzionale fare anche il .bind della mappa?
Pensavo altrimenti di gestire la comunicazione tra Client e Server attraverso i Socket e uno specifico protocollo di comunicazione (una semplice classe protocol con switch-case per ogni comando dell'utente). Rimane però il problema della possibilità di avere stanze su macchine remote.
Innanzi tutto, grazie se hai letto sino a qui! Se hai qualche idea o puoi darmi una mano te ne sarei supergrato!!
GHoldenBoy