A versão pretendida para o jogo da Batalha Naval consiste em:
Posicionar aleatoriamente 11 barcos num tabuleiro de 10x10 células (desde que haja sempre uma célula em branco entre dois barcos)
Aceitar do utilizador mensagens do tiro, em que são indicadas (no máximo) 3 posições da grelha de cada vez
Para cada um desses tiros é verificado se acertou num barco ou na água (tiros repetidos são ignorados)
É enviada ao utilizador uma mensagem a indicar qual o resultado dos tiros (quantos acertaram e quantos falharam)
É mostrada ao utilizador a nova grelha, com a indicação de quais os tiros dados na água e quais os tiros que acertaram em navios
É mostrada ao utilizador uma mensagem que indica quantos tiros já foram dados, que percentagem destes acertou o alvo e que percentagem da frota falta afundar (i.e. número de tiros certeiros / total de células ocupadas por barcos)
Volta a aceitar tiros do utilizador (2), até toda a frota ter sido afundada
Ao afundar toda a frota é emitida uma mensagem ao utilizador indicando que terminou e quantos tiros deu
Caso a sua pontuação esteja entre as 5 melhores registadas até ao momento (i.e. se tiver dado menos tiros que um dos 5 melhores jogadores registados) deve ser pedido o nome ao utilizador e registada em ficheiro (high_scores.txt) a sua pontuação (número de tiros dado). Por fim mostra-se ao utilizador a tabela dos melhores jogadores já com a sua entrada registada. Caso haja menos de 5 pontuações registadas, qualquer utilizador que termine o jogo terá a sua pontuação registada.
Os barcos são:
Um porta-aviões (5 células em T)
Uma fragata (4 células)
Dois torpedeiros (3 células)
Três contra-torpedeiros (2 células)
Quatro submarinos (1 célula)
2. Implementação
Estruturas de dados
Serão fornecidas as classes:
InterfaceGraficoBatalhaNaval
Coordenada
É obrigatória a implementação das classes:
BatalhaNaval
InterfaceTextoBatalhaNaval
É aconselhável, ainda que não obrigatória a implementação das classes:
Barco
Jogador
É permitida a implementação de outras classes que sejam julgadas adequadas para uma boa estruturação da resolução.
2.1 Posicionamento dos barcos
O posicionamento dos barcos deve começar pelo maior (o porta-aviões) e terminar nos submarinos.
Para gerar um número aleatório entre 0 e N use a função Math.rand() (gera um número decimal entre 0 e 1) multiplicando o resultado por N. Se achar necessário pode também usar a função Math.round() que arredonda um número decimal para o inteiro mais próximo.
2. 2 Ciclo de jogo
Em cada turno do jogo o utilizador irá dar ordens de tiro (que devem ser da forma A1 j10 B3), i.e. uma letra (maiúscula ou minúscula) seguida de um número entre 1 e 10. O programa deve processar estas ordens verificar se acertou na água ou em algum barco e dar essa informação ao utilizador.
De seguida deve verificar se todos os barcos dispostos no tabuleiro foram afundados e caso tenham sido enviar uma mensagem de fim de jogo ao utilizador indicando quantos tiros precisou para afundar toda a frota.
Caso não tenha ganho o programa deve mostrar ao utilizador o estado actual do tabuleiro e voltar a pedir novas ordens de tiro.
2.3 Comunicação com o utilizador
O trabalho deverá possibilitar dois tipos de interface com o utilizador que dependerão apenas de qual a classe que se escolhe executar (InterfaceGraficoBatalhaNaval ou InterfaceTextoBatalhaNaval):
interface gráfico (que será disponibilizado na página após a entrega do Problema 3)
interface de texto (a fazer pelos alunos)
O interface gráfico chama as seguintes rotinas da classe BatalhaNaval:
public BatalhaNaval(final InterfaceGraficoBatalhaNaval janela)
public void tiro(final String tiros)
O interface gráfico disponibiliza as seguintes rotinas:
public void escreve(final char a, final Coordenada posição)
public void actualizaProgresso(final int tiros, final int hits)
Recomenda-se que o interface de texto tenha o mesmo tipo de interacção com a classe Batalha Naval, para facilitar o trabalho de integração do código.
Exemplo de um ciclo de interacção em modo de texto:
Pergunta
joaosilva87
Podem encontrar alguma parte deste desafio já feita em http://www.yourfilehost.com/media.php?cat=...talha_Naval.zip
Descrição do jogo
A versão pretendida para o jogo da Batalha Naval consiste em:
Posicionar aleatoriamente 11 barcos num tabuleiro de 10x10 células (desde que haja sempre uma célula em branco entre dois barcos)
Aceitar do utilizador mensagens do tiro, em que são indicadas (no máximo) 3 posições da grelha de cada vez
Para cada um desses tiros é verificado se acertou num barco ou na água (tiros repetidos são ignorados)
É enviada ao utilizador uma mensagem a indicar qual o resultado dos tiros (quantos acertaram e quantos falharam)
É mostrada ao utilizador a nova grelha, com a indicação de quais os tiros dados na água e quais os tiros que acertaram em navios
É mostrada ao utilizador uma mensagem que indica quantos tiros já foram dados, que percentagem destes acertou o alvo e que percentagem da frota falta afundar (i.e. número de tiros certeiros / total de células ocupadas por barcos)
Volta a aceitar tiros do utilizador (2), até toda a frota ter sido afundada
Ao afundar toda a frota é emitida uma mensagem ao utilizador indicando que terminou e quantos tiros deu
Caso a sua pontuação esteja entre as 5 melhores registadas até ao momento (i.e. se tiver dado menos tiros que um dos 5 melhores jogadores registados) deve ser pedido o nome ao utilizador e registada em ficheiro (high_scores.txt) a sua pontuação (número de tiros dado). Por fim mostra-se ao utilizador a tabela dos melhores jogadores já com a sua entrada registada. Caso haja menos de 5 pontuações registadas, qualquer utilizador que termine o jogo terá a sua pontuação registada.
Os barcos são:
Um porta-aviões (5 células em T)
Uma fragata (4 células)
Dois torpedeiros (3 células)
Três contra-torpedeiros (2 células)
Quatro submarinos (1 célula)
2. Implementação
Estruturas de dados
Serão fornecidas as classes:
InterfaceGraficoBatalhaNaval
Coordenada
É obrigatória a implementação das classes:
BatalhaNaval
InterfaceTextoBatalhaNaval
É aconselhável, ainda que não obrigatória a implementação das classes:
Barco
Jogador
É permitida a implementação de outras classes que sejam julgadas adequadas para uma boa estruturação da resolução.
2.1 Posicionamento dos barcos
O posicionamento dos barcos deve começar pelo maior (o porta-aviões) e terminar nos submarinos.
Para gerar um número aleatório entre 0 e N use a função Math.rand() (gera um número decimal entre 0 e 1) multiplicando o resultado por N. Se achar necessário pode também usar a função Math.round() que arredonda um número decimal para o inteiro mais próximo.
2. 2 Ciclo de jogo
Em cada turno do jogo o utilizador irá dar ordens de tiro (que devem ser da forma A1 j10 B3), i.e. uma letra (maiúscula ou minúscula) seguida de um número entre 1 e 10. O programa deve processar estas ordens verificar se acertou na água ou em algum barco e dar essa informação ao utilizador.
De seguida deve verificar se todos os barcos dispostos no tabuleiro foram afundados e caso tenham sido enviar uma mensagem de fim de jogo ao utilizador indicando quantos tiros precisou para afundar toda a frota.
Caso não tenha ganho o programa deve mostrar ao utilizador o estado actual do tabuleiro e voltar a pedir novas ordens de tiro.
2.3 Comunicação com o utilizador
O trabalho deverá possibilitar dois tipos de interface com o utilizador que dependerão apenas de qual a classe que se escolhe executar (InterfaceGraficoBatalhaNaval ou InterfaceTextoBatalhaNaval):
interface gráfico (que será disponibilizado na página após a entrega do Problema 3)
interface de texto (a fazer pelos alunos)
O interface gráfico chama as seguintes rotinas da classe BatalhaNaval:
public BatalhaNaval(final InterfaceGraficoBatalhaNaval janela)
public void tiro(final String tiros)
O interface gráfico disponibiliza as seguintes rotinas:
public void escreve(final char a, final Coordenada posição)
public void actualizaProgresso(final int tiros, final int hits)
Recomenda-se que o interface de texto tenha o mesmo tipo de interacção com a classe Batalha Naval, para facilitar o trabalho de integração do código.
Exemplo de um ciclo de interacção em modo de texto:
...
___1__2__3__4__5__6__7__8__9__10_
A__.__x__.__.__.__.__.__.__.__~__
B__.__x__.__.__.__.__.__.__x__.__
C__x__x__x__.__.__.__.__~__x__.__
D__.__.__.__.__.__.__.__.__.__.__
E__.__.__.__.__.__.__.__.__.__.__
F__x__.__.__.__.__~__.__.__.__.__
G__.__.__.__x__x__x__~__.__.__.__
H__.__.__~__.__.__~__.__.__.__.__
I__.__~__.__.__.__.__.__.__.__.__
J__~__.__.__.__.__.__.__.__.__.__
Tiros: A9 j10 B5
Resultado: certos: 1, água: 2
Total: 24 tiros, 12 certos
Falta afundar 52% da frota
___1__2__3__4__5__6__7__8__9__10_
A__.__x__.__.__.__.__.__.__x__~__
B__.__x__.__.__~__.__.__.__x__.__
C__x__x__x__.__.__.__.__~__x__.__
D__.__.__.__.__.__.__.__.__.__.__
E__.__.__.__.__.__.__.__.__.__.__
F__x__.__.__.__.__~__.__.__.__.__
G__.__.__.__x__x__x__~__.__.__.__
H__.__.__~__.__.__~__.__.__.__.__
I__.__~__.__.__.__.__~__~__.__.__
J__~__.__.__.__.__.__.__.__.__~__
Tiros:
...
Não se esqueçam que uma parte está feita em http://www.yourfilehost.com/media.php?cat=...talha_Naval.zip
enviem as vossas resoluções para joaosilva87@aeiou.pt ou para o yourfilehost.com
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.