コード例 #1
0
        //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);
        }
コード例 #2
0
        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);
                    }
                }
            }
        }