Question pour mon projet puissance 4 ( Optimisation??)

Résolu
dulac1804 Messages postés 5 Date d'inscription jeudi 24 novembre 2011 Statut Membre Dernière intervention 9 décembre 2011 - 7 déc. 2011 à 13:51
dulac1804 Messages postés 5 Date d'inscription jeudi 24 novembre 2011 Statut Membre Dernière intervention 9 décembre 2011 - 9 déc. 2011 à 13:26
Bon voila je vous expose mon problème.

Je suis en train de faire Un puissance 4 en C# avec visual studio

Mais j'aimerais l'optimiser car beaucoup de copier coller de ligne de code :/

Pourriez vous m'aider ??

Voici le code a optimiser :

 // 4. Est-ce qu'il y a une ligne de 4 pièces de la même couleur
            for (int ligne = 0; ligne < nombreLignes; ligne++)
            {
                for (int colonne = 0; colonne < nombreColonnes; colonne++)
                {


                    pbox = matriceJeuEnCours[colonne, ligne];

                    if (pbox.BackColor == couleurCaseVide)
                        continue;

                    // ici, on est sûr qu'il y a une couleur
                    Color couleurPièceCourante = pbox.BackColor;

                    // est-ce qu'il y a 3 pions de la même couleur à droite de cette position ?
                    if (colonne <= nombreColonnes - 4)
                    {
                        // il est possible d'avoir une série de 4 à droite de cette position
                        if (matriceJeuEnCours[colonne + 1, ligne].BackColor == couleurPièceCourante)
                        {
                            if (matriceJeuEnCours[colonne + 2, ligne].BackColor == couleurPièceCourante)
                            {
                                if (matriceJeuEnCours[colonne + 3, ligne].BackColor == couleurPièceCourante)
                                {
                                    // un des deux joueurs a uen ligne horizontale et a gagné
                                    if (couleurPièceCourante == couleurJoueur1)
                                    {
                                        MessageBox.Show("Les jaunes ont gagné", "Félicitation", MessageBoxButtons.OK, MessageBoxIcon.Information);

                                    }
                                    else
                                    {
                                        MessageBox.Show("Les rouges ont gagné", "Félicitation", MessageBoxButtons.OK, MessageBoxIcon.Information);

                                    }
                                }


                            }

                        }


                    }
                    // est-ce qu'il y a 3 pions de la même couleur à droite de cette position ?
                    if (ligne <= nombreLignes - 4)
                    {
                        // il est possible d'avoir une série de 4 à droite de cette position
                        if (matriceJeuEnCours[colonne, ligne + 1].BackColor == couleurPièceCourante)
                        {
                            if (matriceJeuEnCours[colonne, ligne + 2].BackColor == couleurPièceCourante)
                            {
                                if (matriceJeuEnCours[colonne, ligne + 3].BackColor == couleurPièceCourante)
                                {
                                    // un des deux joueurs a uen ligne horizontale et a gagné
                                    if (couleurPièceCourante == couleurJoueur1)
                                    {
                                        MessageBox.Show("Les jaunes ont gagné", "Félicitation", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    }

                                    else
                                    {
                                        MessageBox.Show("Les rouges ont gagné", "Félicitation", MessageBoxButtons.OK, MessageBoxIcon.Information);

                                    }
                                }


                            }

                        }


                    }

                    if (ligne <= nombreLignes - 4 && colonne <= nombreColonnes - 4)
                    {
                        // il est possible d'avoir une série de 4 à droite de cette position
                        if (matriceJeuEnCours[colonne + 1, ligne + 1].BackColor == couleurPièceCourante)
                        {
                            if (matriceJeuEnCours[colonne + 2, ligne + 2].BackColor == couleurPièceCourante)
                            {
                                if (matriceJeuEnCours[colonne + 3, ligne + 3].BackColor == couleurPièceCourante)
                                {
                                    // un des deux joueurs a uen ligne horizontale et a gagné
                                    if (couleurPièceCourante == couleurJoueur1)
                                    {
                                        MessageBox.Show("Les jaunes ont gagné", "Félicitation", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    }

                                    else
                                    {
                                        MessageBox.Show("Les rouges ont gagné", "Félicitation", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    }
                                }


                            }

                        }


                    }

                    
                    // est-ce qu'il y a 3 pions de la même couleur à droite de cette position ?
                    if (ligne <= nombreLignes - 4 && colonne <= nombreColonnes - 4)
                    {
                        // il est possible d'avoir une série de 4 de gauche à droite de cette position en oblique
                        if (matriceJeuEnCours[colonne - 1, ligne + 1].BackColor == couleurPièceCourante)
                        {
                            if (matriceJeuEnCours[colonne - 2, ligne + 2].BackColor == couleurPièceCourante)
                            {
                                if (matriceJeuEnCours[colonne - 3, ligne + 3].BackColor == couleurPièceCourante)
                                {
                                    // un des deux joueurs a une ligne en oblique et a gagné
                                    if (couleurPièceCourante == couleurJoueur1)
                                    {
                                        MessageBox.Show("Les jaunes ont gagné", "Félicitation", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    }

                                    else
                                    {
                                        MessageBox.Show("Les rouges ont gagné", "Félicitation", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    }
                                }


                            }

                        }


                    }


                }
            }


Ceci est la vérification Des 4 pions alligner :-)

Merci d'avance :$

11 réponses

desperados27 Messages postés 121 Date d'inscription samedi 4 novembre 2006 Statut Membre Dernière intervention 1 juillet 2015
9 déc. 2011 à 12:27
Petite correction, tu as du remarquer je me suis trompé de réinitialisation de ta matrice. j'ai repris mon exemple au lieu de ta procédure

            if (bVerifGagne == true)
            {
                // Maintenant que l'état iVerif est assigné dans la boucle de vérification, tu peux l'utiliser comme ici !
                if (iVerifJoueur == 1) MessageBox.Show("Les jaunes ont gagné", "Félicitation", MessageBoxButtons.OK, MessageBoxIcon.Information);
                if (iVerifJoueur == 2) MessageBox.Show("Les rouges ont gagné", "Félicitation", MessageBoxButtons.OK, MessageBoxIcon.Information);

                for (int ligne = 0; ligne < nombreLignes; ligne++)
                {
                     for (int colonne = 0; colonne < nombreColonnes; colonne++)
                     {
                         PictureBox pbox = matriceJeuEnCours[colonne, ligne];
                         pbox.BackColor = couleurCaseVide;
                     }
                }

            }




Désolé du quadruple post :/, mais il fallait le préciser
3
desperados27 Messages postés 121 Date d'inscription samedi 4 novembre 2006 Statut Membre Dernière intervention 1 juillet 2015
7 déc. 2011 à 18:09
Bonjour,

if (colonne <= nombreColonnes - 4)
{
      // petite boucle qui compte le nombre d'objet de la même couleur
      int compteur = 0;
      for (int z = 1; z <=3; z++) 
      {
          if (matriceJeuEnCours[colonne + z, ligne].BackColor == couleurPièceCourante) 
          {
               compteur += 1;
          }
      }
      if (compteur == 3)
            // un des deux joueurs a uen ligne horizontale et a gagné
            if (couleurPièceCourante == couleurJoueur1)
            {
                 MessageBox.Show("Les jaunes ont gagné", "Félicitation", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                 MessageBox.Show("Les rouges ont gagné", "Félicitation", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }
                        
       }
}


Je ne sais pas ce que tu appelles 'optimiser' mais voilà une alternative à tes 'if'
J'ai jeté un coup d'oeil très rapide, il y a surement mieux à faire.

Applique ça aux trois parties...




Sébastien
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
7 déc. 2011 à 18:33
Salut,

comme desperados je pense pas que tu cherches à optimiser.
Si des lignes de code se répètent trop souvent il s'agit simplement de "factoriser" ;)
Mis à part le code que tu trouves redondant, as-tu des problèmes de perf ?
0
dulac1804 Messages postés 5 Date d'inscription jeudi 24 novembre 2011 Statut Membre Dernière intervention 9 décembre 2011
7 déc. 2011 à 19:34
Non pas spécialement C'est mon prof qui ma dit qu'il y avais moyen d'optimiser ... ( Je pense laisser comme sa tant que je mi retrouve c'est le principale :P ) Mais merci quand meme !! :D

Par contre je vien de remarquer un soucis a mon code que je n'arrive pas a regler :/ ( si vous pourrier m'aider se serais bien :P )

Alors voila quand j'ai 4 pions alligner sa marque bien que j'ai gagner mais une fois que on appuie sur ok bein sa continue ... :O et j'aimerais que le tableau se remete a zero Pour recommencer quoi

Voici a quoi j'avais penser qui ne fonctionne pas :

                    // est-ce qu'il y a 3 pions de la même couleur à droite de cette position ?
                    if (colonne <= nombreColonnes - 4)
                    {
                        // il est possible d'avoir une série de 4 à droite de cette position
                        if (matriceJeuEnCours[colonne + 1, ligne].BackColor == couleurPièceCourante)
                        {
                            if (matriceJeuEnCours[colonne + 2, ligne].BackColor == couleurPièceCourante)
                            {
                                if (matriceJeuEnCours[colonne + 3, ligne].BackColor == couleurPièceCourante)
                                {
                                    // un des deux joueurs a uen ligne horizontale et a gagné
                                    if (couleurPièceCourante == couleurJoueur1)
                                    {
                                        MessageBox.Show("Les jaunes ont gagné", "Félicitation", MessageBoxButtons.OK, MessageBoxIcon.Information);
// Moi j'ai penser a rajouter sa : 
 for (int ligne = 0; ligne < nombreLignes; ligne++)
            {
                for (int colonne = 0; colonne < nombreColonnes; colonne++)
                {
                    PictureBox pbox = matriceJeuEnCours[colonne, ligne];
                    pbox.BackColor = couleurCaseVide;
                }
            }

                                    }
                                    else
                                    {
                                        MessageBox.Show("Les rouges ont gagné", "Félicitation", MessageBoxButtons.OK, MessageBoxIcon.Information);


                                    }
                                }


                            }

                        }


                    }
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
desperados27 Messages postés 121 Date d'inscription samedi 4 novembre 2006 Statut Membre Dernière intervention 1 juillet 2015
7 déc. 2011 à 21:44
Ah oui en effet j'imagine que c'est un big copier coller sans comprendre ce qui se passe........
Si tu as un peu de temps... Tu peux utiliser le debug pas à pas de visual studio, mais là encore si tu ne sais pas l'utiliser c'est bête


Ah tu une procédure qui réinitialise ta matrice ?
tu l'applique à la fin de ce que tu viens de montrer..... et plop voilà.. j'imagine que l'affichage de la matrice est en relation avec cette 'matriceJeuEnCours'

            //J'imagine que c'est à peu de choses près déclaré comme ça (je ne me rappelle plus le nb de lignes et de colonnes mais peu importe
            
            int[,] matriceJeuEnCours = new int[6, 8]; // N'ecrit pas cette ligne. C'est juste pour savoir si cette matrice est déclarée comme ça quelquepart ?

            // Je parcour les lignes du tableau avec 'i'
            for (int i = 0; i < matriceJeuEnCours.GetLength(0); i++) //GetLength(0) c'est le nombre totzl d'élments dans la première dimension
            {
                //Je parcours les colonnes avec 'j'
                for (int j = 0; j < matriceJeuEnCours.GetLength(1); j++) //GetLength(1) c'est le nombre de colonnes dans la seconde dimension
                {
                    //Je met à 0 la valeur en supposant que 0 = case vide
                    matriceJeuEnCours[i,j] = 0;
                }
            }




Nous n'avons pas assez d'infos sur ton code
Je n'ai fait qu'une supposition seulement si c'est ta matrice qui est utilisée pour afficher le tableau et que 0 est la valeur casevide.

Après ça, je n'aide plus. Il faut vraiment que tu regarde chaque ligne du code pour voir ce qu'elle fait.
Bonne chance :)



Sébastien
0
dulac1804 Messages postés 5 Date d'inscription jeudi 24 novembre 2011 Statut Membre Dernière intervention 9 décembre 2011
7 déc. 2011 à 21:54
non le code a été fais par moi même ( avec un peut d'aide de mon prof c'est tout :) )

voici la declaration de la matrice :

 // on déclare les variables qui seront accessibles à toutes les fonctions.
        int nombreLignes = 6;
        int nombreColonnes = 7;
        PictureBox [,] matriceJeuEnCours;

        Color couleurCaseVide = Color.Gray;
        Color couleurJoueur1 = Color.Yellow;
        Color couleurJoueur2 = Color.Red;

        int prochainJoueur;
        
        int score1 = 0;
        int score2 = 0;


et la création :

 
            // on crée la matrice.
            matriceJeuEnCours = new PictureBox[nombreColonnes, nombreLignes];
0
dulac1804 Messages postés 5 Date d'inscription jeudi 24 novembre 2011 Statut Membre Dernière intervention 9 décembre 2011
7 déc. 2011 à 21:58
Tu veux peux etre le code complet pour t'y retrouver ??

J'ai fais un bouton "New Game" ou maj de la matrice ce fait met le code incorporer dedans n'est pas accepter :/

Le voici :
 for (int ligne = 0; ligne < nombreLignes; ligne++)
            {
                for (int colonne = 0; colonne < nombreColonnes; colonne++)
                {
                    PictureBox pbox = matriceJeuEnCours[colonne, ligne];
                    pbox.BackColor = couleurCaseVide;
                }
            }


Celui ci fonctionne quand j'utilise le bouton nouveau jeu
Mais pas quand je le met dans le If :/
0
desperados27 Messages postés 121 Date d'inscription samedi 4 novembre 2006 Statut Membre Dernière intervention 1 juillet 2015
7 déc. 2011 à 22:35
Hmm, désolé si tu as fait ce code toi même c'est cool alors.

Ta réinitialisation tu dois la sortir de ta grande boucle :

 for (int ligne = 0; ligne < nombreLignes; ligne++)
          {
           ....


          }

          for (int ligne = 0; ligne < nombreLignes; ligne++)
            {
                for (int colonne = 0; colonne < nombreColonnes; colonne++)
                {
                    PictureBox pbox = matriceJeuEnCours[colonne, ligne];
                    pbox.BackColor = couleurCaseVide;
                }
            }


Tu ne dois jamais réinitialiser quand la matrice est déjà utilisée dans une boucle.
Tu fais juste une boucle à part. Après ta boucle de vérification si tu as gagné.

Mais tu vas me demander "Comment je fais pour savoir si 'gagné' est vérifié ?" ! Eh bien je dis : 'flag' (drapeau)
En gros tu indique à une variable un etat qui te permettera de l'utiliser plus tard. La plupart des flags sont booléens, mais tu peux utiliser des entiers (comme j'ai fait pour optimiser ton code dans ma boucle).


Ici c'est un exemple parfait :


          
           bool bVerifGagne = false; //Tu crée ce flag, un booléen qui sera associé au fait que tu as gagné (donc il est sur mis sur false puisque pour le moment personne n'a gagné) (le 'b' juste au début du nom de la variable indique que c'est un booléen, je trouve que c'est joli mais pas obligatoire bien sur)
            for (int ligne = 0; ligne < nombreLignes; ligne++)
            {
                for (int colonne = 0; colonne < nombreColonnes; colonne++)
                {

                    pbox = matriceJeuEnCours[colonne, ligne];

                    if (pbox.BackColor == couleurCaseVide)
                        continue;

                    // ici, on est sûr qu'il y a une couleur
                    Color couleurPièceCourante = pbox.BackColor;

                    // est-ce qu'il y a 3 pions de la même couleur à droite de cette position ?
                    if (colonne <= nombreColonnes - 4)
                    {
                        // il est possible d'avoir une série de 4 à droite de cette position
                        if (matriceJeuEnCours[colonne + 1, ligne].BackColor == couleurPièceCourante)
                        {
                            if (matriceJeuEnCours[colonne + 2, ligne].BackColor == couleurPièceCourante)
                            {
                                if (matriceJeuEnCours[colonne + 3, ligne].BackColor == couleurPièceCourante)
                                {
                                    // un des deux joueurs a uen ligne horizontale et a gagné
                                    if (couleurPièceCourante == couleurJoueur1)
                                    {
                                        MessageBox.Show("Les jaunes ont gagné", "Félicitation", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                        bVerifGagne = true; // eh oui maintenant que c'est gagné, on enregistre cet état ! A reproduire pour chacune des phases de vérification
                                    }
                                    else
                                    {
                                        MessageBox.Show("Les rouges ont gagné", "Félicitation", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                        bVerifGagne = true;
                                    }
                                }


                            }

                        }


                    }
                    // est-ce qu'il y a 3 pions de la même couleur à droite de cette position ?
                    if (ligne <= nombreLignes - 4)
                    {
                        // il est possible d'avoir une série de 4 à droite de cette position
                        if (matriceJeuEnCours[colonne, ligne + 1].BackColor == couleurPièceCourante)
                        {
                            if (matriceJeuEnCours[colonne, ligne + 2].BackColor == couleurPièceCourante)
                            {
                                if (matriceJeuEnCours[colonne, ligne + 3].BackColor == couleurPièceCourante)
                                {
                                    // un des deux joueurs a uen ligne horizontale et a gagné
                                    if (couleurPièceCourante == couleurJoueur1)
                                    {
                                        bVerifGagne = true; // Que tu mettes avant ou après la ComboBox n'aura pas d'importance
                                        MessageBox.Show("Les jaunes ont gagné", "Félicitation", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    }

                                    else
                                    {
                                        MessageBox.Show("Les rouges ont gagné", "Félicitation", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                        bVerifGagne = true; // Mais en général il faut touours garder le même ordre (choisit ! sinon ton prof va te le faire remarquer)
                                    }
                                }


                            }

                        }


                    }

                    if (ligne <= nombreLignes - 4 && colonne <= nombreColonnes - 4)
                    {
                        // il est possible d'avoir une série de 4 à droite de cette position
                        if (matriceJeuEnCours[colonne + 1, ligne + 1].BackColor == couleurPièceCourante)
                        {
                            if (matriceJeuEnCours[colonne + 2, ligne + 2].BackColor == couleurPièceCourante)
                            {
                                if (matriceJeuEnCours[colonne + 3, ligne + 3].BackColor == couleurPièceCourante)
                                {
                                    // un des deux joueurs a uen ligne horizontale et a gagné
                                    if (couleurPièceCourante == couleurJoueur1)
                                    {
                                        MessageBox.Show("Les jaunes ont gagné", "Félicitation", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                        bVerifGagne = true;
                                    }

                                    else
                                    {
                                        MessageBox.Show("Les rouges ont gagné", "Félicitation", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                        bVerifGagne = true;
                                    }
                                }


                            }

                        }


                    }

                    
                    // est-ce qu'il y a 3 pions de la même couleur à droite de cette position ?
                    if (ligne <= nombreLignes - 4 && colonne <= nombreColonnes - 4)
                    {
                        // il est possible d'avoir une série de 4 de gauche à droite de cette position en oblique
                        if (matriceJeuEnCours[colonne - 1, ligne + 1].BackColor == couleurPièceCourante)
                        {
                            if (matriceJeuEnCours[colonne - 2, ligne + 2].BackColor == couleurPièceCourante)
                            {
                                if (matriceJeuEnCours[colonne - 3, ligne + 3].BackColor == couleurPièceCourante)
                                {
                                    // un des deux joueurs a une ligne en oblique et a gagné
                                    if (couleurPièceCourante == couleurJoueur1)
                                    {
                                        MessageBox.Show("Les jaunes ont gagné", "Félicitation", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                        bVerifGagne = true;
                                    }

                                    else
                                    {
                                        MessageBox.Show("Les rouges ont gagné", "Félicitation", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                        bVerifGagne = true;
                                    }
                                }
                            }
                        }
                    }
                }
            }

          for (int ligne = 0; ligne < nombreLignes; ligne++)
            {
                for (int colonne = 0; colonne < nombreColonnes; colonne++)
                {
                    PictureBox pbox = matriceJeuEnCours[colonne, ligne];
                    pbox.BackColor = couleurCaseVide;
                }
            }


Il me semble que ça doit fonctionner
0
desperados27 Messages postés 121 Date d'inscription samedi 4 novembre 2006 Statut Membre Dernière intervention 1 juillet 2015
7 déc. 2011 à 22:38
j'ai été trop vite j'ai oublié la dernière étape !!!
Pour ta boucle de réinitialisation :

 
        if (bVerifGagne == true) //Bien sûr tu dois mettre la condition du booléen qui a enregistré l'état gagné ! (sinon il s'effacera à chaque fois)
        {
            for (int ligne = 0; ligne < nombreLignes; ligne++)
            {
                for (int colonne = 0; colonne < nombreColonnes; colonne++)
                {
                    PictureBox pbox = matriceJeuEnCours[colonne, ligne];
                    pbox.BackColor = couleurCaseVide;
                }
            }
         }
0
desperados27 Messages postés 121 Date d'inscription samedi 4 novembre 2006 Statut Membre Dernière intervention 1 juillet 2015
7 déc. 2011 à 23:17
            bool bVerifGagne = false;
            bool iVerifJoueur = false; // 'i' pour integer
            for (int ligne = 0; ligne < nombreLignes; ligne++)
            {
                for (int colonne = 0; colonne < nombreColonnes; colonne++)
                {
                    pbox = matriceJeuEnCours[colonne, ligne];
                    if (pbox.BackColor == couleurCaseVide) continue;
                    Color couleurPièceCourante = pbox.BackColor;

                    if (colonne <= nombreColonnes - 4)
                    {
                        int compteur = 0; //Tu mets ce flag qui sera indexé sur le nombre de pions de la même couleur trouvée !!
                        for (int z = 1; z <=3; z++) //Boucle de 1 à 3 car 3 pièces à vérifier...
                        {
                             if (matriceJeuEnCours[colonne + z, ligne].BackColor == couleurPièceCourante) On vérifie chaque pièce selon l'indice 'z'
                             {
                                   compteur += 1; // On incrémente le compteur tant que les couleurs sont les mêmes
                             }
                        }
                        if (compteur 3) // Si compteur 3 alors il a trouvé 3 autres pièces de même couleur
                        {
                             bVerifGagne = true;
                             if (couleurPièceCourante couleurJoueur1) iVerifJoueur 1;
                             else iVerifJoueur = 2;
                         }
                     }


                    // est-ce qu'il y a 3 pions de la même couleur à droite de cette position ?
                    if (ligne <= nombreLignes - 4)
                    {
                        int compteur = 0; //Tu mets ce flag qui sera indexé sur le nombre de pions de la même couleur trouvée !!
                        for (int z = 1; z <=3; z++) //Boucle de 1 à 3 car 3 pièces à vérifier...
                        {
                             if (matriceJeuEnCours[colonne, ligne + z].BackColor == couleurPièceCourante) On vérifie chaque pièce selon l'indice 'z'
                             {
                                   compteur += 1; // On incrémente le compteur tant que les couleurs sont les mêmes
                             }
                        }
                        if (compteur 3) // Si compteur 3 alors il a trouvé 3 autres pièces de même couleur
                        {
                             bVerifGagne = true;
                             if (couleurPièceCourante couleurJoueur1) iVerifJoueur 1;
                             else iVerifJoueur = 2;
                         }
                     }

                    if (ligne <= nombreLignes - 4 && colonne <= nombreColonnes - 4)
                    {
                        int compteur = 0; //Tu mets ce flag qui sera indexé sur le nombre de pions de la même couleur trouvée !!
                        for (int z = 1; z <=3; z++) //Boucle de 1 à 3 car 3 pièces à vérifier...
                        {
                             if (matriceJeuEnCours[colonne + z, ligne + z].BackColor == couleurPièceCourante) On vérifie chaque pièce selon l'indice 'z'
                             {
                                   compteur += 1; // On incrémente le compteur tant que les couleurs sont les mêmes
                             }
                        }
                        if (compteur 3) // Si compteur 3 alors il a trouvé 3 autres pièces de même couleur
                        {
                             bVerifGagne = true;
                             if (couleurPièceCourante couleurJoueur1) iVerifJoueur 1;
                             else iVerifJoueur = 2;
                         }
                     }

                    
                    // est-ce qu'il y a 3 pions de la même couleur à droite de cette position ?
                    if (ligne <= nombreLignes - 4 && colonne <= nombreColonnes - 4)
                    {
                        int compteur = 0; //Tu mets ce flag qui sera indexé sur le nombre de pions de la même couleur trouvée !!
                        for (int z = 1; z <=3; z++) //Boucle de 1 à 3 car 3 pièces à vérifier...
                        {
                             if (matriceJeuEnCours[colonne - z, ligne + z].BackColor == couleurPièceCourante) On vérifie chaque pièce selon l'indice 'z'
                             {
                                   compteur += 1; // On incrémente le compteur tant que les couleurs sont les mêmes
                             }
                        }
                        if (compteur 3) // Si compteur 3 alors il a trouvé 3 autres pièces de même couleur
                        {
                             bVerifGagne = true;
                             if (couleurPièceCourante couleurJoueur1) iVerifJoueur 1;
                             else iVerifJoueur = 2;
                         }
                     }
                }
            }

            if (bVerifGagne == true)
            {
                // Maintenant que l'état iVerif est assigné dans la boucle de vérification, tu peux l'utiliser comme ici !
                if (iVerifJoueur == 1) MessageBox.Show("Les jaunes ont gagné", "Félicitation", MessageBoxButtons.OK, MessageBoxIcon.Information);
                if (iVerifJoueur == 2) MessageBox.Show("Les rouges ont gagné", "Félicitation", MessageBoxButtons.OK, MessageBoxIcon.Information);

                for (int i = 0; i < matriceJeuEnCours.GetLength(0); i++)
                {
                    for (int j = 0; j < matriceJeuEnCours.GetLength(1); j++)
                    {
                        matriceJeuEnCours[i, j] = 0;
                    }
                }
            }



Là je pense que ton prof sera heureux.
Essaye de comprendre le code et sache le réexpliquer sinon il va te griller ;)
0
dulac1804 Messages postés 5 Date d'inscription jeudi 24 novembre 2011 Statut Membre Dernière intervention 9 décembre 2011
9 déc. 2011 à 13:26
je te remerci desperados

Ton code m'a beaucoup aider :D

Pour que le jeux reste fias par moi meme je n'ai pas recopier ton code meme si il me semble tres bon !!

POur ma part j'ai faiit comme ceci :

private bool VérifierLigneGagnanteHorizontale(int colonne, int ligne)
        {
            // on vérifie à partir de la position [colonne, ligne] vers la droite
            if (colonne > nombreColonnes - 4)
            {
                // on est trop à droite, il ne peut y avoir de solution à partir de cette position
                return false;
            }

            // on fait varier un indice de décalage de 1 à 3
            for (int décalage = 1; décalage <= 3; décalage++)
            {
                // on regarde si la pièce décalée à droite a la même couleur que celle à la position de départ
                if (matriceJeuEnCours[colonne + décalage, ligne].BackColor != matriceJeuEnCours[colonne, ligne].BackColor)
                    // si ce n'est pas le cas, il n'y a pas de solution depuis cette position
                    return false;
            }

            // on a pas trouvé de pièces de couleurs différente à côté de la position de départ
            // ==> elles sont toutes de la même couleur et on renvoie true
            return true;
        }

        private bool VérifierLigneGagnanteVerticale(int colonne, int ligne)
        {
            // on vérifie à partir de la position [colonne, ligne] vers bas
            if (ligne > nombreLignes - 4)
            {
                // on est trop en bas, il ne peut y avoir de solution à partir de cette position
                return false;
            }

            // on fait varier un indice de décalage de 1 à 3
            for (int décalage = 1; décalage <= 3; décalage++)
            {
                // on regarde si la pièce décalée en bas a la même couleur que celle à la position de départ
                if (matriceJeuEnCours[colonne, ligne+décalage].BackColor != matriceJeuEnCours[colonne, ligne].BackColor)
                    // si ce n'est pas le cas, il n'y a pas de solution depuis cette position
                    return false;
            }

            // on a pas trouvé de pièces de couleurs différente en dessous de la position de départ
            // ==> elles sont toutes de la même couleur et on renvoie true
            return true;
        }

        private bool VérifierLigneGagnanteDiagonaleBasGauche(int colonne, int ligne)
        {
            // on vérifie à partir de la position [colonne, ligne] vers la gauche et vers le bas
            if (colonne < nombreColonnes - 4 || ligne > nombreLignes - 4)
            {
                // on est trop à gauche ou trop bas, il ne peut y avoir de solution à partir de cette position
                return false;
            }

            // on fait varier un indice de décalage de 1 à 3
            for (int décalage = 1; décalage <= 3; décalage++)
            {
                // on regarde si la pièce décalée en bas à gauche a la même couleur que celle à la position de départ
                if (matriceJeuEnCours[colonne - décalage, ligne + décalage].BackColor != matriceJeuEnCours[colonne, ligne].BackColor)
                    // si ce n'est pas le cas, il n'y a pas de solution depuis cette position
                    return false;
            }

            // on a pas trouvé de pièces de couleurs différente en bas à gauche de la position de départ
            // ==> elles sont toutes de la même couleur et on renvoie true
            return true;
        }
        
        private bool VérifierLigneGagnanteDiagonaleBasDroite(int colonne, int ligne)
        {
            // on vérifie à partir de la position [colonne, ligne] vers la droite et vers le bas
            if (colonne > nombreColonnes - 4 || ligne > nombreLignes - 4)
            {
                // on est trop à droite ou trop bas, il ne peut y avoir de solution à partir de cette position
                return false;
            }

            // on fait varier un indice de décalage de 1 à 3
            for (int décalage = 1; décalage <= 3; décalage++)
            {
                // on regarde si la pièce décalée en bas à gauche a la même couleur que celle à la position de départ
                if (matriceJeuEnCours[colonne + décalage, ligne + décalage].BackColor != matriceJeuEnCours[colonne, ligne].BackColor)
                    // si ce n'est pas le cas, il n'y a pas de solution depuis cette position
                    return false;
            }

            // on a pas trouvé de pièces de couleurs différente en bas à gauche de la position de départ
            // ==> elles sont toutes de la même couleur et on renvoie true
            return true;
        }

        
        /// <summary>
        /// cherche la première ligne en partant du bas sur une certaine colonne pour laquelle
        /// la case est vide
        /// </summary>
        /// la colonne sur laquelle on cherche une case vide


        /// <returns>indice de la première ligne avec une case vide, ou -1 si la colonne est pleine</returns>


Voila pour la vérification :-)

Voici se que donne le jeux :-)
[www.megaupload.com/?d=OY91ZO8N www.megaupload.com/?d=OY91ZO8N]

Dite moi se que vous en penser Svp
si vous avez des idées pour amelioré le jeux je suis preneur :P
0
Rejoignez-nous