Bom dia pessoal!
Tenho a tarefa de fazer um joguinho de batalha naval, mas estou empacado em alguns pontos:
Quando eu acerto todos os alvos o programa n encerra, só encerra se eu der +1 tiro;
Gerar alvo em Colunas/Vertical;
tentei usar o Try/Catch, porém quando o usuario digita por exemplo uma letra, ele encera o código, como se tivesse ganhado;
tentei criar um metodo para jogar(), porem n teve geito de conseguir chamar o metodo para o main:expressionless: ;
o meu campo mostra aonde estão os navios, gostaria que mostra-se só dps de acertar;
import java.util.Random;
import javax.swing.JOptionPane;
/**
*
* @author ACER
*/
public class BatalhaNaval {
public static void main(String[] args) {
Integer[][] campo = new Integer[20][20];
Random r = new Random();
Integer qntTiros = 0;
Integer Acertos = 0;
for (int linha = 0; linha < 20; linha++) {
for (int coluna = 0; coluna < 20; coluna++) {
campo[linha][coluna] = 0;
}
}
Integer qtAlvosLinha = 0;
Integer qtAlvosColuna = 0;
while (qtAlvosLinha < 2) {
Integer linhaAleatoria = r.nextInt(20);
Integer colunaAleatoria = r.nextInt(18);
if (campo[linhaAleatoria][colunaAleatoria] == 1
|| campo[linhaAleatoria][colunaAleatoria + 1] == 1
|| campo[linhaAleatoria][colunaAleatoria] + 2 == 1) {
System.out.println("Alvo ja existe " + linhaAleatoria + ", " + colunaAleatoria);
continue;
}
qtAlvosLinha++;
campo[linhaAleatoria][colunaAleatoria] = 1;
campo[linhaAleatoria][colunaAleatoria + 1] = 1;
campo[linhaAleatoria][colunaAleatoria + 2] = 1;
System.out.println("Alvo " + linhaAleatoria + ", " + colunaAleatoria);
}
while (qtAlvosColuna < 2) {
Integer linhaAleatoria = r.nextInt(18);
Integer colunaAleatoria = r.nextInt(20);
if (campo[colunaAleatoria][linhaAleatoria] == 1
|| campo[colunaAleatoria][linhaAleatoria + 1] == 1
|| campo[colunaAleatoria][linhaAleatoria + 2] == 1) {
System.out.println("Alvo ja existe " + colunaAleatoria + ", " + linhaAleatoria);
continue;
}
qtAlvosColuna++;
campo[colunaAleatoria][linhaAleatoria] = 1;
campo[colunaAleatoria][linhaAleatoria + 1] = 1;
campo[colunaAleatoria][linhaAleatoria + 2] = 1;
System.out.println("Alvo Linha: " + colunaAleatoria + ", Coluna : " + linhaAleatoria);
}
boolean possuiAlvo = false;
do {
try {
imprimeMatriz(campo);
Integer coluna = Integer.valueOf(JOptionPane.showInputDialog("Digite uma coluna"));
Integer linha = Integer.valueOf(JOptionPane.showInputDialog("Digite uma linha"));
possuiAlvo = matrizPossuiAlvo(campo);
if (campo[linha][coluna] <= 20) {
if (campo[linha][coluna] == 1) {
JOptionPane.showMessageDialog(null, "Barco Atingido!");
campo[linha][coluna] = 0;
Acertos++;
qntTiros++;
} else {
if (campo[linha][coluna] == 0) {
JOptionPane.showMessageDialog(null, "Tiro na agua!");
qntTiros++;
}
}
} else {
JOptionPane.showMessageDialog(null, "Coordenada Invalida");
}
} catch (Exception e) {
}
} while (possuiAlvo);
JOptionPane.showMessageDialog(null, "Parabéns você afundou todos os Barcos, com " + qntTiros + " Tiros");
}
public static boolean matrizPossuiAlvo(Integer[][] matriz) {
for (int linha = 0; linha < 20; linha++) {
for (int coluna = 0; coluna < 20; coluna++) {
if (matriz[linha][coluna] == 1) {
return true;
}
}
}
return false;
}
public static void imprimeMatriz(Integer[][] matrizQualquer) {
System.out.println(" 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19"); //numero da coluna
System.out.println(" ________________________________________________________________________________________________________________________");
for (int l = 0; l < 20; l++) {
System.out.print(l + "");
for (int c = 0; c < 20; c++) {
System.out.print(" | " + matrizQualquer[l][c] + " ");
}
System.out.println("|");
System.out.println(" ________________________________________________________________________________________________________________________");
}
}
}
Ja procurei aqui no forum, e também e varios outros, mais os modelos que encontrei n consegui entender como funciona. Estou na primeira fase cursando Algoritimo.
Desde ja Agradeço!
att. Ascer