SlideShare una empresa de Scribd logo
1 de 19
Programando seu jogo
para rodar em rede
Kelvin Oliveira
V 1.0
• 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
• 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
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();
Vamos começar pelo inicio e pelo fim da
utilização da biblioteca
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;”
ANTES DE INICIALIZAR O SERVIDOR E O
CLIENTE
Segundo passo:
 Utilize a função FlagsInit() para inicializar as flags
com um valor conhecido e padrão (false)
Terceiro Passo – Inicializando os
componentes da rede
Esta inicialização dependerá da opção selecionada pelo
jogador: ou cliente ou servidor...
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);
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);
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.
Quarto passo – Servidor espera
a 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
Quarto passo– Cliente conecta-se
ao 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.
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
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
Sexto passo – Receba os pacotes
– Utilize as funções RecebeDoCliente ou RecebeDoServer
para receber os pacotes. Quando retornar true, um novo pacote
foi recebido
- Para verificar o conteúdo do pacote utilize:
[nome_da_variavel].pacote
Ex: minhaRede.pacote
Sexto passo – Receba os pacotes
– Assim como o servidor não faz nada a não ser esperar
Pela 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)
Por enquanto é só isso.
Até a próxima versão do tutorial o/

Más contenido relacionado

Destacado

Ladies squat eq rankings 2014
Ladies squat eq rankings 2014Ladies squat eq rankings 2014
Ladies squat eq rankings 2014Emma Kiely
 
I Want To Tell The World 4
I Want To Tell The World 4I Want To Tell The World 4
I Want To Tell The World 4nahida
 
I Want To Tell The World 2
I Want To Tell The World 2I Want To Tell The World 2
I Want To Tell The World 2nahida
 
Cronograma de los estudiantes para el proyecto
Cronograma de los estudiantes para el proyectoCronograma de los estudiantes para el proyecto
Cronograma de los estudiantes para el proyectolaurasofia123
 
APR junior & senior opereation
APR junior & senior opereationAPR junior & senior opereation
APR junior & senior opereationali zergan yadimi
 
Técnicas de enseñanza para mejorar la motivación de los estudiantes
Técnicas de enseñanza para mejorar la motivación de los estudiantesTécnicas de enseñanza para mejorar la motivación de los estudiantes
Técnicas de enseñanza para mejorar la motivación de los estudiantesJared Peralta
 
Gigant ESD guide
Gigant ESD guideGigant ESD guide
Gigant ESD guideGigant
 

Destacado (9)

1- Residencias Las Olas_Pag 1
1- Residencias Las Olas_Pag 11- Residencias Las Olas_Pag 1
1- Residencias Las Olas_Pag 1
 
Ladies squat eq rankings 2014
Ladies squat eq rankings 2014Ladies squat eq rankings 2014
Ladies squat eq rankings 2014
 
I Want To Tell The World 4
I Want To Tell The World 4I Want To Tell The World 4
I Want To Tell The World 4
 
I Want To Tell The World 2
I Want To Tell The World 2I Want To Tell The World 2
I Want To Tell The World 2
 
Cronograma de los estudiantes para el proyecto
Cronograma de los estudiantes para el proyectoCronograma de los estudiantes para el proyecto
Cronograma de los estudiantes para el proyecto
 
Video report
Video reportVideo report
Video report
 
APR junior & senior opereation
APR junior & senior opereationAPR junior & senior opereation
APR junior & senior opereation
 
Técnicas de enseñanza para mejorar la motivación de los estudiantes
Técnicas de enseñanza para mejorar la motivación de los estudiantesTécnicas de enseñanza para mejorar la motivación de los estudiantes
Técnicas de enseñanza para mejorar la motivación de los estudiantes
 
Gigant ESD guide
Gigant ESD guideGigant ESD guide
Gigant ESD guide
 

Programando seu jogo para rodar em rede

  • 1. Programando seu jogo para rodar em rede Kelvin Oliveira V 1.0
  • 2. • 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
  • 3. • 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
  • 4. 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();
  • 5. Vamos começar pelo inicio e pelo fim da utilização da biblioteca
  • 6. 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;”
  • 7. ANTES DE INICIALIZAR O SERVIDOR E O CLIENTE
  • 8. Segundo passo:  Utilize a função FlagsInit() para inicializar as flags com um valor conhecido e padrão (false)
  • 9. Terceiro Passo – Inicializando os componentes da rede Esta inicialização dependerá da opção selecionada pelo jogador: ou cliente ou servidor...
  • 10. 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);
  • 11. 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);
  • 12. 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.
  • 13. Quarto passo – Servidor espera a 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
  • 14. Quarto passo– Cliente conecta-se ao 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.
  • 15. 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
  • 16. 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
  • 17. Sexto passo – Receba os pacotes – Utilize as funções RecebeDoCliente ou RecebeDoServer para receber os pacotes. Quando retornar true, um novo pacote foi recebido - Para verificar o conteúdo do pacote utilize: [nome_da_variavel].pacote Ex: minhaRede.pacote
  • 18. Sexto passo – Receba os pacotes – Assim como o servidor não faz nada a não ser esperar Pela 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)
  • 19. Por enquanto é só isso. Até a próxima versão do tutorial o/