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!