Introdução às Redes de Computadores/Jogo de Jo-Ken-Po

Titulo: Jogo de Jo-Ken-Po

Descrição: Protocolo que gerenciará um jogo online de pedra, papel e tesoura entre duas pessoas.

Arquitetura: cliente/servidor

Funcionalidades: Poderão se conectar dois jogadores humanos ao servidor, para jogarem um contra o outro. O jogador também terá a opção de jogar contra o computador.

Referencial teórico:

www.dcc.unesc.net/sulcomp/06/artigos/Workshop/21881.pdf

Kurose, James F. E Ross, Keith W.; Redes de Computadores e a Internet; 3ª Edição, Editora Pearson.



Protocolo Jogo de Jo-Ken-Po


1. RFC do Protocolo Jogo de Jo-Ken-Po


1.1. Introdução (Resumo)

O protocolo Jogo de Jo-Ken-Po é um protocolo da camada de aplicação que visa gerenciar um jogo online entre dois jogadores humanos, ou entre um jogador humano e o computador. Ele recebeu este nome porque o jogo que estará sendo usado para implementá-lo é um jogo de Jo-Ken-Po (pedra, papel e tesoura), mas com as devidas modificações, ele pode gerenciar outros tipos de jogos que envolvam dois jogadores. O protocolo é orientado à conexão, e exige o serviço de entrega confiável de dados. Portanto, será considerado o uso de TCP na camada de transporte para implementação do protocolo.

1.2. Definições

Sintaxe:

   jogador humano: clientes
   jogador computador: servidor
   jogador desafiante: o jogador que desafia outro jogador para uma partida de jo-ken-po.
   jogador desafiado: o jogador que recebe um desafio de outro jogador para uma partida de jo-ken-po.


O protocolo será implementado sobre o protocolo TCP pois este oferece os serviços que o protocolo requer. Neste protocolo, após o estabelecimento da conexão entre o cliente e o servidor, haverá duas possibilidades de escolha para o cliente: iniciar um jogo contra o computador, ou um iniciar jogo contra um humano.

  • Jogo contra o computador

Nessa modalidade, primeiramente o servidor deverá enviar ao cliente uma mensagem contendo as opções de jogadas (pedra, papel e tesoura), e esperar pela resposta do cliente. O cliente escolherá uma jogada, e enviará sua resposta para o servidor. O servidor irá gerar uma jogada aleatória, e decidirá se o jogo foi vencido pelo cliente ou pelo servidor. O servidor então enviará ao cliente o resultado do jogo. Após o fim do jogo, o servidor irá perguntar se o jogador quer realizar um novo jogo contra o computador. Em caso positivo, um novo jogo será iniciado contra o servidor. Em caso negativo, o cliente será encaminhado para a tela inicial do jogo.


  • Jogo contra outro jogador humano

Nessa modalidade, o servidor dá ao cliente uma lista com jogadores para que ele possa escolher contra quem ele quer jogar, ou então, o cliente pode esperar pelo convite de algum adversário. No primeiro caso, o servidor enviará ao cliente uma lista com jogadores para que ele possa escolher contra quem ele quer jogar. O cliente então retornará uma resposta para o servidor, contendo o jogador contra o qual ele quer jogar. O servidor enviará uma mensagem perguntando ao jogador escolhido se ele quer jogar contra o desafiante. Se for positiva a resposta, então o jogo começará. Se for negativa, o cliente desafiante voltará à lista para escolher um outro cliente contra o qual ele quer jogar.

Se ambos os jogadores concordarem em jogar, o jogo se iniciará. O servidor enviará para os dois jogadores uma mensagem com as possibilidades de jogadas que eles possuem, e ficará esperando pela resposta de ambos. Assim que ambos responderem, o servidor verificará qual o resultado do jogo e enviará uma resposta para ambos os jogadores. Os jogadores podem decidir jogar novamente ou escolher outro oponente. Se houver um jogador que queira jogar contra outro oponente, ambos irão para a tela de seleção de oponentes.


1.3. Mensagens

   0                           15 16                          31
   +-----------------------------+-----------------------------+
   |        Porta de Origem      |       Porta de Destino      |
   +-----------------------------+-----------------------------+
   |          IP de Origem       |         IP de Destino       |
   +-----------------------------+-----------------------------+
   |                       Número do Jogo                      |
   +-----------------------------+-----------------------------+
   |A| B | D | F |H|I|J|K|L|M|O|P|       Ip do Oponente        |
   +-----------------------------+-----------------------------+
   |         IP do Jogador       |      Espaço em Branco       |
   +-----------------------------+-----------------------------+


Campos

“Número do Jogo” serve para identificar os jogos relacionado com seus jogadores pelo Ip, pois podem estar acontecendo vários jogos ao mesmo tempo.

A:

   1 – É pedido de conexão
   0 – Não é pedido de conexão

B:

   00 – Não é pedido de início de jogo
   01 – Pedido de início de jogo contra computador
   10 – Pedido de início de jogo contra humano
   11 – Não é pedido de início de jogo

D:

   00 – Sem jogada
   01 – Papel
   10 – Tesoura
   11 – Pedra

F:

   00 – Não é resultado de jogo
   01 – Ganhou
   10 – Perdeu

H:

   0 – Não é pedido de desconexão
   1 – É pedido de desconexão

Os campos I, J, K, L, M, O e P não são utilizados e podem ser usados para necessidades futuras.

No “Ip do Oponente”, 999.999.999.999 indica jogo contra computador.


1.4. Bugs

Até a data de publicação desta RFC não foi constatada a existência de bugs.


1.5. Melhorias Futuras

Pode-se gerenciar partidas com mais que dois jogadores humanos expandindo as possibilidades de jogos que poderiam ser implementados utilizando esse protocolo.


2. Fluxo de mensagens do protocolo Jo-Ken-Po


Fluxo de mensagens do protocolo Jo-Ken-Po


3. FSM's do Protocolo Jogo de Jo-Ken-Po


Abaixo, estão as FSM's tanto do cliente, quanto do servidor do protocolo Jogo de Jo-Ken-Po. O estado inicial da Máquina de Estado finito está marcado com dois asteriscos(**)