public void TomarDecision() { Debug.Log("La ia comienza su analisis"); List <GameObject> ComponentesDisponiblesAux = new List <GameObject> (); ComponenteInsulto ultimoAux, penultimoAux; if (!QuedanComponentesValidos(ComponentesDisponibles, ultimo, penultimo, count)) { partida.BotonTerminarRed(); Debug.Log("LA IA TERMINA SU TURNO"); return; } Debug.Log("AUN QUEDAN COMPONENTES ELEGIBLES"); for (int i = 0; i < Constantes.GENERACIONES; i++) { Debug.Log("Busqueda de la solucion " + (i + 1)); ComponentesDisponiblesAux.Clear(); ComponentesDisponiblesAux.AddRange(ComponentesDisponibles); SolucionActual.Clear(); ultimoAux = ultimo; penultimoAux = penultimo; do { GameObject tmp = ComponentesDisponiblesAux[Random.Range(0, ComponentesDisponiblesAux.Count)]; if (partida.RevisorGramatical(tmp.GetComponent <ComportamientoComponente>().Componente, ultimoAux, penultimoAux, count + SolucionActual.Count)) { tmp = EncuentraConDebilidad(ComponentesDisponiblesAux, tmp); //priorizar debilidades ComponentesDisponiblesAux.Remove(tmp); penultimoAux = ultimoAux; ultimoAux = tmp.GetComponent <ComportamientoComponente>().Componente; SolucionActual.Add(tmp); } }while(QuedanComponentesValidos(ComponentesDisponiblesAux, ultimoAux, penultimoAux, count + SolucionActual.Count)); int dano = calcularDano(SolucionActual); //Debug.Log ("Componentes en solucion " + (i + 1) + " antes: " + SolucionActual.Count+"\nDano en solucion " + (i + 1) + ": " + dano); int tipoUltimo = SolucionActual [SolucionActual.Count - 1].GetComponent <ComportamientoComponente> ().Componente.tipo_componente; while (SolucionActual.Count > 0) { tipoUltimo = SolucionActual [SolucionActual.Count - 1].GetComponent <ComportamientoComponente> ().Componente.tipo_componente; if (tipoUltimo != Constantes.SUJETO && tipoUltimo != Constantes.INSULTO_SIM) { SolucionActual.RemoveAt(SolucionActual.Count - 1); } else { break; } } dano = calcularDano(SolucionActual); //Debug.Log ("Componentes en solucion " + (i + 1) + " despues: " + SolucionActual.Count+"\nDano en solucion " + (i + 1) + ": " + dano); if (dano > dano_max) { MejorSolucion.Clear(); MejorSolucion.AddRange(SolucionActual); dano_max = dano; } } if (MejorSolucion.Count > 0) { EmitirSenalBotonDe(MejorSolucion [0]); } else { partida.BotonTerminarRed(); Debug.Log("LA IA TERMINA SU TURNO"); } }