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
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(**)