Preciso de ajuda para fazer um jogo de batalha naval

Olá galera, sou iniciante em Java e preciso muito da ajuda de vocês… Preciso fazer um jogo de batalha naval com as seguintes características:

  • Usuário escolhe o tamanho do mar quadrado (3 a 15);
  • Usuário escolhe o limite para o número de tentativas de tiro;
  • Gerar alvos aleatórios: dois alvos de uma coordenada cada e dois alvos de duas coordenadas cada;
  • Não permitir que os alvos sejam adjacentes entre si;
  • Indicar o número de tentativa de tiro atual;
  • Manter indicadas as coordenadas dos tiros já realizados;
  • Indicar se o alvo foi atingido ou não;

Ficarei superrrr grata por quem me ajudar

Posta aí o que você já fez até agora, e qual sua dúvida específica.

Eu fiz esse código, mas não atende a nenhum dos requisitos pedidos. Preciso de ajuda principalmente para ler o tamanho da matriz, pois da: "error: cannot find symbol" quando tento colocar a variável “tam” dentro do If.

 public static void main (String[] args) {
    Scanner ler = new Scanner(System.in);
    
    System.out.println(" Insira um valor correspondente ao tamanho da matriz");
    int tam = ler.nextInt();
    int tentativas=0;
    int[][] TamTabuleiro = new int[tam][tam];
    int[][] num_navios = new int[3][2];
    int[] tiro = new int[2];
    int acertos=0;
    
    inicializaTabuleiro(TamTabuleiro);
    iniciaNavios(num_navios);
    
    System.out.println();

    do{
        mostraTabuleiro(TamTabuleiro);
        darTiro(tiro);
        tentativas++;
        
        if(acertou(tiro,num_navios)){
            dica(tiro,num_navios,tentativas);
            acertos++;
        }                
        else
            dica(tiro,num_navios,tentativas);
        
        alteraTabuleiro(tiro,num_navios,TamTabuleiro);
        

    }while(acertos!=3);
    
    System.out.println("\n\n\nJogo terminado. Você acertou os 3 navios em "+tentativas+" tentativas");
    mostraTabuleiro(TamTabuleiro);
 }

public static void inicializaTabuleiro(int[][] tabuleiro){
    for(int linha=0 ; linha < 5 ; linha++ )
        for(int coluna=0 ; coluna < 5 ; coluna++ )
            tabuleiro[linha][coluna]=-1;
}


public static void mostraTabuleiro(int[][] tabuleiro){
    System.out.println("\t1 \t2 \t3 \t4 \t5");
    System.out.println();
    
    for(int linha=0 ; linha < 5 ; linha++ ){
        System.out.print((linha+1)+"");
        for(int coluna=0 ; coluna < 5 ; coluna++ ){
            if(tabuleiro[linha][coluna]==-1){
                System.out.print("\t"+"~");
            }else if(tabuleiro[linha][coluna]==0){
                System.out.print("\t"+"*");
            }else if(tabuleiro[linha][coluna]==1){
                System.out.print("\t"+"X");
            }
            
        }
        System.out.println();
    }

}

public static void iniciaNavios(int[][] navios){
    Random sorteio = new Random();
    
    for(int navio=0 ; navio < 3 ; navio++){
        navios[navio][0]=sorteio.nextInt(5);
        navios[navio][1]=sorteio.nextInt(5);
        
        //agora vamos checar se esse par não foi sorteado
        //se foi, so sai do do...while enquanto sortear um diferente
        for(int anterior=0 ; anterior < navio ; anterior++){
            if( (navios[navio][0] == navios[anterior][0])&&(navios[navio][1] == navios[anterior][1]) )
                do{
                    navios[navio][0]=sorteio.nextInt(5);
                    navios[navio][1]=sorteio.nextInt(5);
                }while( (navios[navio][0] == navios[anterior][0])&&(navios[navio][1] == navios[anterior][1]) );
        }
        
    }
}

public static void darTiro(int[] tiro){
    Scanner entrada = new Scanner(System.in);
    
    System.out.print("Linha: ");
    tiro[0] = entrada.nextInt();
    tiro[0]--;
    
    System.out.print("Coluna: ");
    tiro[1] = entrada.nextInt();
    tiro[1]--;
    
}

public static boolean acertou(int[] tiro, int[][] navios){
    
    for(int navio=0 ; navio<navios.length ; navio++){
        if( tiro[0]==navios[navio][0] && tiro[1]==navios[navio][1]){
            System.out.printf("Você acertou o tiro (%d,%d)\n",tiro[0]+1,tiro[1]+1);
            return true;
        }
    }
    return false;
}

public static void dica(int[] tiro, int[][] navios, int tentativa){
    int linha=0,
        coluna=0;
    
    for(int fila=0 ; fila < navios.length ; fila++){
        if(navios[fila][0]==tiro[0])
            linha++;
        if(navios[fila][1]==tiro[1])
            coluna++;
    }
    
    System.out.printf("\nDica %d: \nlinha %d -> %d navios\n" +
                             "coluna %d -> %d navios\n",tentativa,tiro[0]+1,linha,tiro[1]+1,coluna);
}

public static void alteraTabuleiro(int[] tiro, int[][] navios, int[][] tabuleiro){
    if(acertou(tiro,navios))
        tabuleiro[tiro[0]][tiro[1]]=1;
    else
        tabuleiro[tiro[0]][tiro[1]]=0;
}