IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Probleme récursivité pas si récursive que ça


Sujet :

C#

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 23
    Points : 15
    Points
    15
    Par défaut Probleme récursivité pas si récursive que ça
    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!

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    salut

    une des conditions doit faire que tu ne rentres pas dans l'appel de Test_Coups

    Debuggue et tu trouveras pas toi meme (si ce n'est déja fait )

    The Monz, Toulouse
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

Discussions similaires

  1. [RANDOM] Des chiffres pas si aléatoires que ca...
    Par djsbens dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 16/03/2006, 12h22
  2. Réponses: 3
    Dernier message: 13/10/2005, 11h31
  3. Probleme CSS : Text centrer alors que je le veux a gauche...
    Par vampyrx dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 18/07/2005, 23h53
  4. Réponses: 3
    Dernier message: 16/11/2004, 15h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo