public override int descartarUnaCarta() { //busca en los hijos del arbol el estado "gana IA" y elige esa carta int carta = arbol.getHijos()[0].getDatoRaiz(); foreach (ArbolGeneral <int> x in arbol.getHijos()) { string ganar = x.estadoGana(); if (ganar == "gana IA") { carta = x.getDatoRaiz(); } } //elige el camino del arbol que posee la carta elegida previamente foreach (ArbolGeneral <int> x in arbol.getHijos()) { if (x.getDatoRaiz() == carta) { arbol = x; } } // imprime y retorna la carta Console.WriteLine("Naipe elegido por la Computadora: " + carta); return(carta); }
public void porNiveles() { Cola <ArbolGeneral <T> > cola = new Cola <ArbolGeneral <T> >(); cola.encolar(this); while (!cola.esVacia()) { ArbolGeneral <T> dato = cola.desencolar(); Console.WriteLine(dato.getDatoRaiz() + dato.estadoGana()); foreach (ArbolGeneral <T> x in dato.getHijos()) { cola.encolar(x); } } }
private void funcionEuristica(ArbolGeneral <int> arbolminmax, int limit, int turno) { // turno ira turnando al IA y al usuario. si turno es par, es turno de IA. impar para el usuario turno++; int dato = arbolminmax.getDatoRaiz(); limit = limit - dato; if (limit < 0) { if (turno % 2 == 0) { arbolminmax.sePierde(); } else { arbolminmax.seGana(); } } else { // si es turno de IA, entonces la funcion euristica minimiza, si es turno del usuario maximiza // por defecto si es turno de IA, se implementa que gana IA a menos que haya un solo resultado // negativo obtenido de la recursion, entonces se pone en el arbol que pierde (minimizar). // lo contrario con el turno del usuario. string decide = ""; if (turno % 2 == 0) { decide = "gana IA"; } else { decide = "pierde IA"; } foreach (ArbolGeneral <int> x in arbolminmax.getHijos()) { funcionEuristica(x, limit, turno); string ganador = x.estadoGana(); if (turno % 2 == 0) { if (ganador == "pierde IA") { decide = "pierde IA"; } } else { if (ganador == "gana IA") { decide = "gana IA"; } } } if (decide == "gana IA") { arbolminmax.seGana(); } else { arbolminmax.sePierde(); } } }