Array
(
)

Desenvolvimento de WebGame

Rodrigo Rocha
   - 19 jan 2012

Olá pessoal!
Estou começando um projeto com fim educacional para montar um WebGame baseado em um anime(desenho) que eu gosto. Só que nunca projetei um game e por esse motivo tive uma dúvida que queria esclarecer para continuar com o meu planejamento, espero que possam me ajudar. Vai lá:
No meu game, estou pensando em ter um mapa virtual 2d, ou seja x e y. Só que dependendo do jogador ele pode ocupar 20 px em x e 10 em y ou 10 em x e 20 em y, entenderam? A minha dúvida, eu iria guardar a posição de todos em banco e isso me preocupou, Qual é a implicação em estar constantemente dando uptade no banco com as posições dos players? 100 players e o banco arria? (levando em consideração meu pc rodando um server caseiro primeiramente (algo como 3GB de ram e processador core2duo 2,2 ghz) Penso em usar MySQL.
Acho que está bem explicado. Se alguem já teve experiência com isso e me ajudar com essa icógnita receberé um maravilhoso e gigante: OBRIGADO!!!!
Valeu!

Giordani Ramos
   - 19 jan 2012

Boa noite Rodrigo.

Me identifiquei com o teu post, pois também tenho vontade de desenvolver um jogo baseado em um anime que sempre gostei...

Mas vamos ao que interessa.
Admito que não tenho experiência nessa área de desenvolvimento de jogos, porém, pelo que tu comentaste sobre a metodologia de atualizar constantemente no banco a posição dos jogadores, considero uma prática um tanto arriscada.

Imagine a situação, por mais que tu tenhas um número delimitado de jogadores simultâneos, cada um deles gerará um update a cada segundo (para o caso dos jogadores poderem se encontrar no cenário em tempo real, por exemplo) e cada jogador terá que fazer uma consulta das posições dos demais jogadores, isso vai ocupar muito o banco, pois a busca será constante também, juntamente com os updates.

Eu recomendo que tu olhe alguns materiais sobre RPC.
Fiz um trabalho na faculdade há um tempo sobre o assunto, mais especificamente, sobre DCOM, que é um conceito derivado do RPC.
Na prática, é uma estrutura cliente/servidor, onde variáveis públicas ficam armazenadas no servidor e os clientes apenas as consultam.
A cada instante, os clientes atualizariam sua posição com uma chamada de método no servidor e essa informação ficaria visível para os demais jogadores.

Falando de código, no servidor ficaria uma lista (ou array) com cada identificação do jogador e sua posição x/y.
No cliente, ficariam as funcionalidades do jogo e as chamadas de métodos no servidor para permitir a atualização das posições.
Como todas informações ficam em memória o acesso é mais rápido e a atualização da posição no banco poderia ser colocada apenas quando o jogador decide sair do jogo, armazenando sua posição para o seu próximo logon.

Sobre o DCOM, recomendo começar por este link:
http://www.codeproject.com/KB/vb/Remoting_HelloWorld.aspx // Exemplo em VB.NET

Caso tu queira ver o meu trabalho de faculdade, posso te enviar por email.

Espero ter ajudado :)
Abraço

Rodrigo Rocha
   - 22 jan 2012

Ajudou muito!

É o que eu estava pensando... Realmente ficaria muito dependente de consultas e updates no banco, não parece uma boa prática. Deve ser isso que fazem nos games online massivos, MMO, eu não conhecia esse conceito de RPC mas, pelo que você explicou seria como armazenar em um vetor dinâmico cada novo usuário conectado e nessa lista ligada temos suas posições e o que mais for importante, consultando a lista ao invés do banco, quando ele executa um logoff aí sim faz o update no banco...

É uma luz já... Eu quero fazer um sistema hardcore, pra ser sempre legal um embate entre dois players. No caso eu estou pensando em batalhas entre navios, então, teria que saber a posição de cada um e o tamanho dos barcos. Mas ainda tenho que planejar muitas coisa. Colocar no papel, fazer alguns testes, enfim... Parte mais chata... ashahusua.

Valeu!