Projet tic tac toe / Morpion

Fermé
ano75 - Modifié le 22 mars 2021 à 08:17
yg_be Messages postés 22726 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 - 22 mars 2021 à 16:01
Bonjour,

Je débute la programmation, j'ai un soucis dans mon programme cela fait plusieurs jours que j'essaie de régler mon problème mais je désèpere je n'arrive toujours pas à trouver la solution :/. Mon problème c'est lorsque je demande la saisie d'une coordonnée si celle-ci a déja était saisi normalement elle devrait pas s'afficher or elle s'affiche et passe au joueur numéro 2. Si quelqu'un peut m'aider ca serait super sympa

le code :



using System;

namespace Morpion2
{ 
class Program
{
    static void Main(string[] args)
    {
        int reponserst = 0;
        Console.WriteLine(" \n................Bonjour est bienvenue sur le morpion.................\n ");
        string NomJoueur1, NomJoueur2;
        Console.WriteLine("\nVeuilez choisir le Nom du joueur N°1\n");
        NomJoueur1 = Console.ReadLine();
        Console.WriteLine("\nVeuilez choisir le Nom du joueur N°2\n");
        NomJoueur2 = Console.ReadLine();
        string lettre;
        Nomjoueur(NomJoueur1, NomJoueur2);
        Console.WriteLine("Apuyer sur une touche pour commencer !");
        Console.ReadKey();
        char[,] Montab = new char[4, 4];
        Remplitab(ref Montab);
        Affichetab(Montab);
        lettre = Console.ReadLine();
        CoordJoueur1(ref Montab, lettre);
        CoordJoueur2(ref Montab, lettre);
        VerificationVictoireJ1(Montab);
        VerificationVictoireJ2(Montab);
        tourdeJeu(NomJoueur1, NomJoueur2, Montab, lettre);

        do
        {
            Console.WriteLine("Voulez vous recommencé ? 1 pour recommencer, peu importe pour quitter");
            reponserst = int.Parse(Console.ReadLine());
            Console.Clear();
            Remplitab(ref Montab);
            Affichetab(Montab);
            tourdeJeu(NomJoueur1, NomJoueur2, Montab, lettre);
        } while (reponserst == 1);

        static void Nomjoueur(string NomJ1, string NomJ2) // Pour différencier les 2 joueurs et expliquer la règle
        {
            Console.ForegroundColor = ConsoleColor.Blue;
            Console.WriteLine("\nIMPORTANT : " + NomJ1 + " jouera avec le O et " + NomJ2 + " jouera avec le X\n ");
            Console.ForegroundColor = ConsoleColor.White;
            Console.BackgroundColor = ConsoleColor.Black;
        }

        static void Remplitab(ref char[,] Montab)
        {
            Montab[0, 0] = ' ';
            Montab[0, 1] = 'A';
            Montab[0, 2] = 'B';
            Montab[0, 3] = 'C';
            Montab[1, 0] = '1';
            Montab[1, 1] = '■';
            Montab[1, 2] = '■';
            Montab[1, 3] = '■';
            Montab[2, 0] = '2';
            Montab[2, 1] = '■';
            Montab[2, 2] = '■';
            Montab[2, 3] = '■';
            Montab[3, 0] = '3';
            Montab[3, 1] = '■';
            Montab[3, 2] = '■';
            Montab[3, 3] = '■';
        }

        static void Affichetab(char[,] Montab)
        {
            Console.Write("\nVotre Tableau : \n\n");
            for (int i = 0; i < 4; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    Console.Write(Montab[i, j]);
                    Console.Write(" ");
                }
                Console.WriteLine("");
            }
        }
        static void CoordJoueur1(ref char[,] Montab, string lettre)
        {
            if (lettre == "A1")
                Montab[1, 1] = 'O';
            if (lettre == "A2")
                Montab[2, 1] = 'O';
            if (lettre == "A3")
                Montab[3, 1] = 'O';
            if (lettre == "B1")
                Montab[1, 2] = 'O';
            if (lettre == "B2")
                Montab[2, 2] = 'O';
            if (lettre == "B3")
                Montab[3, 2] = 'O';
            if (lettre == "C1")
                Montab[1, 3] = 'O';
            if (lettre == "C2")
                Montab[2, 3] = 'O';
            if (lettre == "C3")
                Montab[3, 3] = 'O';
        }
        static void CoordJoueur2(ref char[,] Montab, string lettre)
        {
            if (lettre == "A1")
                Montab[1, 1] = 'X';
            if (lettre == "A2")
                Montab[2, 1] = 'X';
            if (lettre == "A3")
                Montab[3, 1] = 'X';
            if (lettre == "B1")
                Montab[1, 2] = 'X';
            if (lettre == "B2")
                Montab[2, 2] = 'X';
            if (lettre == "B3")
                Montab[3, 2] = 'X';
            if (lettre == "C1")
                Montab[1, 3] = 'X';
            if (lettre == "C2")
                Montab[2, 3] = 'X';
            if (lettre == "C3")
                Montab[3, 3] = 'X';
        }

        static bool VerificationVictoireJ1(char[,] Montab)
        {
            if (Montab[1, 1] == 'O' & Montab[1, 1] == Montab[2, 1] & Montab[2, 1] == Montab[3, 1]) //  ligne | de gauche
                return true;
            else if (Montab[1, 2] == 'O' & Montab[1, 2] == Montab[2, 2] & Montab[2, 2] == Montab[3, 2]) // ligne | du millieu
                return true;
            else if (Montab[1, 3] == 'O' & Montab[1, 3] == Montab[2, 3] & Montab[2, 3] == Montab[3, 3])// ligne | de droite
                return true;
            else if (Montab[1, 1] == 'O' & Montab[1, 1] == Montab[1, 2] & Montab[1, 2] == Montab[1, 3])// ligne du haut horizontale ---
                return true;
            else if (Montab[2, 1] == 'O' & Montab[2, 1] == Montab[2, 2] & Montab[2, 2] == Montab[2, 3]) // ligne du millieu horizontale ---
                return true;
            else if (Montab[3, 1] == 'O' & Montab[3, 1] == Montab[3, 2] & Montab[3, 2] == Montab[3, 3])// ligne du bas horizontale ---
                return true;
            else if (Montab[1, 1] == 'O' & Montab[1, 1] == Montab[2, 2] & Montab[2, 2] == Montab[3, 3]) // ligne en diagonale \
                return true;
            else if (Montab[1, 3] == 'O' & Montab[1, 3] == Montab[2, 2] & Montab[2, 2] == Montab[3, 1])//  ligne en diagonale /
                return true;
            //Continue a jouer
            else return false;
        }

        static bool VerificationVictoireJ2(char[,] Montab)
        {
            if (Montab[1, 1] == 'X' & Montab[1, 1] == Montab[2, 1] & Montab[2, 1] == Montab[3, 1])
                return true;
            else if (Montab[1, 2] == 'X' & Montab[1, 2] == Montab[2, 2] & Montab[2, 2] == Montab[3, 2])
                return true;
            else if (Montab[1, 3] == 'X' & Montab[1, 3] == Montab[2, 3] & Montab[2, 3] == Montab[3, 3])
                return true;
            else if (Montab[1, 1] == 'X' & Montab[1, 1] == Montab[1, 2] & Montab[1, 2] == Montab[1, 3])
                return true;
            else if (Montab[2, 1] == 'X' & Montab[2, 1] == Montab[2, 2] & Montab[2, 2] == Montab[2, 3]) 
                return true;
            else if (Montab[3, 1] == 'X' & Montab[3, 1] == Montab[3, 2] & Montab[3, 2] == Montab[3, 3])
                return true;
            else if (Montab[1, 1] == 'X' & Montab[1, 1] == Montab[2, 2] & Montab[2, 2] == Montab[3, 3])
                return true;
            else if (Montab[1, 3] == 'X' & Montab[1, 3] == Montab[2, 2] & Montab[2, 2] == Montab[3, 1])
                return true;
            //Continue a jouer
            else return false;
        }

        static void tourdeJeu(string NomJ1, string NomJ2, char[,] Montab, string lettre)// lancemement du jeu avec vitoire, pas de victoire ou null

        {
            int tour = 1;
            int victoire = 0;
            int erreurpossible = 0;
            string positionj1;
            string positionj2;

            while (tour != 10 & victoire == 0)
            {
                Console.WriteLine("\nTour numéro " + tour); // Pour savoir le numéro du tour 

                    if (tour % 2 == 1) // pour le joueur1

                    {
                        Console.WriteLine(NomJ1 + " Saisissez une coordonnée: ");

                       lettre = Console.ReadLine();
                        CoordJoueur1(ref Montab, lettre);

                        if (VerificationVictoireJ1(Montab) == true)
                            victoire = 1;
                        positionj1 = lettre;

                        switch (positionj1)
                        {
                            case "A1":
                                if (Montab[1, 1] != 'X') //& Montab[1, 1] != 'O')
                                    Montab[1, 1] = 'O';
                                else erreurpossible = 1;
                                break;
                            case "A2":
                                if (Montab[2, 1] != 'X')// & Montab[2, 1] != 'O')
                                    Montab[2, 1] = 'O';
                                else erreurpossible = 1;
                                break;
                            case "A3":
                                if (Montab[3, 1] != 'X')// & Montab[3, 1] != 'O')
                                    Montab[3, 1] = 'O';
                                else erreurpossible = 1;
                                break;
                            case "B1":
                                if (Montab[1, 2] != 'X')// & Montab[1, 2] != 'O')
                                    Montab[1, 2] = 'O';
                                else erreurpossible = 1;
                                break;
                            case "B2":
                                if (Montab[2, 2] != 'X')// & Montab[2, 2] != 'O')
                                    Montab[2, 2] = 'O';
                                else erreurpossible = 1;
                                break;
                            case "B3":
                                if (Montab[3, 2] != 'X')// & Montab[3, 2] != 'O')
                                    Montab[3, 2] = 'O';
                                else erreurpossible = 1;
                                break;
                            case "C1":
                                if (Montab[1, 3] != 'X')// & Montab[1, 3] != 'O')
                                    Montab[1, 3] = 'O';
                                else erreurpossible = 1;
                                break;
                            case "C2":
                                if (Montab[2, 3] != 'X')// & Montab[2, 3] != 'O')
                                    Montab[2, 3] = 'O';
                                else erreurpossible = 1;
                                break;
                            case "C3":
                                if (Montab[3, 3] != 'X')// & Montab[3, 3] != 'O')
                                    Montab[3, 3] = 'O';
                                else erreurpossible = 1;
                                break;
                            default:
                                erreurpossible = 1;
                                break;
                        }
                        while (erreurpossible == 1)
                        {
                            Console.WriteLine("case déja prise, veuillez choisir un autre emplacement");
                            lettre = Console.ReadLine();
                            Console.ForegroundColor = ConsoleColor.White;
                            CoordJoueur1(ref Montab, lettre);
                            CoordJoueur2(ref Montab, lettre);
                            erreurpossible = 0;
                        } 

                        VerificationVictoireJ1(Montab);

                    }
                    else
                    {
                        Console.WriteLine(NomJ2 + " Saisissez une coordonnée: ");
                        lettre = Console.ReadLine();
                        CoordJoueur2(ref Montab, lettre);
                        if (VerificationVictoireJ2(Montab) == true)
                            victoire = 1;
                        positionj2 = lettre;

                        switch (positionj2)
                        {
                            case "A1":
                                if (Montab[1, 1] != 'O')// & Montab[1, 1] != 'X')
                                    Montab[1, 1] = 'X';
                                else erreurpossible = 1;
                                break;
                            case "A2":
                                if (Montab[2, 1] != 'O')// & Montab[2, 1] != 'X')
                                    Montab[2, 1] = 'X';
                                else erreurpossible = 1;
                                break;
                            case "A3":
                                if (Montab[3, 1] != 'O')// & Montab[3, 1] != 'X')
                                    Montab[3, 1] = 'X';
                                else erreurpossible = 1;
                                break;
                            case "B1":
                                if (Montab[1, 2] != 'O')// & Montab[1, 2] != 'X')
                                    Montab[1, 2] = 'X';
                                else erreurpossible = 1;
                                break;
                            case "B2":
                                if (Montab[2, 2] != 'O')// & Montab[2, 2] != 'X')
                                    Montab[2, 2] = 'X';
                                else erreurpossible = 1;
                                break;
                            case "B3":
                                if (Montab[3, 2] != 'O')// & Montab[3, 2] != 'X')
                                    Montab[3, 2] = 'X';
                                else erreurpossible = 1;
                                break;
                            case "C1":
                                if (Montab[1, 3] != 'O')// & Montab[1, 3] != 'X')
                                    Montab[1, 3] = 'X';
                                else erreurpossible = 1;
                                break;
                            case "C2":
                                if (Montab[2, 3] != 'O')// & Montab[2, 3] != 'O')
                                    Montab[2, 3] = 'X';
                                else erreurpossible = 1;
                                break;
                            case "C3":
                                if (Montab[3, 3] != 'O')// & Montab[3, 3] != 'O')
                                    Montab[3, 3] = 'X';
                                else erreurpossible = 1;
                                break;
                            default:
                                erreurpossible = 1;
                                break;
                        }
                        while (erreurpossible == 1)
                        {
                            Console.WriteLine("case déja prise, veuillez choisir un autre emplacement");
                            lettre = Console.ReadLine();
                            Console.ForegroundColor = ConsoleColor.White;
                            CoordJoueur1(ref Montab, lettre);
                            CoordJoueur2(ref Montab, lettre);
                            erreurpossible = 0;
                        }

                        VerificationVictoireJ2(Montab);

                    } 
                    while (lettre != "A1" && lettre != "A2" && lettre != "A3" && lettre != "B1" && lettre != "B2" && lettre != "B3" && lettre != "C1" && lettre != "C2" && lettre != "C3")
                {
                    Console.WriteLine("Saisissez une coordonnée valide: ");
                    lettre = Console.ReadLine();
                    CoordJoueur1(ref Montab, lettre);
                    CoordJoueur2(ref Montab, lettre);
                }

                Console.Clear();
                tour++;
                Affichetab(Montab);
            }     
                if (tour > 2 & VerificationVictoireJ1(Montab))
            {
                Console.WriteLine(NomJ1 + " a gagné ");
            }
            if (tour > 2 & VerificationVictoireJ2(Montab))
            {
                Console.WriteLine(NomJ2 + " a gagné ");
            }
            else if (tour == 10 & VerificationVictoireJ1(Montab) == VerificationVictoireJ2(Montab))
            {
                Console.WriteLine("\n match nul\n ");
            }
        }
    }
  }
}


EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

Merci d'y penser dans tes prochains messages.
A voir également:

4 réponses

yg_be Messages postés 22726 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 476
22 mars 2021 à 08:45
bonjour,
quand tu as cette anomalie, la case était-elle saisie par le même joueur, ou par l'autre joueur?
donne peut-être un exemple de partie qui provoque cette anomalie.
0
Bonjour,

le problème se pose pour les 2 joueurs, je voudrais que quand une coordonnées a déjà était saisi qu'il affiche un message d'erreur sur le joueur en question qui essaierai de saisir une coordonnée qui aurait déjà était saisi dans la partie. J'espere que mon exemple est assez compréhensible
0
yg_be Messages postés 22726 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 476
22 mars 2021 à 14:32
pourquoi la seconde partie de la ligne 196 est-elle en commentaire?
0
Ano75 > yg_be Messages postés 22726 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024
22 mars 2021 à 15:04
Parce-que justement au début je l’avais pas mis en commentaire mais ça me faisait une autre erreur car ça m’afficher le message comme quoi j’avais déjà saisi la coordonnées à chaque tour. Je sais que mon code est assez brouillon j’en suis vraiment désolé
0
yg_be Messages postés 22726 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 476 > Ano75
Modifié le 22 mars 2021 à 15:48
et ainsi?
if ((Montab[1, 1] != 'X') && (Montab[1, 1] != 'O'))
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
22 mars 2021 à 11:14
Bonjour

Maintenant que baladur a rendu ton code lisible, on peut commencer à essayer de t’aider.
Pour la suite,
  • va lire les instructions et le lien qu’il a ajouté à la fin de ta question
  • pense à le remercier de son intervention.


Pour ton problème, on voit (maintenant) que la méthode main n’est pas fermée (pas d’accolade fermante) quand tu écris la méthode suivante.
Je serais très surpris que ça compile ainsi, ce qui me donne à penser qu’il pourrait manquer du code
0
Bonjour,

j'ai bien était voir le lien.

Et l'accolade fermante se trouve en bas de mon code, en tout cas le code se compile bien mais j'ai toujours mon bug quand je saisi une coordonnée déjà saisi...
0
d'accord je savais pas merci :)
0
yg_be Messages postés 22726 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 476
22 mars 2021 à 16:01
à quoi sert la ligne 187?
0