/**
   * El nodo hijo pasado es el ultimo movimiento del jugador pasado en parametro, los hijos de este
   * nodo son los posibles movimientos del OTRO jugador, donde NO puede ganar este que estamos
   * probando.
   *
   * @param nodo
   * @param jugador
   * @param profundidad
   * @return
   */
  public int getCantidadVictoriasAPartirDe(Arbol.Nodo<Jugada> nodo, int jugador, int profundidad) {
    if (nodo.getHijos().estaVacia()) {
      if (nodo.getValor().haGanado(jugador)) return (10 - profundidad);
      int otroJugador = (jugador == COMPUTADORA ? JUGADOR : COMPUTADORA);
      if (nodo.getValor().haGanado(otroJugador)) return (profundidad - 10);
      return 0;
    }

    int total = 0;
    Iterator<Arbol.Nodo<Jugada>> iter = nodo.getHijos().iterator();
    while (iter.hasNext()) {
      Arbol.Nodo<Jugada> nodoHijo = iter.next();
      total += getCantidadVictoriasAPartirDe(nodoHijo, jugador, profundidad + 1);
    }

    return total;
  }
  /**
   * Elige una jugada a partir del arbol de decision obtenido para el jugador pasado en parametro.
   * Para esto lo que hace es contar la cantidad de victorias que le da cada uno de los hijos de la
   * raiz (las posibles jugadas). Luego, lo unico que se hace es elegir el hijo que da la mayor
   * cantidad de victorias.
   *
   * @param arbolDecision
   * @param jugador
   * @return
   */
  private Jugada elegirJugada(Arbol<Jugada> arbolDecision, int jugador) {
    int maxCantidadVictorias = Integer.MIN_VALUE;
    Jugada elegida = null;

    Cadena<Arbol.Nodo<Jugada>> posibles = arbolDecision.getRaiz().getHijos();

    Iterator<Arbol.Nodo<Jugada>> iter = posibles.iterator();
    while (iter.hasNext()) {
      Arbol.Nodo<Jugada> nodo = iter.next();
      logger.debug("Jugada: \n" + nodo.getValor());
      int cantidadVictorias = getCantidadVictoriasAPartirDe(nodo, jugador, 1);
      logger.debug("Tiene " + cantidadVictorias + " victorias posibles");
      if (cantidadVictorias >= maxCantidadVictorias) {
        elegida = nodo.getValor();
        maxCantidadVictorias = cantidadVictorias;
      }
    }

    return elegida;
  }