1 Question: J'ai essayé de faire un jeu C ++ Tic Tac Toe mais je n'obtiens pas le résultat correct

question créée à Sat, Mar 16, 2019 12:00 AM

J'ai essayé de créer un programme c ++ mais en obtenant un résultat erroné à chaque fois.

Chaque fois que j'assigne les coordonnées x et y 2 et 3 respectivement, il attribue deux des éléments en tant que "X" et non un seul. J'ai essayé cela plusieurs fois maintenant.

Code:

#include<iostream.h>
#include<conio.h>
void reset(char a[2][2])
{
    for(int i = 0; i < 3; i++)
        for(int j = 0; j < 3; j++)
            a[i][j] = '_';
}
void dispmat(char a[2][2])
{
    for (int k = 0; k < 3; k++)
    {
        for(int l = 0; l < 3; l++)
            cout << a[k][l] << '\t';
        cout << endl;
    }
}
void getcoordinates(int &x, int &y)
{
    cout << "Enter the row: "<< endl;
    cin >> x;
    cout << "Enter the column:" << endl;
    cin >> y;
    x--;
    y--;
}
void main()
{
    clrscr();
    char a[2][2],yon = 'y';
    int t = 2,x,y, flag = 0;
    do
    {
        reset(a);
        for(int h = 0; h < 9; h++)      // max no. of cells to be filled = 9
        {
            clrscr();
            dispmat(a);             // displays matrix
            if(t++%2 == 0)          // X's turn
            {
                cout << "It is X \'s chance now" << endl;
                getcoordinates(x,y);
                a[x][y] = 'x';
                for(int m = 0; m < 3; m++)
                    //if any one condition is true, x is declared the winner
                    if((a[m][0] == a[m][1] && a[m][1] == a[m][2] && a[m][2] == 'x')||(a[0][m] == a[1][m]&&a[1][m] == a[2][m] && a[2][m] == 'x')||(a[0][0] == a[1][1]&&a[1][1] == a[2][2] && a[2][2] == 'x')||(a[2][0] == a[1][1]&&a[1][1] == a[0][2] && a[0][2] == 'x'))
                    {
                        flag = -1;   //if flag = 1, x wins
                                 //if flag = -1, 0 wins
                                 // if flag = 0, its a draw
                        break;
                    }
                if (flag == -1||flag == 1)
                    break;
            }
            else              // 0's turn
            {
                cout << "It is 0 \'s chance now" << endl;
                getcoordinates(x,y);
                a[x][y] = '0';
                for(int n = 0; n < 3; n++)
                    if((a[n][0] == a[n][1] && a[n][1] == a[n][2] && a[n][2] == '0')||(a[0][n] == a[1][n]&&a[1][n] == a[2][n] && a[2][n] == '0')||(a[0][0] == a[1][1]&&a[1][1] == a[2][2] && a[2][2] == '0')||(a[2][0] == a[1][1]&&a[1][1] == a[0][2] && a[0][2] == '0'))
                    {
                        flag = 1;
                        break;
                    }
                if(flag == 1)
                    break;

            }
        }
        if(flag == 1)
            cout << "Winner is 0!" << endl;
        else if(flag == -1)
            cout << "Winner is X!" << endl;
        else
            cout << "It is a draw!" << endl;
        cout << "Do you want to continue?" << endl;
        cin >> yon;
    } while(yon == 'y' || yon == 'Y');
    getch();
}
    
- 2
  1. Sans lien: si vous avez le choix entre les compilateurs à utiliser, n'utilisez pas Turbo C ++. Ce meunier est obsolète depuis des décennies. Il existe de nombreuses alternatives gratuites, l'édition The Visual Studio Community par exemple, qui ne sont pas périmées depuis 30 ans.
    2019-03-16 20: 17: 16Z
  2. Je ne suis pas assez ferme en C ++ - mais vous ne devriez pas dimensionner votre tableau "char a [3] [3]" au lieu de "char a [2] [2] "si vous voulez avoir 3x3 éléments?
    2019-03-16 20: 20: 01Z
  3. Je suis paresseux aujourd'hui. Lorsque vous avez utilisé le débogueur, quelle instruction est à l'origine du problème? Veuillez modifier votre message avec les informations et indiquer la valeur de la variable attendue et la valeur réelle.
    2019-03-16 20: 47: 56Z
  4. BTW, la fonction 0600350991111101035062 renvoie un 0600350991111101035062 au système d'exploitation. Toujours.
    2019-03-16 20: 49: 00Z
  5. @ ThomasMatthews ici, le type de retour de main est void et la déclaration de retour n'est donc pas nécessaire ... Cependant, avec l'aide de cette communauté et de ces personnes comme vous, j’ai pu résoudre ma petite erreur ...
    2019-03-17 06: 01: 37Z
1 Réponses                              1                         

Votre erreur est simple: Vous utilisez un tableau [2] [2], mais vous avez vraiment besoin d'un tableau [3] [3]. Vous indexez un tableau en utilisant [0], [1], [2] ... mais pour définir sa taille réelle, vous devez utiliser l'index maximum + 1,

.

so main dans ce cas.

    
- 1
2019-03-16 20: 48: 10Z
  1. Hé! merci de m'aider !!
    2019-03-16 22: 29: 38Z
  2. J'avais vraiment cette idée fausse que le tableau d'un [2] [2] aura 9 éléments avec des indices 0,1,2 pour les lignes et les colonnes.
    2019-03-16 22: 31: 16Z
  3. Oui, c'est une erreur typique du débutant. Lorsque j'ai commencé à utiliser le C ++, je l'ai également intégré à l'un de mes projets.
    2019-03-17 14: 12: 22Z
int
source placée ici