programando seu jogo para rodar em rede

19
Programando seu jogo para rodar em rede Kelvin Oliveira V 1.0

Upload: kelvin-oliveira

Post on 21-Feb-2017

206 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Programando seu jogo para rodar em rede

Programando seu jogo para rodar em rede

Kelvin Oliveira

V 1.0

Page 2: Programando seu jogo para rodar em rede

• Primeiro, baixe o código em que me baseei para criar a struct Rede

• Lembrando que são dois códigos-fonte: um faz o papel de cliente e o outro, de servidor

• LINKS: CLIENTE | SERVIDOR

Page 3: Programando seu jogo para rodar em rede

• Teste esses códigos no seu computador e procure compreende-los

• Com eles você pode fazer seu jogo funcionar em rede

• Agora, vou ensinar a usar struct que criei para modularizar o código do autor

Page 4: Programando seu jogo para rodar em rede

Funções da struct Rede

bool WinSockInit();

void EncerraWinSock();

void FlagsInit();

bool ServerInit(int portaServidor);

bool ClientInit(char *ipServidor,int portaServidor);

bool RecebeDoClient();

bool EnviaParaOClient(char pacote[PACKET_MAX_SIZE]);

bool EnviaParaOServer(char pacote[PACKET_MAX_SIZE]);

bool RecebeDoServer();

bool AceitaConexaoClient();

bool ConectaServer();

bool FechaConexaoClient();

void FechaSocketClient();

void FechaSocketServer();

Page 5: Programando seu jogo para rodar em rede

Vamos começar pelo inicio e pelo fim da utilização da biblioteca

Page 6: Programando seu jogo para rodar em rede

Primeiro passo:

Utilize a função WinSockInit() no inicio da função main() do seu jogo

Último passo:

Utilize a função EncerraWinSock() no final da função main() e antes do “return 0;”

Page 7: Programando seu jogo para rodar em rede

ANTES DE INICIALIZAR O SERVIDOR E OCLIENTE

Page 8: Programando seu jogo para rodar em rede

Segundo passo:

Utilize a função FlagsInit() para inicializar as flags com um valor conhecido e padrão (false)

Page 9: Programando seu jogo para rodar em rede

Terceiro Passo – Inicializando oscomponentes da rede

Esta inicialização dependerá da opção selecionada pelo jogador: ou cliente ou servidor...

Page 10: Programando seu jogo para rodar em rede

Terceiro Passo – Inicialização do servidor

A inicialização do servidor é feita com a função ServerInit que recebe um parâmetro:

• A porta onde o servidor estará disponível (int)

• Ex: ServerInit(20131);

Page 11: Programando seu jogo para rodar em rede

Terceiro Passo – Inicialização do cliente

A inicialização do cliente é feita com a função ClienteInit que recebe dois parâmetros:

• O IP do servidor

• A porta onde o servidor estará disponível (int)

• Ex: ClientInit(“127.0.0.1”,20131);

Page 12: Programando seu jogo para rodar em rede

Quarto passo – Conexão entre cliente e servidor

Assim como no passo 3, cliente e servidor precisam fazer ações para que tudo ocorra corretamente.

Mas, agora as coisas são sequenciais. Primeiro, o servidor abre um socket de conexão e depois o cliente conecta-se ao socket.

Page 13: Programando seu jogo para rodar em rede

Quarto passo – Servidor esperaa conexão do cliente

O servidor precisa ficar esperando uma conexão do cliente

Ele vai fazer absolutamente nada a não ser esperar pela conexão (tenha isso em mente)

Isso pode ser feito com a função AceitaConexaoClient() que retorna true quando o cliente se conectar ao socket

Page 14: Programando seu jogo para rodar em rede

Quarto passo– Cliente conecta-seao servidor

Se o servidor está esperando a conexão do cliente, então o cliente pode se conectar ao socket do servidor

Utilize a função ConectaServer() para isso. Ele vai retornar true, caso a conexão ocorra.

Page 15: Programando seu jogo para rodar em rede

Quinto Passo – Envie os Pacotes

- Cliente e servidor estão conectados. Portanto,você pode enviar dados do jogo. Para isso...

– Verifique o valor da variável clienteOuServidor que vai ser igual ou a “servidor” ou a “cliente” depedendo da função Init utilizada

Page 16: Programando seu jogo para rodar em rede

Quinto Passo – Envie os Pacotes

– Se o elemento da rede for servidor, então utilize a função EnviaParaOClient() que recebe uma mensagem (pacote) como parâmetro

- Caso contrário, use EnviaParaOServer passando uma mensagem como parâmetro

Page 17: Programando seu jogo para rodar em rede

Sexto passo – Receba os pacotes

– Utilize as funções RecebeDoCliente ou RecebeDoServerpara receber os pacotes. Quando retornar true, um novo pacote foi recebido

- Para verificar o conteúdo do pacote utilize:[nome_da_variavel].pacoteEx: minhaRede.pacote

Page 18: Programando seu jogo para rodar em rede

Sexto passo – Receba os pacotes

– Assim como o servidor não faz nada a não ser esperarPela conexão do cliente, o recebimento dos pacotes é prioridade total para o servidor e para o cliente

- Eles só vão executar outras ações do jogo quando a função de receber pacotes retornar true (pacote chegou) ou false (erro de conexão entre os sockets)

Page 19: Programando seu jogo para rodar em rede

Por enquanto é só isso.

Até a próxima versão do tutorial o/