sexta-feira, 10 de julho de 2015

Jogo no servidor e cliente

O servidor e o cliente do nosso jogo funcionam em cima de uma mesma estrutura básica, mas há diferenças grandes entre eles.

Para começar, nosso servidor deve ser anti-cheating. O player pode alterar sua posição de um jeito "ilegal" e mandar para o servidor e... Opa, devemos tratar isso. E se ele quiser roubar uns pontos de vida? Para evitar isso, usamos um servidor autoritário: o cliente envia inputs para o servidor e desenha na tela, além de atualizar localmente o que recebe remotamente, enquanto nós processamos tudo.


quinta-feira, 9 de julho de 2015

Trabalhando com JavaScript Object Notation (JSON)

Algumas propriedades de um jogo devem ser definidas de maneira que seja fácil trocar posteriormente. Por exemplo, a massa de um corpo no qual age uma força, coeficientes de atrito entre outras propriedades físicas. Isso porque não existe um valor "ideal" para tais características. E só há um jeito de descobrir a melhor massa, ou força, ou qualquer propriedade: testando.

Geralmente essas propriedades são utilizadas em vários lugares, então o ideal é armazená-las em um arquivo de configuração, de forma que até quem não viu o código (ou mesmo quem não entende de programação) possa alterá-las.

Entidades, Componentes e Game Engine própria

Conforme dito no último post, desenvolver uma game engine surgiu da necessidade de rodar a mesma lógica no cliente e servidor. Um amigo assumiu a tarefa, mas todos ajudaram um pouco, então falarei de todo o esquema de maneira geral.

Pirate Wars: Realtime multiplayer game

Três amigos e eu (inspirados pelo agar.io) trabalhamos recentemente em criar um jogo multiplayer em tempo real que pudesse ser jogado utilizando o browser sem nenhum plugin extra, desenhando diretamente no canvas, recurso de HTML5.

Github: https://github.com/alexandremuzio/piratewars
11659178_1030586076986328_1775350737_o.jpg
Screenshoot do jogo
A ideia é um jogo estilo MOBA (Mutiplayer Online Battle Arena), onde dois times jogam, cada player controla um barco e o objetivo é destruir uma base inimiga. Os players podem atirar e deixar minas no campo, mas mais features ainda devem ser adicionadas. Como era esperado, tivemos muito trabalho!

Tudo foi feito em JavaScript, com o servidor em NodeJS. Para o cliente, utilizamos Phaser, uma framework própria para HTML5 (orientada a sprites), para desenhar no canvas.

No entanto, o jogo precisa rodar da mesma forma no servidor e no cliente (embora algumas coisas sejam processadas de forma diferente). Sendo assim, desenvolvemos uma game engine própria que pudesse ser aproveitada pelos dois lados, e utilizamos uma biblioteca para física, p2.

Continue lendo sobre este jogo aqui.