Bonjour,

j'ai un soucis concernant le développement d'un jeu d'Othello, en effet, ayant voulu intégrer une petite IA, j'ai développé une classe recevant le plateau de jeu, et analysant toutes les possibilités... jusqu'ici tout va bien

Le soucis vient de la fonction qui vérifie les possibilités à chaque tour (ex : tour des noirs : 3 possibilités donc 3 branches de test) qui ne me prend pas toutes les possibilités, mais uniquement la première (donc 1ère possibilité du test 1, 1ère du second et ainsi de suite... ca rend la procédure un peu inutile)

je ne comprend pas pourquoi une fois la fonction récursive lancée une première fois, elle ne continue pas, c'est pour ça que je me tourne vers vous ^^

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
private void Test_coups(int[,] plateau, int x, int y, string tour, bool premier_coup, int x_premier, int y_premier)
{
    //Mise à jour du plateau de jeu selon coup testé
    if (x != -1 && y != -1)
        plateau = tour_jeu(plateau, x, y, (tour == "noirs")? "blancs": "noirs");
 
    int joueur = (tour == "noirs") ? 2 : 1;
    int ennemi = (tour == "noirs") ? 1 : 2;
 
    //Verification fin de partie
    if (compter_cases(plateau) == Jeu.NOMBRE_CASES * Jeu.NOMBRE_CASES)
    {
        determ(x_premier, y_premier, compter_noirs(plateau));
        //Console.WriteLine(compter_noirs(plateau));
        //return;
    }
    else
    {
        //Test des différents coups possibles
        int increm = 0;
        bool coup_possible = false;
        for (int i = 0; i < Jeu.NOMBRE_CASES; i++)
        {
            for (int j = 0; j < Jeu.NOMBRE_CASES; j++)
            {
                if (plateau[i, j] == 0)
                {
                    # region Cas du dessus
                    if (j > 1 && plateau[i, j - 1] == ennemi && !coup_possible)
                    {
                        increm = 2;
                        do
                        {
                            if (plateau[i, j - increm] == joueur) coup_possible = true;
                            else if (plateau[i, j - increm] == ennemi) increm++;
                            else break;
                        } while ((j - increm) >= 0 && !coup_possible);
                    }
                    #endregion
                    #region Cas du dessous
                    #region Cas à droite
                    #region Cas à gauche
                    #region Cas au dessus, à droite
                    #region Cas au dessus, à gauche
                    #region Cas en dessous, à droite
                    #region Cas en dessous, à gauche
                    if (coup_possible)
                    {
                        if (premier_coup)
                        {
                            x_premier = i;
                            y_premier = j;
                        }
                        Test_coups(plateau, i, j, (joueur == 1) ? "noirs" : "blancs", false, x_premier, y_premier);
                    }
                    coup_possible = false;
                }
            }
        }
    }
}
Je ne met qu'une version épurée (inutile de mettre tout les tests, je n'en met qu'un, je pense que cela suffit ^^; inutile de surcharger le post)

En vous remerciant par avance pour votre aide!