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; } } }
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); } } }
// 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); } } } } }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question//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; } }
// 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;
// on crée la matrice. matriceJeuEnCours = new PictureBox[nombreColonnes, nombreLignes];
for (int ligne = 0; ligne < nombreLignes; ligne++) { for (int colonne = 0; colonne < nombreColonnes; colonne++) { PictureBox pbox = matriceJeuEnCours[colonne, ligne]; pbox.BackColor = couleurCaseVide; } }
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; } }
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; } }
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; } } }
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; } } }
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>