Jogo Batalha Naval

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 :slight_smile:

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

Faça uma pesquisa sobre Observer Pattern.
Eu lembro que fiz uma cadeira na faculdade de inteligência artificial, onde eu precisei implementar um jogo, onde a idéia de movimento dos personagens era semelhante ao comportamento do seu jogo. Eu projetei a parte de atualização do tabuleiro utilizando esse padrão de desenvolvimento e ficou bem legal.

[]'s.