Estou codificando meu jogo usando um modelo cliente-servidor. Ao jogar no modo singleplayer, o jogo inicia um servidor local e interage com ele como um servidor remoto (multiplayer). Fiz isso para evitar a codificação de códigos singleplayer e multiplayer separados.
Acabei de começar a codificar e encontrei um grande problema. Atualmente, estou desenvolvendo o jogo no Eclipse, tendo todas as classes de jogos organizadas em pacotes. Então, no código do meu servidor, apenas uso todas as classes nos pacotes do cliente.
O problema é que essas classes de clientes têm variáveis específicas para renderização, que obviamente não seriam executadas em um servidor.
Devo criar versões modificadas das classes de clientes para usar no servidor? Ou devo apenas modificar as classes do cliente com um booleano, para indicar se é o cliente / servidor que está usando? Existem outras opções que eu tenho? Eu apenas pensei em talvez usar a classe server como classe principal e depois estendê-la com renderização?
fonte
Respostas:
Você deve preferir manter o código de renderização separado da lógica do jogo , pois são preocupações separadas .
Se você separar o código de renderização do código do cliente / servidor, terá algumas vantagens:
update
fase da suarender
fase e executá-las em diferentes intervalos de tempo.const
redução de bugs.fonte
Eu acho que você deve separar corretamente o código do cliente e do servidor. O código do servidor e o código do cliente não devem saber um do outro, exceto pela funcionalidade exposta com interfaces. O servidor não deve saber nada sobre renderização, apenas registrando clientes, rastreando posições, horário etc. Se você tiver preocupações bem separadas, é mais fácil manter e desenvolver seu jogo. Espero que isso ajude um pouco.
fonte
Separação de preocupações O FTW, como os outros disseram, mas se seu objetivo final é ter aplicativos de cliente e servidor separados, você precisa dar um passo adiante. Você precisa determinar o que é específico do cliente, o que é específico do servidor e o que é compartilhado. Para tudo o que é compartilhado, separe-o em classes de código compartilhado exclusivamente; as classes específicas do cliente ou do servidor podem subclassificar ou referenciar as classes compartilhadas conforme apropriado. Mova as classes compartilhadas para um projeto separado, construindo um JAR de "biblioteca compartilhada" e inclua esse JAR nos projetos do cliente e do servidor.
Isso tem algumas vantagens: torna clara a separação de preocupações para manter tudo em projetos separados; garante que o cliente e o servidor estejam começando com o mesmo código compartilhado (desde que estejam usando a mesma versão do JAR compartilhado); e torna impossível "acidentalmente" modificar o código compartilhado sem perceber. Se o código compartilhado estiver em seu próprio projeto, você saberá quando estiver editando algo nesse projeto que precisa estar ciente de como as alterações afetarão o cliente e o servidor.
fonte