Boa Noite,
Estou tentando fazer um jogo de batalha naval mas não consigo fazer com que a cada “tiro” o tabuleiro se atualize
com as posições marcadas com X para tiros na agua e 0 para tiros certeiros, alguem poderia me dar uma luz ?
Obrigado e segue o código:
[code]import java.io.*;
import java.util.Random;
public class Principal{
private Random pos = new Random();
private String tabuleiro[][]= new String[8][8];//cria um tabuleiro 8x8//
private int posicao[][] = new int[8][8];//posicoes dos barcos no tabuleiro//
private int lin = 0;
private int col = 0;
public void zeraPosicao(){
for(int l=0;l<8;l++){//preenche as linhas com 0//
for(int c=0;c<8;c++){//preenche as colunas com 0//
posicao[l][c] = 0;
}
}
}
//Função que define a Posição dos Navios no tabuleiro
public void posicaoNavios(){
for(int p=1; p<3; p++) // Calcula Posição aleatória dos Navios de 2 pontos
{
lin= pos.nextInt(8);
col= pos.nextInt(8);
posicao[lin][col]=2;
System.out.println("NAVIO 1 posicao [" + lin + "] [" + col + "] = " + posicao[lin][col]);
}
for(int p=1; p<3; p++) //Calcula Posição aleatória dos Navios de 3 pontos
{
lin= pos.nextInt(8);
col=pos.nextInt(8);
posicao[lin][col]=3;
System.out.println("NAVIO 2 posicao [" + lin + "] [" + col + "] = " + posicao[lin][col]);
}
lin=pos.nextInt(8);
col=pos.nextInt(8);
//Calcula Posição aleatória do Navio de 4 pontos
posicao[lin][col]=4;
System.out.println("NAVIO 3 posicao [" + lin + "] [" + col + "] = " + posicao[lin][col]);
}
public int lerLinha(){
BufferedReader entrada = new BufferedReader (new InputStreamReader(System.in));
int Linha=0;
try {
System.out.println("Informe a linha ");
Linha=Integer.parseInt(entrada.readLine());
if(Linha >=0 && Linha <=7){
return(Linha);
}else{
System.out.println(“Linha invalida!!!”);
return(lerLinha());
}
} catch(Exception e){
System.out.println(“Linha invalida!!!”);
return(lerLinha());
}
}
public int lerColuna(){
BufferedReader entrada = new BufferedReader (new InputStreamReader(System.in));
int Coluna=0;
try {
System.out.println("Informe a coluna ");
Coluna=Integer.parseInt(entrada.readLine());
if(Coluna >=0 && Coluna <=7){
return(Coluna);
}else{
System.out.println(“Coluna invalida!!!”);
return(lerColuna());
}
} catch(Exception e){
System.out.println(“Coluna invalida!!!”);
return(lerColuna());
}
}
public void inicializaMatriz(){
for(int l=0;l<8;l++){//preenche as linhas com elementos de 0 a 7//
for(int c=0;c<8;c++){//preenche as colunas com elementos de 0 a 7//
tabuleiro[l][c]=" ";
}
}
}
public int Atirar(int col,int lin){
int escolha = posicao[lin][col];
while(tabuleiro[lin][col].equals(" ")){//se vc ainda n escolheu essa posicao
switch(escolha){
case 0:
System.out.println("voce atirou na agua, tente novamente");
tabuleiro[lin][col] = "X";
System.out.println("PONTUAÇAO = " + escolha);
break;
case 2:
System.out.println("voce acertou um navio de 2 Pontos");
tabuleiro[lin][col] = "0";
System.out.println("PONTUAÇAO = " + escolha);
break;
case 3:
System.out.println("voce acertou um navio de 3 Pontos");
tabuleiro[lin][col] = "0";
System.out.println("PONTUAÇAO = " + escolha);
break;
case 4:
System.out.println("voce acertou um Navio de 4 Pontos");
tabuleiro[lin][col] = "0";
System.out.println("PONTUAÇAO = " + escolha);
break;
}
imprimeTabuleiro();
lerLinha();
lerColuna();
}
return(escolha);
}
public void imprimeTabuleiro(){
System.out.println(" 1 2 3 4 5 6 7 8"); //numero da coluna
System.out.println(" _________________________________");
for(int l=0;l<8;l++){//preenche as linhas com elementos de 0 a 7//
System.out.print(l + " "); //numero da linhas do lado do tabuleiro
for(int c=0;c<8;c++){//preenche as colunas com elementos de 0 a 7//
System.out.print("| "+tabuleiro[l][c]+" ");
}
System.out.println("|");
System.out.println(" _________________________________");
}
}
public static void main(String[] args)
{
int linha,coluna;
Principal pr = new Principal(); //CHAMANDO A CLASSE PRINCIPAL PARA USAR SEUS METODOS
//METODOS QUE INICIALIZAM OS BARCOS//
pr.zeraPosicao();
pr.posicaoNavios();
//METODO QUE INICIALIZA A MATRIZ//
pr.inicializaMatriz();
//METODOS QUE PEGAM A LINHA E COLUNA//
linha = pr.lerLinha();
coluna = pr.lerColuna();
pr.Atirar(coluna,linha);
// pr.imprimeTabuleiro();
}
}[/code]
No caso, a cada disparo do método Atirar deveria mostrar o tabuleiro com o disparo até que completasse todas
casas da matriz como no desenho abaixo :
No caso, após 9 disparos a Tela deveria ficar assim:
mas acontece que após o primeiro disparo já encerra o programa, é algum erro na funçao atirar creio eu se alguem puder dar uma ajuda agradeço.
Opa, consegui resolver
Só não sei como fazer que o usuario digite “B5” ao inves de “1 , 5” para o tabuleiro reconhecer como se o “B5” fosse a posição [1][5] do tabuleiro
Valeu