Implementação para vários jogadores. Posso implementá-lo mais tarde, se preferir?

15

Eu pretendo usar o XNA para criar um projeto de jogo. No momento, não tenho muita certeza se quero adicionar funcionalidade multijogador ou não, pois tenho muitos outros problemas para resolver nos quais ainda sou novo. Não quero que o projeto fique necessariamente fora de controle.

Minha pergunta é: se eu entrar no meu projeto sem nenhum plano para adicionar suporte para vários jogadores, é fácil retroceder (geralmente não é) e adicionar o código necessário para capturar um jogo para vários jogadores?

Bryan Harrington
fonte

Respostas:

24

Aqui estão algumas dicas do manual da biblioteca de rede da Zoidcom :

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.

Leftium
fonte
Parece que esta é uma configuração para a autoridade pura do servidor que eu odeio. Se o seu ping no servidor estiver baixo, ele será reproduzido corretamente. Mas quando o ping fica muito alto, as ações na tela são atrasadas. Prefiro o método que o mecanismo de origem usa, o cliente executa a física e as coisas localmente e qualquer ação aparece imediatamente, mas o servidor ainda a verifica para garantir que as pessoas não estejam invadindo e se existem inconsistências no que deveria ter acontecido , o servidor envia o estado correto ao player e substitui a simulação do cliente por novos dados.
precisa
8
@ AttackingHobo: Você está apenas descrevendo a previsão do cliente. Você pode ter a previsão do cliente e a autoridade do servidor juntas muito bem, e isso não impede a arquitetura descrita no manual da Zoidcom.
@AttackingHobo @ Joe: E o Zoidcom realmente suporta previsões do lado do cliente ^^
Leftium
2

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?

Ricket
fonte