Árvore

1 resposta
tiagokos

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:

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<NodoTabuleiro> nodosFilhos = new ArrayList<NodoTabuleiro>();
   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;
   }
  
}

1 Resposta

Rodrigo_Sasaki

Tem como você explicar melhor o seu problema? pro pessoal não precisar copiar e rodar seu código para entender o que ocorre de errado?

Criado 30 de abril de 2012
Ultima resposta 30 de abr. de 2012
Respostas 1
Participantes 2