Como crio um servidor de jogo RPG simples? [fechadas]

8

Estou trabalhando em um jogo do Sprite Kit. Eu gostaria de torná-lo um verdadeiro jogo multiplayer, com o que quero dizer que cada pessoa que entra no jogo tem sua própria câmera. Eu já vi tutoriais em jogos multiplayer em que os jogadores compartilham a mesma tela, mas não é isso que eu quero.

Entendo que precisa haver um servidor ao qual os jogadores se conectem, o que significa que o "mundo" ao qual os jogadores se conectam deve estar em execução no servidor. Isso está correto?

Como eu tenho um servidor executando o 'mundo' deste jogo? Ele precisa ser um tipo específico de servidor ou posso usar o Node.js ou o que mais eu quiser?

duxfox--
fonte

Respostas:

17

Você está no caminho certo.

A essência do modelo de rede cliente-servidor é que um servidor é um ponto de conhecimento central ao qual os clientes se conectam. Um servidor de jogo normalmente contém

  • uma representação mundial na memória ,
  • uma lista de players conectados ,
  • um loop de jogo (com, por exemplo, manipulador de controle do jogador, um mecanismo de física e IA).

Você também precisará de um canal de comunicação entre o servidor e os clientes, para que os clientes possam transmitir as ações do jogador e o servidor possa transmitir o estado do jogo.

Configurações cliente-servidor mais avançadas podem envolver

Comece simples. É melhor adicionar complexidade apenas quando necessário . Esta toca de coelho é profunda.


Você mencionou o Node.js : escrevi alguns servidores para jogos pequenos e isso tem sido bom. Mas você pode escrever um servidor e clientes em qualquer coisa que desejar. O Eve Online está em grande parte em Erlang , o Minecraft em Java, praticamente tudo da Valve está em C ++, etc.

Anko
fonte
Obrigado pela resposta detalhada! Uma coisa que ainda me confunde é: como o jogo foi escrito usando o kit sprite para iPhones, o servidor precisa saber disso? Estou confuso porque fico pensando, o jogo está no kit de sprite, então o mundo fornecido pelo servidor também deve ser o kit de sprite. Quais são os seus pensamentos?
duxfox--
@AbdulAhmad Não, você pode criar o servidor com o idioma ou as bibliotecas que desejar. Lembre-se de que seu servidor é e deve ser completamente separado. Você está construindo dois aplicativos diferentes e deve pensar dessa maneira. Um para o cliente e outro para o servidor. A parte que os une é o protocolo de comunicação entre os dois aplicativos. Embora existam outros detalhes que devem ser coordenados entre eles (como o estado do jogo), em essência eles são totalmente independentes. Você nem teria muito uso do Sprite Kit no lado do servidor.
Fuzzy Logic
@FuzzyLogic então, tentando entender isso melhor. Se o servidor está fornecendo o 'mundo' (imagens, física etc.), os clientes (iPhones) não devem ter nada disso, porque o cliente é apenas a "visualização" desse ambiente. isto está correto? Então, eu usaria o sprite-kit no lado do cliente para fornecer uma camada visual aos dados provenientes do servidor? Em outras palavras, o jogo deve ser construído principalmente no lado do servidor (toda lógica etc.) e o cliente é apenas a minha opinião, e para onde posso enviar eventos / comandos para o servidor. Isso significa que eu não preciso de qualquer lógica motor de física / jogo Sprite-kit
duxfox--
@AbdulAhmad Yep! Um cliente que realiza o processamento mínimo possível é chamado de thin client . É um ótimo ponto de partida.
Anko
3
@AbdulAhmad Sim e não. Essa é uma boa maneira de pensar sobre isso, mas principalmente por razões de eficiência, o cliente geralmente duplicará muitas coisas em vez de solicitar todos os detalhes ao servidor, caso contrário, você provavelmente terá problemas de desempenho. Como anko mencionou, seria um bom lugar para começar. Este é um tópico importante, existem muitas maneiras, muitas considerações e muitas partes, por isso é difícil explicar completamente como tudo deve funcionar. O quão complicado fica realmente depende dos detalhes do seu jogo. Para ser honesto, com base nas suas perguntas, não recomendo que você tente fazer isso ainda.
Fuzzy Logic