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.
but the initializing method Abuleiro does not have this vector, it does not recognize within the loops the variable rows and columns.
– Carlos Diego
@Carlosdiego You just pass the same data to this method, there is no secret.
– user28595
It worked @Articuno
– Carlos Diego
Can you help me with this?? https://answall.com/questions/248773/addir-embarca%C3%A7oes-dynamically-on-board
– Carlos Diego