Beruflich Dokumente
Kultur Dokumente
Resumo
Status deste Memorando
Este documento especifica um protocolo de rastreamento de padrões da Internet para
a comunidade da Internet e solicita discussão e sugestões de melhorias. Por favor,
consulte a edição atual da documentação do desenvolvedor jetrix e o código fonte do
GTetrinet para o estado de padronização e status deste protocolo. A distribuição
deste memorando é ilimitado.
Resumo
Abstract
O protocolo TetriNET define o modo multiplayer do Game Tetris. É um protocolo
genérico, que pode ser usado em sistemas distribuı́dos. Define as regras de comunicação
e jogo do cliente e servidor.
Tetrinet foi originalmente desenvolvido pela St0rmCat em 1997. A última versão
oficial é 1.14. O jogo foi originalmente desenvolvido para o Windows e posteriormente
foi portado para outros sistemas. O St0rmCat lançou o TetriNET 2 em 2000, que apresenta
gráficos aprimorados, mais tipos de blocos especiais, recursos adicionais (como reter
a peça e bloquear sombras) e um servidor mestre.
Esta informação faz referência ˋ
a página não oficial do protocolo TetriNET hospedada
por tetrinet.us, a documentação do desenvolvedor jetrix e o código fonte do GTetrinet.
Tabela de Conteúdo
1 Introdução 4
1.1 Propósito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 Requerimentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Terminologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4 Visão Geral do Protocolo . . . . . . . . . . . . . . . . . . . . . . . . . 6
2 Servidor - Mensagens 7
2.1 Jogadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1.1 Numero de Jogador . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1.2 Ingresso de Jogador . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1.3 Saı́da de Jogador . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1.4 Equipe de Jogadores . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1.5 Ranking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2 Comunicação entre Jogadores . . . . . . . . . . . . . . . . . . . . . . . 8
2.2.1 Mensagem de bate-papo da partida . . . . . . . . . . . . . . . . . 8
2.2.2 Ações de bate-papo da Partida . . . . . . . . . . . . . . . . . . . 9
2.2.3 Mensagem de chat do Jogo . . . . . . . . . . . . . . . . . . . . . 9
2.3 O Jogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3.1 Novo Jogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3.2 Partida em Andamento . . . . . . . . . . . . . . . . . . . . . . . 9
2.3.3 Atualização de Campos . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.4 Atualização de Nı́vel . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.5 Usar Especial . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.6 Enviar linhas de adição de Estilo Clássico . . . . . . . . . . . . 10
2.3.7 Jogador Eliminado . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3.8 Jogador Vencedor . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3.9 Pausar / Retomar Partida . . . . . . . . . . . . . . . . . . . . . 11
2.3.10 Fim de Jogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.4 String de Regras do Jogo . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.5 Funções Adicionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.5.1 Sem conexão . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.5.2 Solicitação de Informações do Cliente . . . . . . . . . . . . . . . 13
2.5.3 Teste de Conexão . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.6 Linhas de lixo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.7 Linhas Espciais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.8 Tipos de Blocos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.8.1 Blocos Especiais . . . . . . . . . . . . . . . . . . . . . . . . . 18
3 Modo Clássico 19
3.1 Adicionar Estilo Clássico . . . . . . . . . . . . . . . . . . . . . . . . 19
4 Cliente - Mensagens 20
4.1 Conectar ao Servidor . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.1.1 Login . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.1.2 Nome da Equipe . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.1.3 Informação do Cliente . . . . . . . . . . . . . . . . . . . . . . . 21
4.2 Comunicação do Cliente . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.2.1 Mensagem de bate-papo da partida . . . . . . . . . . . . . . . . . 21
4.2.2 Ação de bate-papo da Partida . . . . . . . . . . . . . . . . . . . 21
4.2.3 Mensagem de Bate-Papo do Jogo . . . . . . . . . . . . . . . . . . . 22
4.3 O Jogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.3.1 Iniciar e Parar Jogo . . . . . . . . . . . . . . . . . . . . . . . 22
4.3.2 Atualização de Campo . . . . . . . . . . . . . . . . . . . . . . . 22
4.3.3 Atualização de nı́vel . . . . . . . . . . . . . . . . . . . . . . . 22
5 Atualização de Campos 25
1 Introdução
1.1 Propósito
1.2 Requerimentos
1.3 Terminologia
Esta especificação usa vários termos para se referir ˋas funções desempenhadas
pelos clientes e servidor, e os objetos da comunicação do protocolo
TetriNet.
partyline (partida)
Uma sessão de partida entre jogadores.
tetrifast
Variação do jogo TetriNet deixando o jogo mais veloz.
special (especial)
block (bloco)
Nome dos objetos básicos do jogos
newgame
Inicio de um novo jogo.
starting height
Altura inicial da partida
starting level
Nı́vel que se inicia a partida
level increment
Incremento do nı́vel
specials added
Especial adicionado
special capacity
Capacidade do especial
Block frequencies
frequência de blocos
special frequencies
Frequência de especial
average levels
Taxa do nı́vel, velocidade.
classic rules
Regras clássicas
2 Servidor - Mensagens
2.1 Jogadores
playerleave <number>
2.1.5 Ranking
gmsg <message>
2.3 O Jogo
ingame
sb 0 cs<numlines> <sendernum>
playerlost <playernum>
playerwon <playernum>
pause <state>
endgame
newgame 0 1 2 1 1 1 18 33333333333333555555555555552222222222222224444444
4444444666666666666667777777777777711111111111111111111111111111111111111
1111111111222222222222222222223444444444444456666666666666667888888999999
99990 1ÿ
newgame <starting height> <starting level> <lines per level> <level increment>
<lines per special> <specials added> <special capacity> <block frequencies>
<special frequencies> <average levels> <classic rules>
ou
******* <starting height> <starting level> <lines per level> <level increment>
<lines per special> <specials added> <special capacity> <block frequencies>
<special frequencies> <average levels> <classic rules>
noconnecting <reason>
lvl 0 0
2. Para garantir que haja pelo menos uma célula vazia, selecione aleatoriamente
uma célula na linha e defina-a como vazia.
Observe que esse algoritmo pode resultar em uma linha completamente vazia.
if ( cells_left == 0)
{
// Replace the cell with a random special
field_contents [ row ][ column ] =
random_special ( special_frequencies );
// Decrement the number of non - special
cells remaining
non_special_cells - -;
// Jump to the next iteration of the
special - adding loop
goto next_special ;
}
// Haven ’ t reached the predetermined
// number of cells yet
cells_left - -;
}
}
}
}
else
{
// Make 20 attempts to find an empty column
int tries ;
for ( tries = 0; tries < 20; tries ++)
{
// Choose a random column
int row , column = random () % NUM_COLUMNS ;
// Check if the column is empty
for ( row = 0; row < NUM_ROWS ; row ++)
{
if ( field_contents [ row ][ column ] > 0)
break ;
}
// If the column was empty , add the new special
if ( row == NUM_ROWS )
{
// Add the new special to the bottom row
field_contents [0][ column ] =
random_special ( special_frequencies );
// Go to the next iteration of the
// special - adding loop
goto next_special ;
}
}
// If we ’ ve tried 20 times and not found
// an empty column , abandon adding more specials
if ( tries == 20)
goto abort ;
}
next_special :
}
abort :
}
3 Modo Clássico
4 Cliente - Mensagens
(Nota: "jogador local"é uma convenção que se refere ao usuário do cliente que
envia a mensagem.)
4.1.1 Login
gmsg <message>
Usada para enviar uma mensagem do jogo (ou seja, uma mensagem inserida
no campo de bate-papo abaixo das áreas de jogo) do jogador local para
os outros jogadores no servidor. Tenha em atenção que esta mensagem
não contém o número de jogador do jogador local e, como resultado,
o cliente de receção não sabe de quem é que veio. Recomenda-se que
os clientes anexe o apelido do jogador local ˋa frente do conteúdo da
mensagem antes de enviá-lo.
4.3 O Jogo
gmsg <message>
sb 0 cs<numlines> <sendernum>
playerlost <playernum>
Enviado quando o jogador local perde o jogo, isto é, quando o seu campo
está cheio ao ponto que o bloco seguinte não pode ser movido para ele.
5 Atualização de Campos
A mensagem de atualização de campo, que é idêntica para as versões de servidor
para cliente e de cliente para servidor, possui o seguinte formato:
f <playernum> <fieldstring>
O segundo argumento vem em duas formas. A forma mais longa, mas mais simples,
é chamada de \fieldstring", que consiste em 264 (12 * 22) caracteres, cada um
representando uma única célula no campo, indexados da esquerda para a direita e
depois de cima para baixo, começando com o canto superior esquerdo do campo. Um
example de fieldstring:
0000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000005
10000000055511101000a555511010005555a5101022r525521010225222c22
Os números representam células coloridas normais (com os zeros sendo espaço vazio)
enquanto as letras (que sempre serão minúsculas) representam blocos especiais.
A segunda forma mais curta de atualização de campo é uma atualização parcial:
#8F7G8G9G O primeiro caractere de uma atualização de campo parcial está no
intervalo de ASCII 0x21 a 0x2F, inclusive. Estes valores correspondem a uma cor
de célula ou tipo de bloco especial:
Uma atualização parcial pode conter mais de um dos caracteres nesta lista e
sempre conterá um deles como o primeiro caractere