Escolar Documentos
Profissional Documentos
Cultura Documentos
Batalha Naval
Projecto de Programação de Sistemas – MEEC / MEAer
Conteúdo
1 Introdução 2
2 Componentes do Jogo 2
2.1 Matriz de Quadrı́culas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.2 Navios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3 Servidor 4
4 Cliente 4
Versões:
1 Introdução
O bem conhecido jogo da Batalha Naval é um jogo para 2 jogadores, jogado com papel
e lápis na sua forma original. A história deste jogo antes da sua comercialização não é
fácil de coligir, dadas as múltiplas versões existentes na Web. Ao que parece foi inventado
por Clifford Von Wickler nos primeiros anos do século XX (ainda antes da 1a Guerra
Mundial), o qual nunca o patenteou. No entanto, outras versões apresentam o jogo já
em uso por militares franceses no mesmo perı́odo. O jogo foi comercializado em 1931
pela empresa Starex Novelty Co. sob o nome Salvo. Em 1943 a empresa Milton Bradley
Company voltou a comercializá-lo ainda como jogo de papel e lápis, e em 1967 como jogo
de tabuleiro.
No jogo Batalha Naval, cada jogador dispõe no inı́cio a sua frota numa matriz de
quadrı́culas com dimensão 10x10, tendo em atenção que entre os navios deve existir pelo
menos uma quadrı́cula de intervalo. As quadrı́culas livres representam água.
Os jogadores jogam alternadamente, sendo o objectivo de cada jogador adivinhar onde
se encontram os navios do adversário, i.e., onde se encontram todas as quadrı́culas ocu-
padas do adversário. No contexto do jogo, isto é referido como afundar os navios do
adversário. Na versão mais simples, quando chega a sua vez de jogar, o jogador identifica
a quadrı́cula para onde quer disparar fornecendo as respectivas coordenadas (e.g. B7 ).
O adversário, por sua vez, diz-lhe qual foi o resultado do disparo: tiro ou água (caso
a quadrı́cula pedida se encontre ocupada ou desocupada, respectivamente). No caso de
tiro, o adversário também indica o tipo de navio atingido. Quando a última quadrı́cula
2 Componentes do Jogo
Os componentes do jogo consistem numa matriz de quadrı́culas e num conjunto de gráficos
que representam navios a ser dispostos na matriz.
2.2 Navios
Embora existam diversas variantes da Batalha Naval, será utilizada como referência uma
das versões mais populares, a qual define os navios apresentados na Tabela 1.
Navio de 2 Canos 2 3
Navio de 3 Canos 3 2
Navio de 4 Canos 4 1
Porta-aviões 5 1
3 Servidor
Para executar o servidor a partir da linha de comandos, para além do nome do executável,
o utilizador deve introduzir os seguintes argumentos:
• Raiz do gerador de números aleatórios, que deverá ser passada como parâmetro. A
função de cálculo é fornecida pelo corpo docente.
BNavalS 40000 34
No projecto, o servidor aceita ligações dos clientes, jogando cada cliente um jogo in-
dependente dos demais. No inı́cio da sessão com um cliente, o servidor gera o posiciona-
mento da frota aleatoriamente.1 Após a fase de inicialização, o servidor recebe comandos
do cliente, sendo os comandos possı́veis os seguintes (ver abaixo a Secção 5).
• Recomeçar: O cliente pede para desistir do jogo corrente e começar novo jogo.
4 Cliente
O programa cliente interage directamente com o jogador, redireccionando os comandos
introduzidos para o servidor e enviando para o terminal as respectivas respostas.
O cliente para o jogo será fornecido pelo corpo docente sob a forma de um
executável para as máquinas do laboratório da disciplina.
Para executar o programa cliente a partir da linha de comandos, para além do nome
do executável, o utilizador deve introduzir os seguintes argumentos:
1
Tal como já referido, as posições dos navios são inicializadas aleatoriamente, sendo a função de posi-
cionamento fornecida pelo corpo docente.
Programação de Sistemas – MEEC / MEAer 5
• Endereço IP do servidor.
Nota: Um endereço IP é composto por 4 números entre 0 e 255, sem zeros à esquerda
e separados pelo ponto (”dot-notation”). Se o servidor residir na mesma máquina onde
reside o cliente, pode-se usar como endereço IP o 127.0.0.1.
• t: Terminar sessão.
5.1 Inscrição
O comando de Inscrição tem o formato seguinte:
5.2 Disparar
O comando de Disparar tem o formato seguinte:
5.3 Terminar
O comando para Terminar a sessão tem o formato seguinte:
5.4 Recomeçar
O comando para Recomeçar tem o formato seguinte:
Nota: As entradas do Hall of Fame são enviadas por ordem crescente do número mı́nimo
de disparos.
• 100 Bytes: Estado de cada quadrı́cula: ’t’ para tiro, ’/’ para água, ’-’ para
desconhecido. A informação encontra-se estruturada linha-a-linha, por ordem al-
fabética da identificação da linha. As quadrı́culas de cada linha encontra-se orde-
nadas por número de coluna.
A resposta do servidor consiste num conjunto de mensagens, uma por cada cliente,
com o formato seguinte:
• nx15 Bytes: Informação dos n clientes conectados. Para cada cliente, a informação
consiste no seguinte:
8 Programação de Sistemas – MEEC / MEAer
Execução: O programa BNavalS tem de ser gerado, pelo makefile, nos PCs do labo-
ratório da disciplina e será testado também no laboratório por um programa cliente criado
pelos docentes.
• -1 valores: Fios de execução não são utilizados para dividir as tarefas de processos
complexos.
• -1.5 valores: Não são utilizadas primitivas de sincronização para evitar possı́veis
situações de corrida.