Per un progetto scolastico, dovremmo creare un gioco multiplayer in Java (dovrebbe essere client/server) che può essere riprodotto su Internet (stiamo programmando questo a scuola, quindi non è compito a casa). Il gioco è a turni, ma dovrebbe esserci una chat, che naturalmente è in tempo reale. Tuttavia, nessuno di noi ha esperienza con la programmazione di rete e più ne leggo, più domande sembrano avere.Gioco multiplayer Java - concetti di networking
Il mio primo pensiero è stato utilizzare l'API socket per implementare la parte multiplayer. Il server attende nuovi dati dai client. Tuttavia, ci sono più tipi di dati da ricevere, come i messaggi di chat, i movimenti, ecc. Inoltre, una volta stabilita la connessione al server, devono essere inviati alcuni dati iniziali (come il nome del giocatore). Il server dovrebbe essere in grado di vedere che tipo di messaggio ha ricevuto, ma come? Stavo pensando di creare una classe Message
con un campo stringa type
. Ma nel mio codice server, mi metterò codice come questo:
Quando ci sono un sacco di diversi tipi di dati da inviare (e ci sarà), questo non sembra che il modo più efficiente. Inoltre, questo significherebbe sia il server che il client dovrebbero avere questa classe/interfaccia Message (codice duplicato).
E gli altri giochi? Ad esempio, il giocatore 1 muove il suo personaggio in una posizione che sconfigge un altro personaggio. Il client del giocatore 1 calcola questa sconfitta e applica le azioni corrette. Ma cosa dovrebbe essere inviato al server? Solo la nuova posizione del giocatore o anche la sconfitta? Con la prima opzione, significa che tutti gli altri client dovrebbero fare i calcoli. Non potrebbe causare problemi? Poiché non ho esperienza di programmazione di rete precedente, sono un po 'confuso su come fare tutte queste cose.
Ho anche letto in un altro thread qui su Stackoverflow che RMI potrebbe essere un'opzione migliore. Dopo aver letto alcune informazioni su questo, capisco cosa sia RMI, ma non riesco ancora a vedere se è una buona opzione per questo progetto o meno. Qualche consiglio per questo?
Come vedi, sono un po 'confuso su come iniziare con la parte di rete di questo progetto. Ho cercato alcuni libri di programmazione di giochi (per Java ofcourse), ma nessuno di loro è focalizzato sulla parte di rete. Ho anche cercato i libri di networking Java, ma questi sembrano essere focalizzati sulla tecnologia, non su buone pratiche di codice.
Se qualcuno conosce un buon libro o ha qualche consiglio nella giusta sezione, sarebbe molto apprezzato.
Grazie
"... programmarlo a scuola, quindi non è compito" . Classico. – CPerkins
Almeno non vuole il codice. –
@CPerkins: Dovremmo lavorare a questo progetto a scuola, sì. Non sto chiedendo a nessuno di fare il mio lavoro, semplicemente chiedendo consigli su come implementarlo. – Bv202