Bem, você tem respostas, mas sua resposta real é "tente você mesmo". As coisas diferem de jogo para jogo.
Eu fiz alguns jogos multiplayer para algum curso de design de jogos em rede distribuído. O mais desafiador foi fazer um jogo de ação em tempo real, onde muitos jogadores se envolveram e enviaram informações como o inferno. Quando chega a esse ponto, tudo se torna problema. Como você vê o primeiro link enviado pelo Tetrat, até determinar um conluio se torna um problema. E você lerá termos como lag, interpolação, extrapolação, previsão ... Mas se você nunca se tentou codificar do zero, apenas aceitará essas palavras e não saberá o que elas realmente significam.
Minha recomendação é:
Etapa 1
Comece agora com um design baseado em servidor totalmente autorizado por enquanto. Como você disse, basta enviar as entradas do usuário ao servidor e deixar o servidor fazer tudo e os clientes obterem os resultados. Seu jogo funcionará totalmente consistente. Mas quando você olha para seus clientes, notará alguns atrasos, alguns problemas de teletransporte, não movimentos suaves ... etc.
Etapa 2
Comece a corrigir os problemas no lado do cliente. Os problemas de teletransporte, por exemplo. Seu personagem estava em (0,0) e o servidor disse que agora você está em (100,100). Seu personagem irá se teleportar para (100.100), o que não é legal. Aí vem a interpolação. Você deve ter um código no lado do cliente que deslize o caractere de (0,0) para (100, 100) de maneira suave. Sim, você moverá seu personagem de (0,0) para (100,100), mas com que rapidez? Por enquanto, você pode apenas usar a diferença de horário entre cada atualização do servidor. Se o seu servidor enviar 10 pacotes em um segundo, o que significa um atraso de 100 ms entre cada pacote.
etapa 3
Agora seu jogo já é bom para redes rápidas, onde há um atraso de (1 a 50) ms. Mas fica condenado se houver perda de pacotes, alta latência ou cálculo demorar muito no servidor ... ect. Nessas situações, você notará que quando pressionar a seta esquerda, verá seu personagem se movendo para a esquerda com um atraso de 200 ms. O atraso entre o pacote vai para o servidor, o tempo de cálculo e volta para você com sua última posição. Isso é ruim, a pior desvantagem do design autorizado pelo servidor. O jogador quer que seu personagem se mova para a esquerda assim que ele pressiona para a esquerda, você não pode fazê-lo esperar. Felizmente, o cliente também tem o mesmo código que o servidor. Por que não executá-lo no cliente imediatamente e corrigir o resultado final com a resposta do servidor? Isso é o que basicamente é a previsão de entrada. O cliente pressiona para a esquerda, o código ao seu lado o move para a esquerda, depois de algum tempo digamos 200 ms, a posição real vem do servidor e o cliente corrige sua posição com ele. Se tudo der certo, o cliente não notará nada, a "etapa 2" também nos ajudará com isso.
Bem, a net tem muitos tutoriais e coisas sobre esse assunto. Mas existem 2 que eu realmente gosto:
Realmente bom, cobre manchas escuras: rede multijogador do mecanismo da fonte de válvulas
Tipo de história, diversão para ler e vale a pena: 1500 arqueiros em 28,8 ,