Se o seu projeto estiver na fase de planejamento, é recomendável projetá-lo para a rede desde o início. A aplicação de códigos de rede em um estado tardio do projeto provavelmente levará a uma refatoração maciça ou a uma grande quantidade de hackers, resultando em códigos dificilmente manejáveis e com erros.
A maneira mais limpa é implementar o jogo inteiro como se fosse um jogo em rede puro. Ou seja, implemente o código para um servidor dedicado e implemente esse código por ser apenas código do servidor. Implemente o código do cliente do jogo de maneira semelhante. Servidor e cliente podem ser executados no mesmo processo e nem precisam usar um soquete de rede real, mas devem ser entidades separadas e todo o código deve ser projetado para funcionar dessa maneira. Quando o jogador pular, não altere diretamente o vetor de pulo do jogador, mas envie um pacote 'jump-pressionado-tecla' para o servidor e deixe o servidor lidar com isso.
Isso significa que, mesmo em um jogo para um jogador, há um servidor invisível sendo executado em segundo plano. Uma versão multiplayer do mesmo jogo só precisa se conectar a um servidor remoto, em vez da versão local e pronto, multiplayer feito. As vantagens disso são:
sem código separado para single e multiplayer, o código de rede é testado e desenvolvido durante todo o código de limpeza do projeto
Projetos usando esse esquema são quase todos os jogos usando qualquer um dos mecanismos do Quake, Civilization 4, Neverwinter Nights e muitos outros.
Para conectar cliente e servidor no mesmo processo com latência zero, soquetes locais podem ser usados. Eles são fornecidos pelo Zoidcom e transmitem pacotes diretamente de um ZCom_Control para outro, sem passar por um soquete no nível do SO.
Eu concordo com o conselho citado na resposta de Leftium; projetá-lo para rede desde o início, porque você não poderá adicioná-lo mais tarde .
A primeira vez que tentei criar um jogo para vários jogadores (eu nem estava tentando criar um jogo para um jogador!), Imaginei que primeiro o jogo funcionaria e depois acrescentaria redes. Péssima ideia. Fiquei com o protótipo de um jogo para um jogador realmente chato e não tenho idéia de como transformá-lo em um jogo multiplayer. Eu o rascunhei completamente e comecei de novo, desta vez escrevendo código de rede multiplayer desde o início. Tudo clicou.
Tenho certeza que não é impossível começar com um jogo para um jogador e adicionar funcionalidades para vários jogadores. Se você pensar bem, planeje-o corretamente e certifique-se de conhecer sua estratégia e, com certeza, tente. Eu acho que seria um quebra-cabeça interessante para resolver, no mínimo. Mas verifique se você conhece seu plano sobre como adicionar redes.
Eu acho que existe um meio termo (embora eu nunca tentei). Você pode escrever algumas aulas fictícias para recursos de rede / multiplayer e ser diligente em usá-las enquanto escreve o jogo para um jogador. Mais tarde, se você decidir implementar o modo multiplayer, basta preencher as classes fictícias e você estará na maior parte do caminho. Isso se aproxima muito do método servidor / cliente, mas você pode se safar com menos trabalho; afinal, é mais fácil criar um jogo para um jogador do que um jogo para vários jogadores; portanto, se você escrever seu jogo para um jogador como um jogo para vários jogadores, por que não fazê-lo para vários jogadores?
fonte