//Funcion para armar el arbol MiniMax, a partir del estadoInicial private ArbolGeneral <Dupla> ArmarArbolMinimax(Estatus estado) { ArbolGeneral <Dupla> nuevo = new ArbolGeneral <Dupla>(new Dupla(0, 0)); ArmarArbolMinimaxAux(estado, nuevo); return(nuevo); }
private void ArmarArbolMinimaxAux(Estatus estado, ArbolGeneral <Dupla> raiz) { if (estado.returnJuegaHumano() == true) { foreach (int carta in estado.getCartasHumano()) { ArbolGeneral <Dupla> h = new ArbolGeneral <Dupla>(new Dupla(carta, 0)); raiz.agregarHijo(h); if (estado.getLimite() - carta >= 0 && estado.getCartasIA().Count > 0) { List <int> nuevasCartaH = new List <int>(); nuevasCartaH.AddRange(estado.getCartasHumano()); nuevasCartaH.Remove(carta); Estatus estadoNuevo = new Estatus(); estadoNuevo.setCartasHumano(nuevasCartaH); estadoNuevo.setCartasIA(estado.getCartasIA()); estadoNuevo.setLimite(estado.getLimite() - carta); estadoNuevo.setJuegaHumanoFalse(); ArmarArbolMinimaxAux(estadoNuevo, h); bool existe = false; foreach (ArbolGeneral <Dupla> hijo in h.getHijos()) { if (hijo.getDatoRaiz().getValorFuncionHeuristica() == 1) { existe = true; } } if (existe == true) { h.getDatoRaiz().setFuncionHeuristica(1); } else { h.getDatoRaiz().setFuncionHeuristica(-1); } } else { h.getDatoRaiz().setFuncionHeuristica(1); } } } else { foreach (int carta in estado.getCartasIA()) { ArbolGeneral <Dupla> h = new ArbolGeneral <Dupla>(new Dupla(carta, 0)); raiz.agregarHijo(h); if (estado.getLimite() - carta >= 0 && estado.getCartasHumano().Count > 0) { List <int> nuevasCartaIA = new List <int>(); nuevasCartaIA.AddRange(estado.getCartasIA()); nuevasCartaIA.Remove(carta); Estatus estadoNuevo = new Estatus(); estadoNuevo.setCartasIA(nuevasCartaIA); estadoNuevo.setCartasHumano(estado.getCartasHumano()); estadoNuevo.setLimite(estado.getLimite() - carta); estadoNuevo.setJuegaHumanoTrue(); ArmarArbolMinimaxAux(estadoNuevo, h); bool existe = false; foreach (ArbolGeneral <Dupla> hijo in h.getHijos()) { if (hijo.getDatoRaiz().getValorFuncionHeuristica() == -1) { existe = true; } } if (existe == true) { h.getDatoRaiz().setFuncionHeuristica(-1); } else { h.getDatoRaiz().setFuncionHeuristica(1); } } else { h.getDatoRaiz().setFuncionHeuristica(-1); } } } }