Ao projetar um jogo multiplayer em rede em que um jogador hospeda e outros se conectam, há duas estratégias que eu conheço:
- Faça com que o jogo do jogador anfitrião seja a autoridade , com todos os outros jogadores como clientes idiotas tentando acompanhar o estado do jogo atual. No código, haverá muitos casos especiais, dependendo se o jogador atual é o host ou não.
- Torne o host um cliente burro, como todo mundo, executando um servidor dedicado oculto em outro thread. O servidor dedicado será a autoridade e o host se conectará a ele como todos os outros (por meio do host local).
Quais são as vantagens / desvantagens de cada uma delas? Qual é o mais usado (ou varia de acordo com o tipo / tamanho do jogo)?
game-design
networking
multiplayer
BlueRaja - Danny Pflughoeft
fonte
fonte
Respostas:
A abordagem do cliente burro é melhor do ponto de vista do design puro - limita bastante a quantidade de código diferente que você precisa entre o host e os clientes e permite que o servidor seja executado de forma assíncrona. A desvantagem é que a máquina do host exige recursos extras - mas acho que sempre exigiu.
fonte
Entre essas duas opções, a abordagem do cliente burro é certamente a melhor pelas razões mencionadas pelo DeadMG.
Existe outra opção que torna cada cliente uma autoridade: ela tem a vantagem do cliente burro de que todos os colegas compartilham o mesmo código. A outra vantagem é que pode ser muito mais justo se você definir as regras corretas, porque ninguém tem a vantagem de 0 lag para o servidor.
É claro que isso pode ser bastante complicado de implementar, dependendo do tipo de jogo. Seu protocolo terá que lidar com a solução de conflitos entre colegas, provavelmente usando algum tipo de esquema de propriedade. Deixando apenas os conflitos em que dois pares reivindicam a propriedade do mesmo objeto de jogo.
Os protocolos multijogadores ponto a ponto do Google podem fornecer mais detalhes sobre essa abordagem.
fonte