- O mundo é formado por uma matriz de células, com N linhas
e N colunas.
- Cada célula pode conter zero ou um obstáculo (árvore,
água, rocha, etc).
- Cada célula que não contém obstáculo
pode conter:
- Um jogador
carregando entre zero e dez ovos;
- Zero
ou mais ovos no chão.
- A cada momento, cada jogador está localizado em exatamente
uma célula.
- A cada momento, cada jogador está voltado para exatamente
uma direção.
- O campo de visão do jogador corresponde às seguintes
células:
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . o o o o o . . . . .
. . . . . o o o o o . . . . .
. . . . . o o ^ o o . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
- As células visíveis ao jogador são rotuladas com relação ao jogador:
2E2 2E1 2C0 2D1
2D2
1E2 1E1 1C0
1D1 1D2
0E2 0E1 0C0
0D1 0D2
- O "Tempo no Mundo" avança em ticks indivisíveis, correspondendo
a T milisegundos cada.
- A cada tick cada jogador pode fazer somente uma das ações
abaixo:
- Pegar um ovo que está
na célula que ele habita;
- Virar para a esquerda;
- Virar para a direita;
- Avançar uma casa;
- Recuar uma casa;
- Jogar o ovo na célula
indicada por yZx, onde:
- Z pode ser "E" , "C" ou "D";
- x e y podem variar entre 0 e 4.
- Quando um ovo é jogado na célula X, existem três
possibilidades:
- A célula X contém um obstáculo, o ovo é destruído;
- A célula X contém um jogador, o ovo é destruído;
- A célula X não contém obstáculo nem jogador,
o ovo passa a fazer parte da célula X.
- Para cada jogador J são mantidas duas estatísticas:
- Número de ovos jogados por J que acertaram outros jogadores;
- Número de ovos jogados por outros jogadores que acertaram J.
- Dentro do mesmo tick, as ações são processadas
na ordem em que foram descritas acima.
- Conflitos de movimento são resolvidos de maneira aleatória.
Por exemplo, dois jogadores querem
avançar para a mesma célula, no mesmo tick.
Protocolo Cliente-Servidor
- Mensagem do Cliente para o Servidor:
<número do jogador><comando>
Comandos a disposição do cliente:
"C"- cria um novo jogador;
"P" - pega um ovo que está na célula;
"E" - vira para a esquerda;
"D"- vira para a direita;
"A"- avança uma casa;
"R" - recua uma casa;
"JyZx"- joga um ovo na célula indicada por yZx.
- Mensagem do Servidor para o Cliente:
<número do jogador><número do tick><comando
realizado><visão><estatística>
Onde <número do jogador> são dois dígitos decimais.
Onde <número do tick> são dez dígitos decimais.
Onde <comando realizado> é a letra do comando, maiúscula
para sucesso e minúscula para erro.
Onde <visão> é:
M[0E2] M[0E1] M[0C0] M[0D1] M[0D2]
M[1E2] M[1E1] M[1C0] M[1D1] M[1D2]
M[2E2] M[2E1] M[2C0] M[2D1] M[2D2]
Onde M[xxx] é "##" para vazio, "XX" para obstáculo, "OO"
para ovo e "JN" ou "JE" ou "JW" ou
"JS" para jogador, conforme a direção para a qual ele
está voltado, com relação ao jogador que
recebe a mensagem. No caso da célula [0C0], é usado "OO"
para célula com ovos ou "JN" para
célula sem ovos.
Onde <estatística> é
"+" <número de ovos a favor> "-" <
número de ovos contra>"@"<quantidade de ovos>
Questões a serem abordadas no Trabalho 1
Grupo 1:
Representação do mundo:Quais estruturas de dados
utilizar para representar o "Estado do Mundo"
Escalabilidade: Como projetar o servidor para que passe de 10
jogadores iniciais para 100.000
jogadores, através da adição de mais recursos
de hardware, porém sem modificar sua estrutura e os
seus protocolos.
Grupo 2:
Confiabilidade: Como projetar o servidor para que o "Estado
do Mundo" não seja perdido no caso
de falha de uma máquina servidora.
Disponibilidade: Como projetar o servidor para que o jogo continue
mesmo que ocorra falha de uma
máquina servidora.
Grupo 3:
Desempenho: Como projetar o servidor para que o seu desempenho
possa melhorar (ticks mais
rápidos) através da adição de mais recursos
de hardware.
Segurança: Como projetar o servidor para que um cliente
não possa enviar comandos em nome de
outro cliente.