// 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); }
// 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); }