Ultima ajuda!Batalha naval!

3 respostas
A
iai galera!!! to precisando de uma ajudinha com o meu batalha naval,eu consegui fazer rapetir a jogada só q pinto um probleminha e que depois de ter acertado todos os alvos o jogo continua como q eu do um break no meu jogo.
import java.io.*;

public class Main{

public static String tabuleiro[][]= new String[8][8];//cria um tabuleiro 8x8//
public static int posicao[][] = new int[8][8];//posicoes dos barcos no tabuleiro//



public static 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;
}
}
}



//funcao que determina a Posicao dos submarinos no tabuleiro//
public static void posicaoDosSubmarinos(){

//SUBMARINO 1//
posicao[1][2] = 1;


//SUBMARINO 2//
posicao [1][0] = 1;

//SUBMARINO 3//
posicao [6][7] = 1;

//SUBMARINO 4//
posicao [4][6] = 1;

//SUBMARINO 5//
posicao [3][1] = 1;
}

//funcao que define a Posicao dos distroyers no tabuleiro//
public static void posicaoDosDistroyers(){

//DISTROYER 1//
posicao [0][6] = 3;
posicao [0][7] = 3;

//DISTROYER 2//
posicao [3][6] = 3;
posicao [3][7] = 3;

//DISTROYER 3//
posicao [5][0] = 3;
posicao [5][1] = 3;

//DISTROYER 4//
posicao [4][2] = 3;
posicao [4][3] = 3;
}

//funcao que define a Posicao dos cruzadores no tabuleiro//
public static void posicaoDosCruzadores(){

//CRUZADOR 1//
posicao [5][3] = 5;
posicao [5][4] = 5;
posicao [5][5] = 5;

//CRUZADOR 2//
posicao[1][5] = 5;
posicao[1][6] = 5;
posicao[1][7] = 5;

//CRUZADOR 3//
posicao [2][4] = 5;
posicao [2][5] = 5;
posicao [2][6] = 5;
}

//funcao que define a Posicao dos navios no tabuleiro//
public static void posicaoDosNavios(){

//NAVIO 1//
posicao[0][0] = 7;
posicao[0][1] = 7;
posicao[0][2] = 7;
posicao[0][3] = 7;

//NAVIO 2//
posicao[6][2] = 7;
posicao[6][3] = 7;
posicao[6][4] = 7;
posicao[6][5] = 7;
}

//funcao que define a Posicao do Porta Aviao no tabuleiro//
public static void posicaoDoPortaAviao(){

//PORTA AVIAO//
posicao[7][3] = 9;
posicao[7][4] = 9;
posicao[7][5] = 9;
posicao[7][6] = 9;
posicao[7][7] = 9;
}
/*
public static void imprimeMatrizdePosicao(){
String saida="";
for(int l=0;l<8;l++){//preenche as linhas com elementos de 0 a 7//
System.out.println("\n");
for(int c=0;c<8;c++){//preenche as colunas com elementos de 0 a 7//
System.out.println(posicao[l][c]);
}
}
}*/

public static int lerLinha(){
BufferedReader entrada = new BufferedReader (new InputStreamReader(System.in));
int Linha=0;
try {
System.out.print("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 static int lerColuna(){
BufferedReader entrada = new BufferedReader (new InputStreamReader(System.in));
int Coluna=0;
//int acert=14;
try {
System.out.print("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 static void inicilizaMatriz(){
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 static void imprimeTabuleiro(){
System.out.println(" 0 1 2 3 4 5 6 7"); //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 verificaPosicao(int col,int lin){
int escolha = posicao[lin][col];
System.out.println(escolha);
if(tabuleiro[lin][col] == " "){//se vc ainda n escolheu essa posicao
switch(escolha){
case 0:
System.out.println("voce atirou na agua, tente novamente");
tabuleiro[lin][col] = "X";
break;
case 1:
System.out.println("voce acertou um submarino");
tabuleiro[lin][col] = "1";
break;
case 3:
System.out.println("voce acertou um distroyer");
tabuleiro[lin][col] = "3";
break;
case 5:
System.out.println("voce acertou um cruzador");
tabuleiro[lin][col] = "5";
break;
case 7:
System.out.println("voce acertou um navio");
tabuleiro[lin][col] = "7";
break;
case 9:
System.out.println("voce acertou um porta-avioes");
tabuleiro[lin][col] = "90";
break;
}
}
}




public static void main(String[] args) {
int linha,coluna;

//BufferedReader entrada;
//entrada = new BufferedReader(new InputStreamReader(System.in));
//METODOS QUE INICIALIZAM OS BARCOS//
zeraPosicao();
posicaoDosSubmarinos();
posicaoDosDistroyers();
posicaoDosCruzadores();
posicaoDosNavios();
posicaoDoPortaAviao();

//METODOS QUE INICIALIZA AS MATRIZES//
//imprimeMatrizdePosicao();
inicilizaMatriz();
imprimeTabuleiro();

//METODOS QUE PEGAM A LINHA E COLUNA//
while (true) {
linha = lerLinha();
coluna = lerColuna();
verificaPosicao(coluna,linha);
imprimeTabuleiro();
}

//System.out.println(linha + " " + coluna);

}


}

3 Respostas

ViniGodoy

Cadê a endentação do seu código?!?!

FacaNaCaveira
package batalha_naval;

import java.io.*;

public class Main {

    public static String tabuleiro[][] = new String[8][8];//cria um tabuleiro 8x8//
    public static int posicao[][] = new int[8][8];//posicoes dos barcos no tabuleiro//

    public static 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;
            }
        }
    }

//funcao que determina a Posicao dos submarinos no tabuleiro//
    public static void posicaoDosSubmarinos() {

//SUBMARINO 1//
        posicao[1][2] = 1;


//SUBMARINO 2//
        posicao[1][0] = 1;

//SUBMARINO 3//
        posicao[6][7] = 1;

//SUBMARINO 4//
        posicao[4][6] = 1;

//SUBMARINO 5//
        posicao[3][1] = 1;
    }

//funcao que define a Posicao dos distroyers no tabuleiro//
    public static void posicaoDosDistroyers() {

//DISTROYER 1//
        posicao[0][6] = 3;
        posicao[0][7] = 3;

//DISTROYER 2//
        posicao[3][6] = 3;
        posicao[3][7] = 3;

//DISTROYER 3//
        posicao[5][0] = 3;
        posicao[5][1] = 3;

//DISTROYER 4//
        posicao[4][2] = 3;
        posicao[4][3] = 3;
    }

//funcao que define a Posicao dos cruzadores no tabuleiro//
    public static void posicaoDosCruzadores() {

//CRUZADOR 1//
        posicao[5][3] = 5;
        posicao[5][4] = 5;
        posicao[5][5] = 5;

//CRUZADOR 2//
        posicao[1][5] = 5;
        posicao[1][6] = 5;
        posicao[1][7] = 5;

//CRUZADOR 3//
        posicao[2][4] = 5;
        posicao[2][5] = 5;
        posicao[2][6] = 5;
    }

//funcao que define a Posicao dos navios no tabuleiro//
    public static void posicaoDosNavios() {

//NAVIO 1//
        posicao[0][0] = 7;
        posicao[0][1] = 7;
        posicao[0][2] = 7;
        posicao[0][3] = 7;

//NAVIO 2//
        posicao[6][2] = 7;
        posicao[6][3] = 7;
        posicao[6][4] = 7;
        posicao[6][5] = 7;
    }

//funcao que define a Posicao do Porta Aviao no tabuleiro//
    public static void posicaoDoPortaAviao() {

//PORTA AVIAO//
        posicao[7][3] = 9;
        posicao[7][4] = 9;
        posicao[7][5] = 9;
        posicao[7][6] = 9;
        posicao[7][7] = 9;
    }
    /*
    public static void imprimeMatrizdePosicao(){
    String saida="";
    for(int l=0;l<8;l++){//preenche as linhas com elementos de 0 a 7//
    System.out.println("\n");
    for(int c=0;c<8;c++){//preenche as colunas com elementos de 0 a 7//
    System.out.println(posicao[l][c]);
    }
    }
    }*/

    public static int lerLinha() {
        BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
        int Linha = 0;
        try {
            System.out.print("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 static int lerColuna() {
        BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
        int Coluna = 0;
//int acert=14;
        try {
            System.out.print("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 static void inicilizaMatriz() {
        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 static void imprimeTabuleiro() {
        System.out.println(" 0 1 2 3 4 5 6 7"); //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 verificaPosicao(int col, int lin) {
        int escolha = posicao[lin][col];
        System.out.println(escolha);
        if (tabuleiro[lin][col] == " ") {//se vc ainda n escolheu essa posicao
            switch (escolha) {
                case 0:
                    System.out.println("voce atirou na agua, tente novamente");
                    tabuleiro[lin][col] = "X";
                    break;
                case 1:
                    System.out.println("voce acertou um submarino");
                    tabuleiro[lin][col] = "1";
                    break;
                case 3:
                    System.out.println("voce acertou um distroyer");
                    tabuleiro[lin][col] = "3";
                    break;
                case 5:
                    System.out.println("voce acertou um cruzador");
                    tabuleiro[lin][col] = "5";
                    break;
                case 7:
                    System.out.println("voce acertou um navio");
                    tabuleiro[lin][col] = "7";
                    break;
                case 9:
                    System.out.println("voce acertou um porta-avioes");
                    tabuleiro[lin][col] = "90";
                    break;
            }
        }
    }

    public static boolean verificaFimDoJogo() {
        boolean status = false;

        for (int lin = 0; lin < 8; lin++) {
            for (int col = 0; col < 8; col++) {
                if (tabuleiro[lin][col] == " ") {
                    status = true;
                }
            }
        }
        return status;
    }

    public static void main(String[] args) {
        int linha, coluna;

//BufferedReader entrada;
//entrada = new BufferedReader(new InputStreamReader(System.in));
//METODOS QUE INICIALIZAM OS BARCOS//
        zeraPosicao();
        posicaoDosSubmarinos();
        posicaoDosDistroyers();
        posicaoDosCruzadores();
        posicaoDosNavios();
        posicaoDoPortaAviao();

//METODOS QUE INICIALIZA AS MATRIZES//
//imprimeMatrizdePosicao();
        inicilizaMatriz();
        imprimeTabuleiro();

//METODOS QUE PEGAM A LINHA E COLUNA//
        while (verificaFimDoJogo()) {//<--Tem que mudar essa condição aqui***
            linha = lerLinha();
            coluna = lerColuna();
            verificaPosicao(coluna, linha);
            imprimeTabuleiro();
        }
        System.out.println("Fim de Jogo");

//System.out.println(linha + " " + coluna);

    }
}

Fala ai ale_sjn, deu uma olhada no seu joguinho e achei irado… :!:
Criei um metodo chamado verificaFimDoJogo() que a condição dele é retornar false quando todos os elementos da matriz tabuleiro estiveiro preenchidos e nesse caso o metodo retorna false para o WHILE e ai ele termina o jogo. Voce pode alterar o metodo se quiser que o jogo termine por exemplo caso o jogador acerte todos os veiculos disponiveis.
Bem segue ai minha colaboração
Abração
Max

FacaNaCaveira

Fala ai ale_sjn, me amarrei no joguinho e aproveitei para implementar a solução de Fim de jogo por acertos.

Criei uma constante chamada QuantidadeAcertos com o valor definido de 35 que é a quantidade de celulas com partes de veiculos, criei um ArrayList (importar java.util.*) chamado acertos que é preenchido dentro de verificaPosicao e a condição de parada no While ficou assim

while (verificaFimDoJogoAcertouTudo())

Segue o codigo completo alterado

import java.io.*;
import java.util.*;

public class Main {

    public static String tabuleiro[][] = new String[8][8];//cria um tabuleiro 8x8//
    public static int posicao[][] = new int[8][8];//posicoes dos barcos no tabuleiro//
    public static ArrayList<Integer> acertos = new ArrayList<Integer>();
    public static final Integer QuantidadeAcertos = 35;

    public static 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;
            }
        }
    }

//funcao que determina a Posicao dos submarinos no tabuleiro//
    public static void posicaoDosSubmarinos() {

//SUBMARINO 1//
        posicao[1][2] = 1;

//SUBMARINO 2//
        posicao[1][0] = 1;

//SUBMARINO 3//
        posicao[6][7] = 1;

//SUBMARINO 4//
        posicao[4][6] = 1;

//SUBMARINO 5//
        posicao[3][1] = 1;
    }// 5 acertos

//funcao que define a Posicao dos distroyers no tabuleiro//
    public static void posicaoDosDistroyers() {

//DISTROYER 1//
        posicao[0][6] = 3;
        posicao[0][7] = 3;

//DISTROYER 2//
        posicao[3][6] = 3;
        posicao[3][7] = 3;

//DISTROYER 3//
        posicao[5][0] = 3;
        posicao[5][1] = 3;

//DISTROYER 4//
        posicao[4][2] = 3;
        posicao[4][3] = 3;
    }//8 acertos

//funcao que define a Posicao dos cruzadores no tabuleiro//
    public static void posicaoDosCruzadores() {

//CRUZADOR 1//
        posicao[5][3] = 5;
        posicao[5][4] = 5;
        posicao[5][5] = 5;

//CRUZADOR 2//
        posicao[1][5] = 5;
        posicao[1][6] = 5;
        posicao[1][7] = 5;

//CRUZADOR 3//
        posicao[2][4] = 5;
        posicao[2][5] = 5;
        posicao[2][6] = 5;
    }//9 acertos

//funcao que define a Posicao dos navios no tabuleiro//
    public static void posicaoDosNavios() {

//NAVIO 1//
        posicao[0][0] = 7;
        posicao[0][1] = 7;
        posicao[0][2] = 7;
        posicao[0][3] = 7;

//NAVIO 2//
        posicao[6][2] = 7;
        posicao[6][3] = 7;
        posicao[6][4] = 7;
        posicao[6][5] = 7;
    }//8 acertos

//funcao que define a Posicao do Porta Aviao no tabuleiro//
    public static void posicaoDoPortaAviao() {

//PORTA AVIAO//
        posicao[7][3] = 9;
        posicao[7][4] = 9;
        posicao[7][5] = 9;
        posicao[7][6] = 9;
        posicao[7][7] = 9;
    }//5 acertos
    /*
    public static void imprimeMatrizdePosicao(){
    String saida="";
    for(int l=0;l<8;l++){//preenche as linhas com elementos de 0 a 7//
    System.out.println("\n");
    for(int c=0;c<8;c++){//preenche as colunas com elementos de 0 a 7//
    System.out.println(posicao[l][c]);
    }
    }
    }*/

    public static int lerLinha() {
        BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
        int Linha = 0;
        try {
            System.out.print("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 static int lerColuna() {
        BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
        int Coluna = 0;
//int acert=14;
        try {
            System.out.print("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 static void inicilizaMatriz() {
        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 static void imprimeTabuleiro() {
        System.out.println(" 0 1 2 3 4 5 6 7"); //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 verificaPosicao(int col, int lin) {
        int escolha = posicao[lin][col];
        System.out.println(escolha);
        if (tabuleiro[lin][col] == " ") {//se vc ainda n escolheu essa posicao
            switch (escolha) {
                case 0:
                    System.out.println("voce atirou na agua, tente novamente");
                    tabuleiro[lin][col] = "X";
                    break;
                case 1:
                    System.out.println("voce acertou um submarino");
                    tabuleiro[lin][col] = "1";
                    acertos.add(1);
                    break;
                case 3:
                    System.out.println("voce acertou um distroyer");
                    tabuleiro[lin][col] = "3";
                    acertos.add(1);
                    break;
                case 5:
                    System.out.println("voce acertou um cruzador");
                    tabuleiro[lin][col] = "5";
                    acertos.add(1);
                    break;
                case 7:
                    System.out.println("voce acertou um navio");
                    tabuleiro[lin][col] = "7";
                    acertos.add(1);
                    break;
                case 9:
                    System.out.println("voce acertou um porta-avioes");
                    tabuleiro[lin][col] = "90";
                    acertos.add(1);
                    break;
            }
        }
    }

    public static boolean verificaFimDoJogoTabuleiroCheio() {
        boolean status = false;

        for (int lin = 0; lin < 8; lin++) {
            for (int col = 0; col < 8; col++) {
                if (tabuleiro[lin][col] == " ") {
                    status = true;
                }
            }
        }
        return status;
    }

    public static boolean verificaFimDoJogoAcertouTudo() {
        boolean status = false;
        if (acertos.size() < QuantidadeAcertos) {
            status = true;
        }
        return status;
    }

    public static void main(String[] args) {
        int linha, coluna;

//BufferedReader entrada;
//entrada = new BufferedReader(new InputStreamReader(System.in));
//METODOS QUE INICIALIZAM OS BARCOS//
        zeraPosicao();
        posicaoDosSubmarinos();
        posicaoDosDistroyers();
        posicaoDosCruzadores();
        posicaoDosNavios();
        posicaoDoPortaAviao();

//METODOS QUE INICIALIZA AS MATRIZES//
//imprimeMatrizdePosicao();
        inicilizaMatriz();
        imprimeTabuleiro();

//METODOS QUE PEGAM A LINHA E COLUNA//
         while (verificaFimDoJogoAcertouTudo()) {//<--Tem que mudar essa condição aqui***
       // while (verificaFimDoJogoTabuleiroCheio()) {//<--Tem que mudar essa condição aqui***
            linha = lerLinha();
            coluna = lerColuna();
            verificaPosicao(coluna, linha);
            imprimeTabuleiro();
        }
        System.out.println("Fim de Jogo");

//System.out.println(linha + " " + coluna);

    }
}

Abração :!:
Max

Criado 9 de julho de 2010
Ultima resposta 16 de jul. de 2010
Respostas 3
Participantes 3