Referências de servidor de jogos de tabuleiro baseadas em turnos? [fechadas]

12

Existem boas referências / livros para recomendar sobre como criar um servidor de jogo baseado em turnos? É como um servidor de xadrez para emparelhar jogadores de xadrez e manter os estados do jogo. No passado, por exemplo, o IGS (for go, weiqi) é uma implementação baseada em soquete. Quais são as tecnologias contemporâneas disponíveis para aprender? Obrigado!

Oh Ho
fonte
existe um tópico relacionado no fórum gdev gamedev.net/topic/565319-turn-based-game-design-help
zinking
Você pode aprender com o design do servidor de jogo a seguir: developers.google.com/games/services/android/…
tomash

Respostas:

5

Eu não acho que exista um livro específico sobre isso, já que o tópico é meio trivial.

Imagine um servidor de correio onde os jogadores podem enviar suas ações por correio. O servidor tem todas as ações executadas até o momento (como e-mails), o que significa que você tem o estado do jogo. Se você deseja recarregar o estado do jogo, basta executar todas as ações dentro dos e-mails cronologicamente. A única coisa que você precisa fazer é ter certeza de quem é a vez ... mas isso também é fácil (por exemplo, números da curva). Não há necessidade de tecnologias contemporâneas ... uma solução de servidor / cliente modificada servirá.

Emparelhamento ppl pode ser feito via Elo ... mas eu acho que você sabia que

zhengtonic
fonte
talvez você possa explicar um pouco mais, ovo. Eu não sei 'elo'
zinking 26/06
Editei a postagem para incluir um link para o sistema Elo.
Kylotan
2

Se fosse eu, eu construí-lo-ia do zero com soquetes. A quantidade de dados a enviar é muito pequena e a natureza baseada em turnos torna um pouco de latência imperceptível.

A verdadeira questão, na minha opinião, é quais recursos adicionais você precisa. As sessões do jogo são persistentes (alguém pode desistir e voltar a participar, o jogo pode ser salvo etc.)? Se você estiver fazendo um salvamento no estilo Civilization, provavelmente desejará enviar os dados salvos para todos os clientes ou fazer o salvamento do lado do cliente com uma chave fornecida pelo servidor incorporada para verificação.

Você precisa de algum tipo de relatório entre turnos, por exemplo, "O jogador 2 está movendo uma unidade" ou "Seu oponente pode estar AFK"? Nesse caso, você pode querer manter as conexões do soquete abertas.

De um modo geral, a menos que haja algum motivo atraente para se desviar, eu manteria o servidor o mais burro e simples possível. Deixa menos para depurar. Também gosto de usar protocolos de texto sem formatação, pois posso testar meus servidores usando telnet sem um cliente de jogo real (o que pode ser suspeito em um determinado problema), mas isso incentiva a manipulação de dados pelo Wireshark (o que você provavelmente verifique de qualquer maneira).

Editar: se o jogo suportar apenas jogos 1-a-1, vale a pena observar as conexões ponto a ponto.

gkimsey
fonte
1

É importante não pensar demais sobre o que é um servidor e quais são suas responsabilidades. Nesse caso, você tem um jogo de ação relativamente lento, para que a arquitetura do servidor não seja incrivelmente complicada (em comparação com um jogo de ritmo mais rápido, onde você tem acerto de contas etc.). Seu servidor deve estar escutando em uma porta TCP (pode também ignorar o UDP se você não precisar de velocidade de qualquer maneira) para que os clientes conectados enviem pacotes de informações. Ele aceita os pacotes, valida-os com base nas regras do jogo e envia uma resposta. No seu caso específico, seu servidor deve saber quem é a vez atualmente e rejeitar qualquer tentativa de outros jogadores de executar ações até a sua vez.

Eu não sei qual tecnologia você tinha em mente, mas algo isso seria fácil o suficiente em Java com a biblioteca Kyronet. Basta enviar as ações do jogo para o servidor central (também pode ser um dos dois jogadores), processá-lo e enviar uma atualização do jogo para os dois jogadores. Tenho certeza de que existe algo semelhante para o .NET.

JPRO
fonte