Jogo Batalha Naval

1 resposta
fajohann

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:

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();



      }


  }

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:

[img]http://img43.imageshack.us/img43/1041/naval.jpg [/img]

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

1 Resposta

kaique

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.

Criado 19 de maio de 2009
Ultima resposta 20 de mai. de 2009
Respostas 1
Participantes 2