Bene, hai delle risposte, ma la tua vera risposta è "provare te stesso". Le cose differiscono da gioco a gioco.
Ho fatto un paio di giochi multiplayer per alcuni corsi di progettazione di giochi di rete distribuiti. Il più impegnativo è stato fare un gioco d'azione in tempo reale in cui molti giocatori coinvolti e inviare input come l'inferno. Quando si arriva a quel punto, tutto diventa un problema. Come vedi il primo link inviato da Tetrat, anche determinare una collusione diventa un problema. E ascolterai termini come ritardo, interpolazione, estrapolazione, previsione ... Ma se non hai mai provato a scrivere codice da zero, accetteresti queste parole e non sapresti cosa significano realmente.
La mia raccomandazione è:
Passaggio 1 Per ora
basta iniziare con una progettazione basata su server completamente autorizzata. Come hai detto, basta inviare gli input dell'utente al server e lasciare che il server faccia tutto e i client ottengano i risultati. Il tuo gioco funzionerà in modo coerente. Ma quando guardi i tuoi clienti, noterai alcuni ritardi, alcuni problemi di teletrasporto, non movimenti fluidi ... ect.
Passaggio 2
Inizia a risolvere i problemi sul lato client. I problemi di teletrasporto, ad esempio. Il tuo personaggio era a (0,0) e il server ha detto che ora sei a (100.100). Il tuo personaggio si teletrasporterà a (100.100), il che non è carino. Arriva l'interpolazione. Dovresti avere un codice sul lato client che farà scorrere il carattere da (0,0) a (100, 100) in modo uniforme. Sì, sposterai il tuo personaggio da (0,0) a (100.100) ma quanto velocemente? Per ora puoi semplicemente usare la differenza di orario tra ogni aggiornamento del server. Se il tuo server invia 10 pacchetti in un secondo, il che significa un ritardo di 100 ms tra ciascun pacchetto.
Passaggio 3
Ora il tuo gioco è già buono per le reti veloci in cui c'è un ritardo di (1-50) ms. Ma è condannato in caso di perdita di pacchetti, latenza elevata o calcolo impiega molto tempo nel server ... ect. In quelle situazioni che noterai quando premi la freccia sinistra, vedrai il tuo personaggio muoversi a sinistra con un ritardo di 200 ms. Il ritardo tra il tuo pacchetto va al server, il tempo di calcolo e ti viene restituito con la tua ultima posizione. Questo è negativo, il peggior svantaggio della progettazione autorizzata dal server. Il giocatore vuole che il suo personaggio si muova a sinistra non appena preme a sinistra, non puoi farlo aspettare. Fortunatamente il client ha anche lo stesso codice del server, quindi perché non eseguirlo immediatamente sul client e correggere il risultato finale con la risposta dal server? Ecco cosa è sostanzialmente la previsione di input. Il cliente preme a sinistra, il codice al suo fianco lo sposta a sinistra, dopo qualche tempo diciamo 200 ms, la posizione reale viene dal server e il client corregge la sua posizione con esso. Se tutto è andato bene, il cliente non noterà nulla, anche il "passaggio 2" ci aiuterà in questo.
Bene, net ha molti tutorial e cose su questo argomento. Ma ci sono 2 che mi piacciono molto:
Davvero buono, copre i punti oscuri: Networking multiplayer Valve-Source Engine
Tipo di storia, divertente da leggere e vale la pena: 1500 arcieri il 28.8 ,