public override void incializar(List <int> cartasPropias, List <int> cartasOponente, int limite) { this.naipes = cartasPropias; this.naipesHuman = cartasOponente; this.limite = limite; //Inicializar el estadoInicial estadoInicial.setCartasHumano(cartasOponente); estadoInicial.setCartasIA(cartasPropias); estadoInicial.setLimite(limite); estadoInicial.setJuegaHumanoTrue(); //Armar arbol MiniMax MiniMax = ArmarArbolMinimax(estadoInicial); //Copiar el arbol MiniMax jugadaActual = MiniMax; }
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); } } } }