Daí galerinha, estou com um probleminha no meu código, estou terminando meu jogo do campo minado, mas ao verificar se há bombas ao redor do lugar jogado, naum está verificando.
Será que alguém pode me ajudar, o código é esse:
import java.util.Date;
import java.util.Random;
import java.util.Scanner;
public class battleship
{
static final int TAM = 9; //declaração do tamanho do mapa de jogo
static Scanner teclado = new Scanner (System.in);
static int li;
static int c;
public static void mostraMatriz (int[][] m) //método que quando é chamado mostra a Matriz com o tiro recebido
{
//comandos System.out.pritln para imprimir um cabeçalho no mapa indicando as colunas para o usuário
System.out.println(" 0 1 2 3 4 5 6 7 8");
System.out.println(" ------------------");
for (int i = 0; i < TAM; i++)
{
System.out.print(i+" | "); //System.out.println para imprimir uma coluna lateral antes do mapa indicando as linhas
for (int j = 0; j < TAM; j++)
{ //dois laços de comando for para percorrer a matriz
switch (m[i][j])
{ //bloco de switch para mostrar os gráficos do mapa para cada coordenada
case 0: //água
System.out.print ("#");
break;
case 1: //tiro na água
System.out.print ("o");
break;
case 5: //acerto em bomba
System.out.print ("b");
break;
}
System.out.print(" "); //imprime um espaço entre cada coordenada da matriz
}
System.out.print("|");
System.out.println(); //pula uma linha para que a matriz seja impressa corretamente
}
System.out.println(" ------------------");
}
public static int leCoordenada (String msg) //método que le os valores de entrada para cada tiro
{
int coord;
do //laço do-while para aceitar apenas valores válidos como tiros
{
System.out.print(msg);
coord = teclado.nextInt();
}while ((coord < 0)||(coord > TAM-1));
return coord;
}
static int[][] minas = {{0, 0, 0, 0, 0, 0, 0, 0, 0}, //declaração da matriz (mapa de jogo) sem as embarcações
{0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0}};
public static int[][] colocaBombas() //módulo para sorteio aleatório das embarcações e bombas
{
Random randomNumbers = new Random(); //cria a variável 'randomNumbers' para gerar os números aleatórios
int valida = 0; //variável 'valida' para validar as posições das embarcações
valida = 0;
for(int i=0 ; i<11 ; i++)
{
do
{
int linha = randomNumbers.nextInt(8);
int coluna = randomNumbers.nextInt(8);
if(minas[linha][coluna]==0)
{
minas[linha][coluna] = 5;
valida = 1;
System.out.println("bomba: " + linha +" "+ coluna);
}
}while(valida!=1);
}
return minas;
}
public static void main(String[] args) //método main (principal)
{
//comandos System.out.println para exibir as instruções de jogo
System.out.println("Instruções:");
System.out.println("Após cada tiro será mostrado o mapa do jogo indicando:");
System.out.println("-> 'b' caso acerte uma bomba;");
System.out.println("-> 'o' caso acerte na água;");
System.out.println("O Jogo acaba quando você acertar uma bomba, ou ao ividenciar todas as bombas ");
System.out.println("Boa Sorte!");
System.out.println("");
colocaBombas();
int[][] tiro = new int[TAM][TAM];
long tempo = new Date().getTime();
int acertos = 0;
int bombas = 0;
int erros = 0;
int jogadas = 0;
do //laço do-while que repete enquanto não acontecer nenhuma condição para fim de jogo
{
mostraMatriz(tiro); //chama o método 'mostraMatriz', passando a variável 'tiro' como argumento
//para que o jogo mostre o mapa com os tiros recebidos.
//comandos System.out.print para mostrar o número efetivo de jogadas, erros e acertos
System.out.print("Jogadas: ");
System.out.print(jogadas);
System.out.print(" Acertos: ");
System.out.println(jogadas);
// System.out.print(" Acertos: ");
//System.out.println(acertos);
//chamada do método 'leCoordenada' para receber os valores corretos do tiro efetuado
li = leCoordenada("Digite a linha: ");
c = leCoordenada("Digite a coluna: ");
System.out.println("");
if ((minas[li][c]!= 0) && (minas[li][c]!= 1) && (minas[li][c]!=5))
{ //if para acertos em embarcação
tiro[li][c] = minas[li][c]; //o valor da matriz na posição da coordenada onde foi dado o tiro é alterado para mostrar o acerto
acertos++; //contabiliza o número de acertos incrementando em +1
System.out.println("Parabéns, você acertou!");
}
else //else para erros de embarcação
{
erros++; //contabiliza o número de erros incrementando em +1
if (minas[li][c]==5)
{ //if para verificar se acertou uma bomba
tiro[li][c] = 5; //o valor da matriz na posição da coordenada é alterado para mostrar a bomba acertada
bombas++; //contabiliza o número de bombas incrementando em +1
System.out.println("Você acertou uma bomba!");
}
else
{ //else para tirosna água
tiro[li][c] = 1; //o valor da matriz na posição do tiro é alterado para mostrar tiro na água
System.out.println("Parabéns, você não acertou uma bomba!");
// verificaPosicao(i, j);
}
}
jogadas++; //contabiliza o número de jogadas incrementando em +1
}while (bombas < 1); //encerra laço do-while se uma das condições for verdadeira
if (bombas == 1) //se o número total de bombas acertadas for igual à 1
System.out.println("Você perdeu! Acertou uma bomba! Fim de jogo!");
mostraMatriz(tiro);
//comandos System.out.println para imprimir as estatísticas do jogo
System.out.println("");
System.out.println("Estatísticas:");
System.out.println("Jogadas: " + jogadas);
System.out.println("Acertos " + (jogadas - bombas));
System.out.println("Bombas explodidas: " + bombas);
System.out.println("Tempo do jogo " + ((new Date().getTime()-tempo)/1000) + " segundos");
}
static void verificaPosicao(int i, int j)
{
int contador = 0;
for (int k = i-1; k <= i+1; k++)
{
for (int l = j-1; l <= j+1; l++)
{
if ((k >= 0) && (k < li+1) && (l >= 0) && (l < c+1) && (minas[k][l]== -2))
{
contador++;
}
}
}
minas[i][j] = contador;
if (contador == 0)
{
for (int k = i-1; k <= i+1; k++)
{
for (int l = j-1; l <= j+1; l++)
{
if ((k >= 0) && (k < li+1) && (l >= 0) && (l < c+1) && (minas[k][l] != 0))
{
verificaPosicao(k,l);
}
}
}
}
}
// verificaPosicao
}
[size=9][/size][size=12][/size]