private List <ArbolGeneral <Carta> > _consultaC(int nivel) { if (jugadaActual.esHoja()) { camino.Add(jugadaActual); } else { Cola <ArbolGeneral <Carta> > c = new Cola <ArbolGeneral <Carta> >(); // Instanciamos cola ArbolGeneral <Carta> arbolAux; int contNivel = 0; c.encolar(jugadaActual); // se encola el arbol c.encolar(null); // se encola el separador while (!c.esVacia()) { arbolAux = c.desencolar(); if (arbolAux != null) { if (nivel == contNivel) // Si la profundidad elegida es igual a la profundidad recorrida { if ((contNivel % 2) == 0) // Si es par, se procesan las cartas de la IA { Console.ForegroundColor = ConsoleColor.DarkYellow; Console.Write("(" + arbolAux.getDatoRaiz().getCarta() + ", " + arbolAux.getDatoRaiz().getFuncHeursitica() + ")"); Console.ResetColor(); } else // Si no del humano { Console.ForegroundColor = ConsoleColor.Cyan; Console.Write("(" + arbolAux.getDatoRaiz().getCarta() + ", " + arbolAux.getDatoRaiz().getFuncHeursitica() + ")"); Console.ResetColor(); } } // Se encolan los hijos (si tiene) foreach (ArbolGeneral <Carta> hijo in arbolAux.getHijos()) { c.encolar(hijo); } } // Si desencolamos null (separador): else { contNivel++; // se incrementa el contador de nivel. if (!c.esVacia()) // Si la cola no se vacio, { c.encolar(null); // se encola null (separador) } } } } return(camino); }
public void imprimirNivel(int nivel, ArbolGeneral <DatosJugada> arbol) { Cola <ArbolGeneral <DatosJugada> > c = new Cola <ArbolGeneral <DatosJugada> >(); //ArbolGeneral<DatosJugada> aux; int contador = 0; bool NivelEncontrado = false; c.encolar(referencia); c.encolar(null); while (!c.esVacia()) { arbol = c.desencolar(); if (arbol != null) { if (contador == nivel) { NivelEncontrado = true; if (arbol.getDatoRaiz().valorDeConveniencia == 1) { Console.Write(arbol.getDatoRaiz().carta + " " + "[Pierde], "); } if (arbol.getDatoRaiz().valorDeConveniencia == -1) { Console.Write(arbol.getDatoRaiz().carta + " " + "[Gana], "); } } } if (arbol == null) { if (!c.esVacia()) { c.encolar(null); } contador++; } else { if (!referencia.esHoja()) { foreach (var hijo in arbol.getHijos()) { c.encolar(hijo); } } } } if (NivelEncontrado == false) { Console.WriteLine("No se encontro la profunidad. Regresando al juego...."); } }
private List <ArbolGeneral <Carta> > _consultaA(ArbolGeneral <Carta> jugadaActual) { camino.Add(jugadaActual); if (jugadaActual.esHoja()) // Si se encuentra un nodo hoja, se lo agrega y se agrega un separador. { // camino.Add(new ArbolGeneral<Carta>(new Carta(0, 0))); imprimir(camino); Console.WriteLine(); } else { foreach (ArbolGeneral <Carta> hijo in jugadaActual.getHijos()) { _consultaA(hijo); camino.Remove(hijo); } } return(camino); }
public void porNiveles() { Cola <ArbolGeneral <DatosJugada> > c = new Cola <ArbolGeneral <DatosJugada> >(); ArbolGeneral <DatosJugada> arbolAux; int contador = 0; c.encolar(minimax); c.encolar(null); while (!c.esVacia()) { arbolAux = c.desencolar(); if (arbolAux != null) { Console.Write(arbolAux.getDatoRaiz().carta + " "); //Modificado para mostrrar niveles. B V Console.Write("[" + arbolAux.getDatoRaiz().limiteActual + "]" + " "); } if (arbolAux == null) { if (!c.esVacia()) { contador++; Console.WriteLine(); Console.WriteLine("*****Nivel ******"); c.encolar(null); } } else { if (!minimax.esHoja()) { foreach (var hijo in arbolAux.getHijos()) { c.encolar(hijo); } } } } }