Programação @ IW — Trabalho Final
Universidade da Beira Interior, 2015/2016
26 de novembro de 2015
Objectivos: Este trabalho pretende dar espaço ao aluno para que demonstre os
conhecimentos e competências adquiridas no âmbito da programação em linguagem
Java, além de desafiar/estimular o aluno a um treino e desenvolvimento mais profundo,
na prática da programação.
O trabalho final consiste na implementação
de uma versão específica do célebre jogo da
Batalha Naval. A interface será programada
em modo de texto e conterá uma linha de
comandos, tal como exemplificado a seguir. O
trabalho é subdividido em várias etapas/
metas, cada uma valendo um percentagem da
cotação final (5 valores).
O jogo inicia-se com a geração de um
tabuleiro 16x16 com o posicionamento
aleatório da armada, tal como ilustrado na
Figura 1. A armada é composta por um porta
aviões (P), dois couraçados (C) três
torpedeiros (T) e quatro hidroaviões (H), tal
como representado na mesma figura.
Evidentemente, no início do jogo, a
disposição da armada ficará escondida, vendo
o jogador unicamente o tabuleiro vazio.
Aparecerá uma prompt indicando o tempo
decorrido desde o início do jogo e permitindo
ao jogador inserir diversos comandos. O
comando principal é aquele em que o jogador
dispara tiros sobre a armada (tabuleiro),
através da indicação das coordenadas
(combinação número+letra). Neste jogo o
utilizador executará esta ação com o
comando “fogo” seguido de três localizações,
tal como ilustrado na Figura 2.
Figura 1
O efeito de acertar num elemento da armada é o
do dano parcial e será revelada a componente
desse elemento em que o jogador acertou. Por
exemplo, no comando “fogo 9H 3N 15M” o
efeito foi o de acertar no porta-aviões (3N), num
hidroavião (15N) e um tiro falhado (na água),
posição (3N), sinalizada com um asterisco (*).
Assim, o objetivo do jogador é afundar a armada
inimiga no menor tempo possível. Repare-se que
na prompt da Figura 2 vai aparecendo o tempo
decorrido, desde o início do jogo. Nesta prompt
e além do comando “fogo” deve ser possível
inserir um conjunto de comandos, que permitam
ao jogador executar as interações básicas do
jogo: obter ajuda, sair, mostrar o tabuleiro,
mostrar a solução, reiniciar o jogo, entre outros
que sejam considerados pertinentes.
Figura 2
De seguida apresentam-se as etapas esperadas e a cotação percentual de cada uma:
A) Apresentação de um tabuleiro vazio da batalha-naval, de ordem NxN, semelhante ao
mostrado nas figuras anteriores (16x16). (5%)
B) Programação de uma prompt que mede o tempo decorrido e permite ao utilizador inserir
comandos sobre o jogo. (5%)
C) Posicionamento de um elemento da armada no tabuleiro, numa localização e orientação
aleatória. (10%)
D) Posicionamento aleatória de toda a armada. Isto é, a geração aleatória de um tabuleiro de
jogo completo. Não esquecer a regra da Batalha Naval que diz que não podemos dispor vasos
de guerra de forma contígua (colados uns aos outros). (40%)
E) Implementação dos seguintes comandos de jogo (20%):
1. fogo — o disparo de três tiros sobre a armada, tal como descrito anteriormente.
2. jogo — apresenta o tabuleiro do jogo com o estado atual, isto é, tudo aquilo em que o
jogador já acertou, bem como os tiros na água (Figura 2).
3. estado — Apresenta só o estado do jogo, isto é, a contagem de tudo aquilo em que o
jogador já acertou ou o que falta de cada vaso para afundar completamente a armada.
Corresponde à tabela identificada como “##### Armada #####”, na Figura 1.
4. solução — Mostra o tabuleiro solução, revelando o posicionamento da armada.
5. acaso — Recria um novo tabuleiro e mostra-o, de acordo com a etapa D).
6. ajuda — Mostra o leque de comandos que o utilizador pode inserir.
7. reset — Reinicia o jogo, gerando um novo tabuleiro aleatório, reiniciando também o
tempo ou cronómetro, o qual vai sendo mostrado na prompt.
8. sair — Comando para abandonar o jogo.
F) Implementação de um comando que permita gravar um tabuleiro de jogo num ficheiro de
texto, por exemplo: “[00:13:31]> gravar C:/Documentos/tabuleiro.txt”. (10%)
G) Implementação de um comando que permita reiniciar o jogo carregando um tabuleiro, a
partir de um ficheiro de texto, criado por um utilizador. Por exemplo, poderá ser algo
semelhante a: “[00:13:58]> carregar C:/Documentos/tabuleiro.txt”. (10%)
Nota: Consulte o exemplo demonstrativo disponibilizado pelo docente, na secção das práticas,
da nossa página web — ficheiro “BatalhaNaval.jar” . Para o experimentar, abra uma linha de
comandos, no seu sistema operativo, posicione-se na diretoria que contém o ficheiro e execute o
comando: “java -jar BatalhaNaval.jar”.
Regras Gerais:
1. Os trabalhos serão realizados individualmente. Qualquer vestígio de plágio implicará na
anulação do trabalho e consequente reprovação na unidade.
2. Não serão aceites trabalhos “fantasmas” — os que aparecem só no dia da entrega!
3. A entrega é feita enviando um e-mail para o docente com o trabalho em anexo, num
ficheiro “zip” ou “rar” com todo o conteúdo.
4. O trabalho poderá ser submetido até às 23h59 do dia 8 de Janeiro de 2016. Atrasos não
são permitidos! Um atraso implica a reprovação!
5. Na semana de 11 a 15 de Janeiro, será combinado o dia e hora de defesa do trabalho de
cada aluno.
Bom Trabalho!
Download

Programação @ IW — Trabalho Final