Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fonction qui ne marche pas ?

Mini jeux en C++

Sujet résolu
    26 janvier 2020 à 20:32:30

    Bonsoir à tous et à toutes,

    J'essaie de réaliser un petit Morpion en C++ et il se trouve que j'ai du mal à terminer.

    En effet, j'ai tout codé avec un IA qui joue contre l'utilisateur, mais lorsque je test une fonction simple ou l'IA remplira automatiquement une case si deux cote à cote sont pareilles, ça ne marche pas.

    Par exemple si j'ai la première ligne :

    X I X I 

       I    I

       I    I

    Cela doit donner :

    X I X I O

       I    I

       I    I

    Avec une fonction PlayTodefend que je n'arrive pas à faire marcher.

    Mon code (uniquement le code utile à la fonction) : 

    Le main.cpp :

    // -- Morpion -- //
    
    #include <iostream>
    #include <iomanip>
    #include <ctime>
    #include <cstdlib>
    #include "display.h"
    #include "ia.h"
    
    using namespace std;
    
    int main()
    {
        // Variable Tableau
        int tailleTab (9);
        char tabMorpion[tailleTab]= {'X','X',' ',' ',' ',' ',' ',' ',' '};
    
        // Affichage de la grille vide
        displayEmptyGrid();
        cout << endl;
    
        // Test de la fonction pour faire jouer l'IA (en partant du principe que 2 X sont alignés)
        iaPlayToDefend(tabMorpion, tailleTab);
    
        // Affichage jeux en cours
        displayGrid (tabMorpion,tailleTab);
    
        // Affichage des 3 premiers symboles de la première ligne
        cout << tabMorpion[0] ;
        cout << tabMorpion[1] ;
        cout << tabMorpion[2] ;
    }
    

    La fonction pour faire défendre l'IA (ia.cpp) :

    #include <iostream>
    #include <iomanip>
    #include <ctime>
    #include <cstdlib>
    #include <vector>
    #include "ia.h"
    #include "display.h"
    
    using namespace std;
    
    // Fontion iaPlayToDefend qui cherche si deux 'X' sont alignés horizontalement, verticalement ou diagonalement et complète si possible par O
    
    bool iaPlayToDefend (char tabMorpion[], int tailleTab)
    {
        // Ligne 1 : 2 X alignés
        if (tabMorpion[2] == ' ' && tabMorpion[0] == 'X' && tabMorpion[1] == 'X')
        {
            tabMorpion[2] == 'O';
            return true;
        }
        else if (tabMorpion[1] == 'X' && tabMorpion[2] == 'X' && tabMorpion[0] == ' ')
        {
            tabMorpion[0] == 'O';
            return true;
        }
        else if (tabMorpion[0] == 'X' && tabMorpion[2] == 'X' && tabMorpion[1] == ' ')
        {
            tabMorpion[1] == 'O';
            return true;
        }
        // Ligne 2 : 2 'X' alignés
        else if (tabMorpion[3] == 'X' && tabMorpion[4] == 'X' && tabMorpion[5] == ' ')
        {
            tabMorpion[5] == 'O';
            return true;
        }
        else if (tabMorpion[4] == 'X' && tabMorpion[5] == 'X' && tabMorpion[3] == ' ')
        {
            tabMorpion[3] == 'O';
            return true;
        }
        else if (tabMorpion[3] == 'X' && tabMorpion[5] == 'X' && tabMorpion[4] == ' ')
        {
            tabMorpion[4] == 'O';
            return true;
        }
        // Ligne 3 : 2 'X' alignés
        else if (tabMorpion[6] == 'X' && tabMorpion[7] == 'X' && tabMorpion[8] == ' ')
        {
            tabMorpion[8] == 'O';
            return true;
        }
        else if (tabMorpion[7] == 'X' && tabMorpion[8] == 'X' && tabMorpion[6] == ' ')
        {
            tabMorpion[6] == 'O';
            return true;
        }
        else if (tabMorpion[6] == 'X' && tabMorpion[8] == 'X' && tabMorpion[7] == ' ')
        {
            tabMorpion[7] == 'O';
            return true;
        }
        // Colonne 1 : 2 'X' alignés
        else if (tabMorpion[0] == 'X' && tabMorpion[3] == 'X' && tabMorpion[6] == ' ')
        {
            tabMorpion[6] == 'O';
            return true;
        }
        else if (tabMorpion[3] == 'X' && tabMorpion[6] == 'X' && tabMorpion[0] == ' ')
        {
            tabMorpion[0] == 'O';
            return true;
        }
        else if (tabMorpion[0] == 'X' && tabMorpion[6] == 'X' && tabMorpion[3] == ' ')
        {
            tabMorpion[3] == 'O';
            return true;
        }
        // Colonne 2 : 2 'X' alignés
        else if (tabMorpion[1] == 'X' && tabMorpion[4] == 'X' && tabMorpion[7] == ' ')
        {
            tabMorpion[7] == 'O';
            return true;
        }
        else if (tabMorpion[4] == 'X' && tabMorpion[7] == 'X' && tabMorpion[1] == ' ')
        {
            tabMorpion[1] == 'O';
            return true;
        }
        else if (tabMorpion[1] == 'X' && tabMorpion[7] == 'X' && tabMorpion[4] == ' ')
        {
            tabMorpion[4] == 'O';
            return true;
        }
        // Colonne 3 : 2 'X' alignés
        else if (tabMorpion[2] == 'X' && tabMorpion[5] == 'X' && tabMorpion[8] == ' ')
        {
            tabMorpion[8] == 'O';
            return true;
        }
        else if (tabMorpion[5] == 'X' && tabMorpion[8] == 'X' && tabMorpion[2] == ' ')
        {
            tabMorpion[2] == 'O';
            return true;
        }
        else if (tabMorpion[2] == 'X' && tabMorpion[8] == 'X' && tabMorpion[5] == ' ')
        {
            tabMorpion[5] == 'O';
            return true;
        }
        // Diagonale 1 : 2 'X' alignés
        else if (tabMorpion[0] == 'X' && tabMorpion[4] == 'X' && tabMorpion[8] == ' ')
        {
            tabMorpion[8] == 'O';
            return true;
        }
        else if (tabMorpion[4] == 'X' && tabMorpion[8] == 'X' && tabMorpion[0] == ' ')
        {
            tabMorpion[0] == 'O';
            return true;
        }
        else if (tabMorpion[0] == 'X' && tabMorpion[8] == 'X' && tabMorpion[4] == ' ')
        {
            tabMorpion[4] == 'O';
            return true;
        }
        // Diagonale 2 : 2 'X' alignés
        else if (tabMorpion[2] == 'X' && tabMorpion[4] == 'X' && tabMorpion[6] == ' ')
        {
            tabMorpion[6] == 'O';
            return true;
        }
        else if (tabMorpion[4] == 'X' && tabMorpion[6] == 'X' && tabMorpion[2] == ' ')
        {
            tabMorpion[2] == 'O';
            return true;
        }
        else if (tabMorpion[2] == 'X' && tabMorpion[6] == 'X' && tabMorpion[4] == ' ')
        {
            tabMorpion[4] == 'O';
            return true;
        }
    
        return false;
    }

    J'ai spécifié ma fonction dans mon ia.h. Je n'arrive qu'à le faire jouer aléatoirement avec une fonction random..

    Le résultat de se programme me donne donc les deux premiers X et le 3ème est vide. Pas de "O".

    Merci d'avance pour votre aide.

    Edit : Je viens tout juste de voir que j'avais mis des :

    tabMorpion[2] == 'O';

    Alors que c'est "=" !

    Tout fonctionne désormais.

    -
    Edité par PetiteFlamme31 26 janvier 2020 à 21:02:07

    • Partager sur Facebook
    • Partager sur Twitter
      27 janvier 2020 à 9:22:42

      Note toutefois :

      • Ligne 16 : c'est interdit en C++. Active les warnings de ton compilateur.
      • Ta fonction iaPlayToDefend pourrait se faire avec des boucles
      • Partager sur Facebook
      • Partager sur Twitter

      git is great because Linus did it, mercurial is better because he didn't.

        7 mars 2020 à 19:26:33

        markand a écrit:

        Note toutefois :

        • Ligne 16 : c'est interdit en C++. Active les warnings de ton compilateur.
        • Ta fonction iaPlayToDefend pourrait se faire avec des boucles

        Merci pour ces détails !
        • Partager sur Facebook
        • Partager sur Twitter

        Fonction qui ne marche pas ?

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown