Teoria de jogos Multiplayer cliente/servidor – Introdução

Teoria de jogos multiplayer - IntroduçãoEsta é a primeira parte de uma série da série de artigos “Teoria de jogos Multiplayer cliente/servidor” onde irei explicar os conceitos e algoritmos fundamentais e para a criação de jogos multiplayer rápidos e fluídos.

 

Jogadores fraudulentos

Um dos principais factores que temos de considerar no desenvolvimento de um servidor para um jogo multiplayer é a existência de jogadores que irão tentar introduzir “hacks” no jogo para ganhar algumas vantagens no jogo em relação aos seus oponentes.

Como programador de jogos, normalmente não nos preocupamos com este problema em jogos single-player uma vez que possíveis hacks, que poderão tirar a piada ao jogo, afectam apenas o jogador que os utiliza, não afectando de qualquer forma os outros jogadores.

Por outro lado, em jogos multiplayer, um jogador batoteiro, que tente introduzir hacks a seu favor, não irá apenas tornar a sua experiência do jogo melhor, irá ao mesmo tempo tornar a experiência dos seus oponentes mais desagradável. Existem várias formas de prevenir “hacks” ou “cheats”,  o mais importante de todos e que nunca deverá sair da nossa mente durante todo o processo de criação do jogo é o seguinte:

Nunca confie num jogador. Assuma sempre o pior, assuma sempre que ele irá tentar fazer batota.

 

Servidores Autoritários

A frase a cima leva-nos a uma solução simples. Processamos todos os cálculos e todos os eventos do nosso jogo num servidor central no nosso controlo e tornamos os jogadores numa espécie de espectadores do jogo. Ou seja, os clientes do jogo apenas enviam “inputs”, (os comandos/teclas pressionadas) para o servidor, o servidor processa a evolução do jogo baseada nesses inputs e envia o resultado de volta ao cliente. Os servidores de jogos baseados nesta arquitectura chamam-se servidores autoritários, porque o servidor é a única entidade que controla tudo o que acontece no jogo.

A utilização de servidores autoritários previne a grande maioria dos hacks utilizados pelos jogadores. Em resumo, num servidor autoritário, o estado e a evolução do estado do jogo é controlado apenas pelo servidor. Os clientes (jogadores) enviam as suas acções para o servidor (inputs). O servidor processa estes inputs e envia periodicamente o estado do jogo para os seus clientes. Estes últimos têm a função final de renderizar o estado do jogo no ecrã.

 

Problema das Redes

O exemplo descrito acima, onde o cliente é “ignorante”, sendo que tem apenas a função de enviar as acções do jogador ao servidor e de renderizar no ecrã os estado devolvido pelo servidor funciona bem em jogos mais lentos, por exemplo em jogos de cartas,  alguns jogos de estratégia, etc. Funciona também em jogos na rede de área local (rede LAN) onde as comunicações são quase instantâneas. A abordagem acima não seria a ideal para jogos que decorrem rapidamente, como por exemplo os jogos FPS, em redes como a internet. A experiência de jogo não iria ser a melhor.

 

Exemplo de comunicação entre o cliente e o servidor

Vamos assumir que eu tenho o meu servidor do meu jogo (um FPS) hospedado em Lisboa. Um jogador do Brasil tenta ligar-se ao meu jogo e vamos assumir que a informação enviada pelo cliente (do Brasil) ao servidor (de Lisboa) demora 50ms a viajar (isto é de facto um cenário muito optimista).

O cliente do Brasil envia um input ao servidor. Esse input diz “Eu pressionei a seta para a esquerda”. O servidor recebe a mensagem 50ms mais tarde. O servidor processa a mensagem e envia uma resposta ao cliente. O cliente recebe um resposta do servidor 100ms mais tarde (2 x 50ms), sendo que essa resposta diz: “Tu estás agora na posição (-1,0)”.  Nesta situação assumimos que o servidor processa instantemente a mensagem do cliente.

Comunicação Servidor Multiplayer

No nosso ponto de vista como jogadores o que aconteceu foi:

  • Pressionamos a seta para a esquerda;
  • Passados 100ms a nossa personagem no jogo moveu-se um quadrado para a esquerda.

Com um LAG de 100ms poderá não haver consequências na jogabilidade do jogo. Apesar de pequeno este LAG é na mesma perceptível. Mas agora imagine que o jogador tinha um lag de 500ms! Nesse caso, para além de ser perceptível, iria tornar o jogo impossível de jogar.

 

Em resumo

Os jogos multiplayer são realmente os mais divertidos, uma vez que para além de nos divertirmos a jogar, podemos nos divertir com os nossos amigos. Os servidores autoritários são a melhor arquitectura para prevenir a maioria dos hacks. Como consequência estes servidores não são fluídos ao olhos dos jogadores (vamos resolver este problema mais adiante).

Nos próximos artigos vamos explorar como devem ser construídos os servidores autoritários, tendo em vista a minimização do LAG sentido pelos jogadores, ao ponto de este não ser sequer perceptível. [Gabriel Gambetta]

Gostou desta introdução à teoria de jogos multiplayer? Então partilhe com os seus amigos e deixe um comentário abaixo!

Deixar uma resposta