예제 #1
0
        // Cherche le meilleur coup du joueur de facon recursive
        // Renvoie la case donnant le meilleur coup et le gain de score
        //**********************************************************
        public Case_retour meilleure_case_joueur1(Awale a, int nbre_recursif)
        //**********************************************************
        {
            int          i;
            Case_retour  sortie       = new Case_retour(0, 0);
            List <Awale> awa          = new List <Awale>();
            int          case_retenue = -1;
            int          gain_retenu  = -36;
            int          gain_actuel;


            List <int> donne = new List <int> {
                0, 0, 0, 0, 0, 0
            };

            // Vérifie si l'adversaire est sans graines et marque les cases qui ne donnent pas
            if (awale.Cases_joueur2[0] + awale.Cases_joueur2[1] + awale.Cases_joueur2[2] + awale.Cases_joueur2[3] + awale.Cases_joueur2[4] + awale.Cases_joueur2[5] == 0)
            {
                for (i = 0; i < 6; i++)
                {
                    if (i + awale.Cases_joueur1[i] < 6)
                    {
                        donne[i] = 1;
                    }
                }
                if (donne[0] + donne[1] + donne[2] + donne[3] + donne[4] + donne[5] == 6) // Jeu fini
                {
                    sortie.gain_score = awale.Score_joueur2 - awale.Score_joueur1;
                    terminer_jeu();
                    sortie.case_meilleure = -1;
                    sortie.gain_score    += awale.Score_joueur1 - awale.Score_joueur2;
                    return(sortie);
                }
            }

            for (i = 0; i < 6; i++)
            {
                if ((awale.Cases_joueur1[i] != 0) && (donne[i] == 0))
                {
                    awa[i] = awale;
                    //joueur1_joue(&awa[i], i);

                    joueur1_joue(i);
                    if (nbre_recursif == 0)
                    {
                        gain_actuel = awale.score_joueur2 - awale.score_joueur1 + awa[i].score_joueur1 - awa[i].score_joueur2;
                    }
                    else
                    {
                        sortie      = meilleure_case_joueur2(awa[i], nbre_recursif - 1);
                        gain_actuel = awale.Score_joueur2 - awale.Score_joueur1 + awa[i].Score_joueur1 - awa[i].Score_joueur2 - sortie.Gain_score;
                    }
                    if (gain_actuel > gain_retenu)
                    {
                        gain_retenu  = gain_actuel;
                        case_retenue = i;
                    }
                }
            }

            sortie.case_meilleure = case_retenue;
            sortie.gain_score     = gain_retenu;

            return(sortie);
        }
예제 #2
0
        // Cherche le meilleur coup du joueur2 de facon recursive
        // Renvoie la case donnant le meilleur coup et le gain de score
        //*******************************************************
        public Case_retour meilleure_case_joueur2(Awale k, int nbre_recursif)
        //*******************************************************
        {
            int          i;
            Case_retour  sortie       = new Case_retour(0, 0);
            List <Awale> awa          = new List <Awale>();
            int          case_retenue = -1;
            int          gain_retenu  = -36;
            int          gain_actuel;


            List <int> donne = new List <int> {
                0, 0, 0, 0, 0, 0
            };

            if (awale.Cases_joueur1[0] + awale.Cases_joueur1[1] + awale.Cases_joueur1[2] + awale.Cases_joueur1[3] + awale.Cases_joueur1[4] + awale.Cases_joueur1[5] == 0)
            {
                for (i = 0; i < 6; i++)
                {
                    if (i + awale.Cases_joueur2[i] < 6)
                    {
                        donne[i] = 1;
                    }
                }
                if (donne[0] + donne[1] + donne[2] + donne[3] + donne[4] + donne[5] == 6) // Jeu fini
                {
                    sortie.Gain_score = awale.Score_joueur1 - awale.Score_joueur2;
                    terminer_jeu();
                    sortie.Case_meilleure = -1;
                    sortie.Gain_score    += awale.Score_joueur2 - awale.Score_joueur1;
                    return(sortie);
                }
            }

            for (i = 0; i < 6; i++)
            {
                if ((awale.Cases_joueur2[i] != 0) && (donne[i] == 0))
                {
                    awa[i] = awale;


                    joueur2_joue(i);
                    if (nbre_recursif == 0)
                    {
                        gain_actuel = awale.Score_joueur1 - awale.Score_joueur2 + awa[i].Score_joueur2 - awa[i].Score_joueur1;
                    }
                    else
                    {
                        sortie      = meilleure_case_joueur1(awa[i], nbre_recursif);
                        gain_actuel = awale.Score_joueur1 - awale.Score_joueur2 + awa[i].Score_joueur2 - awa[i].Score_joueur1 - sortie.Gain_score;
                    }
                    if (gain_actuel > gain_retenu)
                    {
                        gain_retenu  = gain_actuel;
                        case_retenue = i;
                    }
                }
            }

            sortie.case_meilleure = case_retenue;
            sortie.gain_score     = gain_retenu;

            return(sortie);
        }