Atualizar valores da matrix

10 respostas Resolvido
A

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();
		}
	}

10 Respostas

H

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.

A

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

H

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.

A

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.

H

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++.

H

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

A

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.

A
Solucao aceita

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

wldomiciano

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

A

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

Criado 6 de abril de 2018
Ultima resposta 7 de abr. de 2018
Respostas 10
Participantes 3