Opa, tudo bem?
Estou criando uma árvore de possíveis jogadas em uma aplicação para a faculdade.
A lógica é simples, todos os nodos mantem um estado (uma matriz 9x9 com valores referentes a campos inválidos e campo sem peça, por exemplo).
Estou tendo um problema pois não consigo montar a árvore, só consigo criar um ramo até o seu fim. Era para ser uma criação em profundidade mas isso não ocorre, acredito que seja porque estou manipulando um objeto em comum com outras classes (estadoDoTabuleiro).
Segue o código:
[code]
public class NodoTabuleiro {
/*
* -1 = casa inválida
* 0 = casa em branco
* 1 = casa jogada pelo jogador 1 (Computador)
* 2 = casa jogada pelo jogador 2 (Humano)
*/
public int[][] estadoDoTabuleiro;
public List nodosFilhos = new ArrayList();
public static int totalNodosFilhos;
public Jogada jogada = new Jogada();
//Construtor inicial
public NodoTabuleiro() {
// estadoDoTabuleiro = new int[][]
// {{ 0, 0, 0, 0, 0, -1, -1, -1, -1},
// { 0, 0, 0, 0, 0, 0, -1, -1, -1},
// { 0, 0, 0, 0, 0, 0, 0, -1, -1},
// { 0, 0, 0, 0, 0, 0, 0, 0, -1},
// { 0, 0, 0, 0, 0, 0, 0, 0, 0},
// {-1, 0, 0, 0, 0, 0, 0, 0, 0},
// {-1, -1, 0, 0, 0, 0, 0, 0, 0},
// {-1, -1, -1, 0, 0, 0, 0, 0, 0},
// {-1, -1, -1, -1, 0, 0, 0, 0, 0}};
estadoDoTabuleiro = new int[][]
{{ 0, 0},
{ 0, 0}};
jogada.setDono(Jogador.HUMANO);
}
public NodoTabuleiro(int[][] estadoDoTabuleiro) {
this.estadoDoTabuleiro = estadoDoTabuleiro;
}
public NodoTabuleiro(int[][] estadoDoTabuleiro, Jogada novaJogada) {
this.estadoDoTabuleiro = estadoDoTabuleiro;
this.jogada = novaJogada;
this.executarNovaJogada(jogada);
this.achaProximasJogadas();
}
private void executarNovaJogada(Jogada novaJogada) {
int linha = novaJogada.getLinha();
int coluna = novaJogada.getColuna();
int valorDoCampo = 0;
switch (novaJogada.getDono()) {
case COMPUTADOR: valorDoCampo = 1; break;
case HUMANO: valorDoCampo = 2; break;
}
estadoDoTabuleiro[linha][coluna] = valorDoCampo;
}
public int[][] getEstadoDoTabuleiro() {
return estadoDoTabuleiro;
}
public void setEstadoDoTabuleiro(int[][] estadoDoTabuleiro) {
this.estadoDoTabuleiro = estadoDoTabuleiro;
}
public void achaProximasJogadas() {
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
if (estadoDoTabuleiro[i][j] == 0) {
Jogador jogador = getProximoJogador(jogada);
Jogada novaJogada = new Jogada(i, j, jogador);
NodoTabuleiro novoEstado = new NodoTabuleiro(estadoDoTabuleiro, novaJogada);
totalNodosFilhos++;
nodosFilhos.add(novoEstado);
}
}
}
}
private Jogador getProximoJogador(Jogada jogada) {
Jogador jogador = null;
switch (jogada.getDono()) {
case HUMANO: jogador = Jogador.COMPUTADOR; break;
case COMPUTADOR: jogador = Jogador.HUMANO; break;
}
return jogador;
}
}[/code]