Dynamically create board

Asked

Viewed 104 times

0

I am solving a problem using RMI of a naval battle, I need to generate the board dynamically according to the user’s need, this code I took from a video and I am adapting as requested in the exercise.

public class Jogador {

TocadorSom tsom = new TocadorSom();

public Jogador(int cod) throws RemoteException {

    Scanner sc = new Scanner(System.in);
    System.out.println("Informe o tamanho do tabuleiro \nQuantidade de linhas: ");
    int linhas = sc.nextInt();
    System.out.println("quantidade de colunas: ");
    int colunas = sc.nextInt();
    int[][] tabuleiro = new int[10][10];
    int[][] navios = new int[3][2];
    int[] tiro = new int[2];
    boolean vez = false;
    int tentativas = 0, acertos = 0;
    MsImpl ms = new MsImpl();

    tsom.play("Inicio");

    try {

        Ms c = (Ms) Naming.lookup("rmi://127.0.0.1:1090/batalhaNaval");
        System.out.println();
        inicializarNavios(navios);
        inicializarTabuleiro(tabuleiro, 10, 10);
        System.out.println("");

        do {
            mostrarTabuleiro(tabuleiro, 10, 10);
            darTiro(tiro);
            tentativas++;

            if (ms.acertou(tiro, navios)) {
                acertos++;
            } else {
                dica(tiro, navios, tentativas);

            }
            alteraTabuleiro(tiro, navios, tabuleiro);

        } while (acertos != 3);

        if (acertos == 3) {
            mostrarTabuleiro(tabuleiro, 10, 10);
            System.out.println("Vencedor jogador: " + ms.vez(cod));
        }

    } catch (Exception e) {
        System.out.println(e);
    }

}

public static void inicializarTabuleiro(int[][] tabuleiro, int l, int c) {
    for (int linha = 0; linha < 10; linha++) {
        for (int coluna = 0; coluna < 10; coluna++) {
            tabuleiro[linha][coluna] = -1;
        }
    }
}

public static void mostrarTabuleiro(int[][] tabuleiro, int l, int c) {

    for (int i = 1; i <= l; i++) {
        System.out.print("\t" + i);
    }
    System.out.println();

    for (int linha = 0; linha < l; linha++) {
        System.out.print((linha + 1) + "");
        for (int coluna = 0; coluna < c; 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 inicializarNavios(int[][] navios) {

    Random sorteio = new Random();

    for (int c = 0; c < 3; c++) {
        navios[c][0] = sorteio.nextInt(5);
        navios[c][1] = sorteio.nextInt(5);

        for (int i = 0; i < c; i++) {
            if ((navios[c][0] == navios[i][0]) && (navios[c][1] == navios[i][1])) {

                do {

                    navios[c][0] = sorteio.nextInt();
                    navios[c][1] = sorteio.nextInt();
                } while ((navios[c][0] == navios[i][0]) && (navios[c][1] == navios[i][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]--;

    TocadorSom tsomTiro = new TocadorSom();

    tsomTiro.play("explosao");

}

public static void dica(int[] tiro, int[][] navios, int tentativas) {

    int linha = 0, coluna = 0;

    for (int c = 0; c < navios.length; c++) {
        if (navios[c][0] == tiro[0]) {
            linha++;
        }
        if (navios[c][1] == tiro[1]) {
            coluna++;
        }

    }

    System.out.print("\nDica " + tentativas + "\nLinha " + (tiro[0] + 1) + " -> navios " + linha + "\nColuna "
            + (tiro[1] + 1) + " -> navios " + coluna + "\n\n");

}

public static void alteraTabuleiro(int[] tiro, int[][] navios, int[][] tabuleiro) throws RemoteException {

    MsImpl ms = new MsImpl();

    if (ms.acertou(tiro, navios)) {
        tabuleiro[tiro[0]][tiro[1]] = 1;
    } else {
        tabuleiro[tiro[0]][tiro[1]] = 0;
    }
}
}

Instead of being [10][10], I would like to implement according to user input.

1 answer

1


Supposing linhas and colunas are the user entries you want to apply to the array:

int[][] tabuleiro = new int[linhas][colunas];

And at the initialization of methods:

...

inicializarTabuleiro(tabuleiro, linhas, colunas);

...

mostrarTabuleiro(tabuleiro, linhas, colunas);

...
  • but the initializing method Abuleiro does not have this vector, it does not recognize within the loops the variable rows and columns.

  • @Carlosdiego You just pass the same data to this method, there is no secret.

  • It worked @Articuno

  • Can you help me with this?? https://answall.com/questions/248773/addir-embarca%C3%A7oes-dynamically-on-board

Browser other questions tagged

You are not signed in. Login or sign up in order to post.