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