Atualizar valores da matrix

Bom dia pessoal,
Eu estou criando um game board, utilizando uma matriz de 2d array. Durante o jogo os jogadores acertam ou erram e isso tem que ficar impresso no board.
Eu gostaria de saber como eu posso atualizar a matriz sem perder e que foi impresso anteriormente.

Minha primeira matriz:

public void drawBoard() {	
		int[] m = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
		int[] n = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
		int position = 1;
		
		System.out.println("\n" + "This is your board : " + "\n" + "		'**' means hited and '~~' means missed" + "\n");
		
		for(int i = 0; i < height+1; i++){
			for(int j = 0; j < width+1; j++) {
				board[i][0] = String.valueOf(m[i]);
				board[0][j] = String.valueOf(n[j]);
				board[i+1][j+1] = String.valueOf(position);//"&";
				position++;
				System.out.print(board[i][j] + "\t");
				this.ship[i][j] = board[i][j];
			}
			System.out.println();
		}
	}

As interacões dos jogadores:

public void guess() {
		System.out.println("\n" + "Please, enter a row number: ");
		Scanner input = new Scanner(System.in);
		row = input.nextInt();
		System.out.println("\n" + "Please, enter a col number: ");
		Scanner input2 = new Scanner(System.in);
		col = input2.nextInt();
		boolean win = false;
		String [] z = {"**","~~"};
		int linha = 0;
		int coluna = 0;
	
		if (ship[row][col].equals("A")) {
			hit++;
			linha = row;
			coluna = col;
			ship[row][col] = "**";
			//board[row][col] = "**";
			pickedShip[linha*coluna] = ship[row][col];
			guess[lin][colu] = pickedShip[linha*coluna];
			System.out.println("Hey! You hit it!");
			//HitBoard();
			NewBoard();
		}
		else if (ship[row][col].equals("B")) {
			hit++;
			ship[row][col] = "**";
			//board[row][col] = "**";
			pickedShip[row*col] = ship[row][col];
			System.out.println("Hey! You hit it!");
			//HitBoard();
			NewBoard();
		}
		else if (ship[row][col].equals("C")) {
			hit++;
			ship[row][col] = "**";
			//board[row][col] = "**";
			pickedShip[row*col] = ship[row][col];
			//pickedShip[(row+2)*(col+2)] = ship[row][col];
			System.out.println("Hey! You hit it!");
			//HitBoard();
			NewBoard();
		}
		else if (ship[row][col].equals("D")) {
			hit++;
			ship[row][col] = "**";
			//board[row][col] = "**";
			pickedShip[row*col] = ship[row][col];
			System.out.println("Hey! You hit it!");
			//HitBoard();
			NewBoard();
		}
		else if (ship[row][col].equals("E")) {
			hit++;
			ship[row][col] = "**";
			//board[row][col] = "**";
			pickedShip[row*col] = ship[row][col];
			System.out.println("Hey! You hit it!");
			//HitBoard();
			NewBoard();
		}
		else if (ship[row][col].equals("F")) {
			hit++;
			ship[row][col] = "**";
			//board[row][col] = "**";
			pickedShip[row*col] = ship[row][col];
			System.out.println("Hey! You hit it!");
			//HitBoard();
			NewBoard();
		}
		else if(ship[row][col].equals("**") || ship[row][col].equals("~~")){
			System.out.println("Sorry! It was already picked!");
		}
		else {
			//miss++;
			ship[row][col] = "~~";
			//board[row][col] = "~~";
			pickedShip[row*col] = ship[row][col];
			System.out.println("\n" + "Sorry, you miss it!" + "\n");
			//missedBoard();
			NewBoard();
		}
	}

E finalmente minha nova matrix:

public void NewBoard() {
		int[] m = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
		int[] n = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
		
		for(int i = 0; i < height+1; i++){
			for(int j = 0; j < width+1; j++) {
				board[i][0] = String.valueOf(m[i]);
				board[0][j] = String.valueOf(n[j]);
				board[i+1][j+1] = "&";
				board[lin][colu] = guess[lin][colu];
				System.out.print(board[i][j] + "\t"); 
			}
			System.out.println();
		}
	}

Geralmente quando é utilizado o prompt ou o netbeans tudo que é impresso usando o System.out.println fica vísivél até o final, mas ele tem um limite da quantidade que da para escrever e começa a apagar os mais antigos. Para acessar alguns mais antigos é só rolar a barra pra cima.

Poise, mas meu professor usa eclipse. Então mesmo que eu crie no netbeans depois quando ele for verificar não vai funcionar.

o Eclipse tem muito tempo que eu não mecho com ele, mas acho que é a mesma coisa, de qualquer forma você pode alterar o tamanho das letras para poder caber mais, indo em Preferences -> Java -> Code style -> Formatter . Clica em Edit…, eu vi isso em outro post. De qualquer forma vai ter limite de quantas vezes vai aparecer suas matrizes, uma hora a que foi feita primeiro não vai aparecer mais.

Mas meu problema não é aparecer as matrizes, é atualizá-las e imprimir como uma nova. Eu preciso que todas as novas informações estejam com as velhas em uma só impressão. Assim, não precisaria das impressões antigas.

Vamos ver se entendi, você tem 2 matrizes de 21 posições e uma matriz e precisa atualizar como se fosse o jogo batalha naval. O que eu recomendo é tirar os vetores m e n, e ter 2 matrizes. Uma onde aparece para o usuário onde ele tentou e outra matriz com onde fica as bombas. No inicio você tem que colocar todas as posições da matriz com o valor “_” e a outra com o mar sendo os valores “0” e um navio com o valor “1”, depois é só ficar lendo pelo teclado o que o usuário for digitar exemplo:

matriz1[valorLido1][valorLido2]=matriz2[valorLido1][valorLido2];
for(int i = 0; i < height+1; i++){
			for(int j = 0; j < width+1; j++) {
                                      System.out.print(matriz1[i][j]);
}
}

se tiver quantidade de tentativas é só ao final da chave do for dar um quantidade++.

Para atualizar o valor da matriz é só pegar o número da linha e o da coluna e depois colocar o novo valor exemplo:

matriz[i][j].
matriz[5][3]=3; //Valor da matriz na linha 5 coluna 3 é igual a 3
matriz[5][3]=9; //Valor da matriz na linha 5 coluna 3 é igual a 9

Poise, eu até sei disso o problema é que o jogo é cheio de nuances tipo eu não sei quais as coordenadas da matrix. O usuario pode escolher valores entre 10 a 20 para linha e coluna. O barco tem que ser escolhido randonicamente e tem que ter 1/3 do tamanho da linha que eu não sei qual o tamanho. E daí que tudo gira entorno de variaveis. Eu não tenho o valor de nada. Então eu coloquei por exemplo,
matriz[1][3] = 0;
matriz1[i][[j] = -1; sendo i = 1 e j = 3,
ok mudei mas quando eu vou atribuir novamente o valor de i e j ele volta ao valor original.

matriz[1][3] volta a ser 0.

Consegui atualizar atribuindo novos valores e depois novos valores de novo.

Agora tá funcionando como deveria? Qualquer coisa posta o código completo.

Sim, agora essa parte está funcionando. Mas ainda tenho que fazer com que troque de jogador.

1 curtida