public FormSub1() { InitializeComponent(); Demarrage = true; BTN_Ronde_suivante.Hide(); }
private void BTN_Ronde_suivante_Click(object sender, EventArgs e) { // Ronde maximale int Ronde_Max = Tournoi.Ronde_Max(); // Pirse du numero de tête de série du joueur int TeteDeSerie_Blanc, TeteDeSerie_Noir; // Prise du résultat de chaque joueur double ResultatBlanc, ResultatNoir; int Indice_Colonne = 0; // Variable de test int OK = 0, OK_for_MAJ = 0; // Mise à jour des résultats Separation = Nombre_de_Joueurs / 2; Couleur = 1; // Test pour voir si tout les champs sont remplis for (Echiquier_Resultat = 0; Echiquier_Resultat < Separation; Echiquier_Resultat++) { // Mets les resultats dans les strings try { string resblanc = DGW_Ronde1.Rows[Echiquier_Resultat].Cells[5].Value.ToString(); string resnoir = DGW_Ronde1.Rows[Echiquier_Resultat].Cells[7].Value.ToString(); // Incrémente la valeur seulement si les champs ne sont pas vides if (resblanc != "" && resnoir != "") { OK++; } } catch (NullReferenceException) { // Mettre un message d'erreur MessageBox.Show("Un champ non rempli à été détécté (peut s'afficher plusieurs fois si plusieurs champs vides sont détéctés !)"); } } // Si OK est égale à Echiquier_Resultat, c'est qu'aucun champ n'est vide if (Echiquier_Resultat == OK) { // On peut commencer à mettre à jour OK_for_MAJ = 1; } // Effectuer seulement si la mise à jour n'est pas faite et que le tampon de vérification est ok if ((MAJ == 0) && (OK_for_MAJ == 1)) { // S'il s'agit de la première ronde if (Ronde == 1) { // Reprendre les joueurs des cellules et y mettre à jour leurs résultats for (Echiquier_Resultat = 0; Echiquier_Resultat < Separation; Echiquier_Resultat++) { if (Couleur == 1) { // Prise des n° de tête de série TeteDeSerie_Blanc = Participants[Echiquier_Resultat].n_Depart_Du_JoueurLoad(); TeteDeSerie_Noir = Participants[Echiquier_Resultat + Separation].n_Depart_Du_JoueurLoad(); // Chargement du résultat inscrit dans le tableau string resultat_blanc = DGW_Ronde1.Rows[Indice_Colonne].Cells[5].Value.ToString(); // Prise du résultat if (resultat_blanc == "1") { ResultatBlanc = 1; ResultatNoir = 0; } else if (resultat_blanc == "0") { ResultatBlanc = 0; ResultatNoir = 1; } else { ResultatBlanc = 0.5; ResultatNoir = 0.5; } // Mise à jour des éléments du joueur (ronde, adversaire, couleur, résultat) Participants[Echiquier_Resultat].Stat_Ronde(Ronde, TeteDeSerie_Noir, 1, ResultatBlanc); Participants[Separation + Echiquier_Resultat].Stat_Ronde(Ronde, TeteDeSerie_Blanc, 0, ResultatNoir); Couleur = 0; Indice_Colonne++; } else { // Chargement des têtes de séries TeteDeSerie_Blanc = Participants[Echiquier_Resultat + Separation].n_Depart_Du_JoueurLoad(); TeteDeSerie_Noir = Participants[Echiquier_Resultat].n_Depart_Du_JoueurLoad(); // Chargement du résultat inscrit dans le tableau string resultat_blanc = DGW_Ronde1.Rows[Indice_Colonne].Cells[5].Value.ToString(); // Prise du résultat if (resultat_blanc == "1") { ResultatBlanc = 1; ResultatNoir = 0; } else if (resultat_blanc == "0") { ResultatBlanc = 0; ResultatNoir = 1; } else { ResultatBlanc = 0.5; ResultatNoir = 0.5; } // Mise à jour des éléments du joueur (ronde, adversaire, couleur, résultat) Participants[Echiquier_Resultat + Separation].Stat_Ronde(Ronde, TeteDeSerie_Noir, 1, ResultatBlanc); Participants[Echiquier_Resultat].Stat_Ronde(Ronde, TeteDeSerie_Blanc, 0, ResultatNoir); Couleur = 1; Indice_Colonne++; } } } // Dans le cas d'une autre ronde else { // Reprendre les joueurs des cellules et y mettre à jour leurs résultats for (Echiquier_Resultat = 0; Echiquier_Resultat < (Nombre_de_Joueurs - 1); Echiquier_Resultat = Echiquier_Resultat + 2) { // Prise des n° de tête de série TeteDeSerie_Blanc = Participants[Echiquier_Resultat].n_Depart_Du_JoueurLoad(); TeteDeSerie_Noir = Participants[Echiquier_Resultat + 1].n_Depart_Du_JoueurLoad(); // Chargement du résultat inscrit dans le tableau string resultat_blanc = DGW_Ronde1.Rows[Indice_Colonne].Cells[5].Value.ToString(); // Prise du résultat if (resultat_blanc == "1") { ResultatBlanc = 1; ResultatNoir = 0; } else if (resultat_blanc == "0") { ResultatBlanc = 0; ResultatNoir = 1; } else { ResultatBlanc = 0.5; ResultatNoir = 0.5; } // Mise à jour des éléments du joueur (ronde, adversaire, couleur, résultat) Participants[Echiquier_Resultat].Stat_Ronde(Ronde, TeteDeSerie_Noir, 1, ResultatBlanc); Participants[Echiquier_Resultat + 1].Stat_Ronde(Ronde, TeteDeSerie_Blanc, 0, ResultatNoir); Indice_Colonne++; } } MessageBox.Show("Test : MAJ Réussie"); // Cacher le bouton "ronde suivante" et réafficher le bouton "générer ronde" pour pouvoir // générer la ronde suivante BTN_Ronde_suivante.Hide(); // Effacer tout le tableau DGW_Ronde1.Rows.Clear(); // Ajouter une ronde et repermettre la mise à jour Ronde++; // Si c'était la dernière ronde (dès que la ronde actuelle dépasse le nombre de rondes maximum) if (Ronde > Ronde_Max) { MessageBox.Show("Le tournoi est terminé !\r\nCliquer sur <Classement> pour voir le classement"); } else { BTN_GenRondes.Show(); } // Permet la remise à jour des rondes MAJ = 1; } else { // Si la mise à jour a déjà été faite if (MAJ == 1) { MessageBox.Show("Mise à jour déjà éffectuée"); } // Sinon (donc si le tampon de mise à jour a été refusé else { MessageBox.Show("Veuillez remplir tout les champs SVP !"); } } }
// Methode pour la gestion des rondes public void Genere_Ronde() { // Pirse du numero de tête de série du joueur int TeteDeSerie_Blanc, TeteDeSerie_Noir; // Prise du nombre de joueurs ayant le même nombre de points int Nb_Joueurs_Meme_Points = 0; // Pour détécter le nombre d'échiquier à initialisé (dans le cas où il y a plusieurs rondes) int Pointeur_Echiquier_Debut = 0; int Pointeur_Echiquier_Fin = 0; int Echiquier = 0; // Pour la boucle for double i; int j; // MAJ de la ronde jouee Tournoi.MAJ_Ronde_Jouee(Ronde); Ronde = Tournoi.Ronde_Jouee(); // Prise de la liste de depart Participants = Tournoi.ChargerListe(); // Prise du nombre de joueur Nombre_de_Joueurs = Tournoi.Joueurs_Totaux(); // Si c'est la première ronde, il y a besoin de moins d'étapes (pas de couleurs, pas d'adversaires, 1ère ronde vérouillée) if (Ronde == 1) { // Etape 1 : séparer en deux la liste de départ Separation = Nombre_de_Joueurs / 2; // Etape 2 : gérer la ronde de départ for (Init_Echiquier = 0; Init_Echiquier < Separation; Init_Echiquier++) { if (Couleur == 1) { // Chargement des têtes de séries TeteDeSerie_Blanc = Participants[Init_Echiquier].n_Depart_Du_JoueurLoad(); TeteDeSerie_Noir = Participants[Init_Echiquier + Separation].n_Depart_Du_JoueurLoad(); string[] row = new string[] { (Init_Echiquier + 1).ToString(), TeteDeSerie_Blanc.ToString(), Participants[Init_Echiquier].nom + " " + Participants[Init_Echiquier].prenom, Participants[Init_Echiquier].Titre, "(0)", "", "-", "", TeteDeSerie_Noir.ToString(), Participants[Separation + Init_Echiquier].nom + " " + Participants[Separation + Init_Echiquier].prenom, Participants[Separation + Init_Echiquier].Titre, "(0)" }; DGW_Ronde1.Rows.Add(row); Couleur = 0; } else { // Chargement des têtes de séries TeteDeSerie_Blanc = Participants[Init_Echiquier + Separation].n_Depart_Du_JoueurLoad(); TeteDeSerie_Noir = Participants[Init_Echiquier].n_Depart_Du_JoueurLoad(); string[] row = new string[] { (Init_Echiquier + 1).ToString(), TeteDeSerie_Blanc.ToString(), Participants[Separation + Init_Echiquier].nom + " " + Participants[Separation + Init_Echiquier].prenom, Participants[Separation + Init_Echiquier].Titre, "(0)", "", "-", "", TeteDeSerie_Noir.ToString(), Participants[Init_Echiquier].nom + " " + Participants[Init_Echiquier].prenom, Participants[Init_Echiquier].Titre, "(0)" }; DGW_Ronde1.Rows.Add(row); Couleur = 1; } } } // Mais si il y a déjà eu une ronde jouée, il va falloir traité plus de choses else { // Etape 1 : Trier le nombre de joueurs selon leurs points TriGesRonde(Participants, Ronde, Nombre_de_Joueurs); // Etape 2 : Compter le nombre de joueurs ayant le même nombre de points en partant par le nombre de points maximum for (i = (Ronde - 1); i >= 0; i = i - 0.5) { // Traitement n°1 : Les joueurs ayant le maximum de points // ... dernier traitement : Les joueurs ayant le minimum de points for (j = 0; j < Nombre_de_Joueurs; j++) { // Calcul du nombre de joueurs ayant le même nombre de points if (Participants[j].PointsJoueur() == i) { Nb_Joueurs_Meme_Points++; } } // Il y a traitement d'information que s'il y a au moins 1 joueur avec le nombre de poitns requis if (Nb_Joueurs_Meme_Points > 0) { // Ensuite, pour la première gestion des rondes, on effectue la même chose que pour la première ronde Separation = Nb_Joueurs_Meme_Points / 2; // Dans le cas ou le nombre de joueurs est pair if ((Nb_Joueurs_Meme_Points % 2) == 0) { // Chargement du nombre d'échiquier à initialiser Pointeur_Echiquier_Fin = Pointeur_Echiquier_Fin + Separation; // Gestion des rondes for (Init_Echiquier = Pointeur_Echiquier_Debut; Init_Echiquier < Pointeur_Echiquier_Fin; Init_Echiquier++) { // Chargement des têtes de séries TeteDeSerie_Blanc = Participants[Pointeur_Echiquier_Debut].n_Depart_Du_JoueurLoad(); TeteDeSerie_Noir = Participants[Pointeur_Echiquier_Debut + 1].n_Depart_Du_JoueurLoad(); string[] row = new string[] { (Echiquier + 1).ToString(), TeteDeSerie_Blanc.ToString(), Participants[Pointeur_Echiquier_Debut].nom + " " + Participants[Pointeur_Echiquier_Debut].prenom, Participants[Pointeur_Echiquier_Debut].Titre, "(" + Participants[Pointeur_Echiquier_Debut].PointsJoueur() + ")", "", "-", "", TeteDeSerie_Noir.ToString(), Participants[Pointeur_Echiquier_Debut + 1].nom + " " + Participants[Pointeur_Echiquier_Debut + 1].prenom, Participants[Pointeur_Echiquier_Debut + 1].Titre, "(" + Participants[Pointeur_Echiquier_Debut + 1].PointsJoueur() + ")" }; DGW_Ronde1.Rows.Add(row); // Incrémenataion du pointeur de l'échiquier DE DEUX (car un échiquier = deux joueurs) Pointeur_Echiquier_Debut = Pointeur_Echiquier_Debut + 2; // Incrémentation pour afficher le bon échiquier Echiquier++; } // Reinitialise les pointeurs d'échiquiers Pointeur_Echiquier_Fin = Pointeur_Echiquier_Debut; // Remise à 0 des joueurs ayant le même nombre de points Nb_Joueurs_Meme_Points = 0; } // Dans le cas ou le nombre de joueur est impair else { // Chargement du nombre d'échiquier à initialiser + 1 avec un joueur ayant le nombre de points inférieur Pointeur_Echiquier_Fin = Pointeur_Echiquier_Fin + Separation + 1; // Gestion des rondes for (Init_Echiquier = Pointeur_Echiquier_Debut; Init_Echiquier < Pointeur_Echiquier_Fin; Init_Echiquier++) { // Chargement des têtes de séries TeteDeSerie_Blanc = Participants[Pointeur_Echiquier_Debut].n_Depart_Du_JoueurLoad(); TeteDeSerie_Noir = Participants[Pointeur_Echiquier_Debut + 1].n_Depart_Du_JoueurLoad(); string[] row = new string[] { (Echiquier + 1).ToString(), TeteDeSerie_Blanc.ToString(), Participants[Pointeur_Echiquier_Debut].nom + " " + Participants[Pointeur_Echiquier_Debut].prenom, Participants[Pointeur_Echiquier_Debut].Titre, "(" + Participants[Pointeur_Echiquier_Debut].PointsJoueur() + ")", "", "-", "", TeteDeSerie_Noir.ToString(), Participants[Pointeur_Echiquier_Debut + 1].nom + " " + Participants[Pointeur_Echiquier_Debut + 1].prenom, Participants[Pointeur_Echiquier_Debut + 1].Titre, "(" + Participants[Pointeur_Echiquier_Debut + 1].PointsJoueur() + ")" }; DGW_Ronde1.Rows.Add(row); // Incrémenataion du pointeur de l'échiquier DE DEUX (car un échiquier = deux joueurs) Pointeur_Echiquier_Debut = Pointeur_Echiquier_Debut + 2; // Incrémentation pour afficher le bon échiquier Echiquier++; } // Reinitialise les pointeurs d'échiquiers Pointeur_Echiquier_Fin = Pointeur_Echiquier_Debut; // Remise à -1 des joueurs ayant le même nombre de points (pour retirer un joueur avec le nombre de points inférieur) Nb_Joueurs_Meme_Points = -1; } } } } // Faire disparaitre le bouton "générer ronde" et afficher le bouton "ronde suivante" BTN_GenRondes.Hide(); BTN_Ronde_suivante.Show(); MAJ = 0; }