private void btn_addition_joueur_Click(object sender, EventArgs e) { Participant = Tournoi.ChargerListe(); Nom = TXT_NAME.Text; Prenom = TXT_SURNAME.Text; Club = TXT_CLUB.Text; Titre = CBO_Titres.Text; // Vérifie que le champ ELO est bien un chiffre entier if (int.TryParse(TXT_ELO.Text, out ELO) == true) { // Pas plus que 3'000 (le champion du monde à 2884 actuellement ;)) if (ELO > 3000) { ELO = 3000; MessageBox.Show("Valeur ELO fixée au seuil de 3'000 !", "Enregistrement des joueurs", MessageBoxButtons.OK, MessageBoxIcon.Information); } // Minimum de 100 (un peu de respect quand même) if (ELO < 100) { ELO = 100; MessageBox.Show("Valeur ELO fixée au seuil de 100 !", "Enregistrement des joueurs", MessageBoxButtons.OK, MessageBoxIcon.Information); } Participant.Add(new Joueur(Nom, Prenom, Club, ELO, Titre)); string[] row = new string[] { (Nombre_de_Joueurs + 1).ToString(), Participant[Nombre_de_Joueurs].nom, Participant[Nombre_de_Joueurs].prenom, Participant[Nombre_de_Joueurs].club, Participant[Nombre_de_Joueurs].ELO.ToString(), Participant[Nombre_de_Joueurs].Titre }; DGV_LDD.Rows.Add(row); // Clear les champs de texte TXT_NAME.Clear(); TXT_SURNAME.Clear(); TXT_CLUB.Clear(); TXT_ELO.Clear(); // Retour sur le premier champ du combobox this.CBO_Titres.SelectedIndex = 0; // Il faudra trier Tri_Fait = 0; // MAJ des joueurs de tournoi Nombre_de_Joueurs = Tournoi.Joueurs_Totaux(); Nombre_de_Joueurs++; Tournoi.MAJ_Joueurs_Totaux(Nombre_de_Joueurs); } else { MessageBox.Show("Joueur non inscrit ! \r\nVeuillez entrer une valeur ELO valide !", "Enregistrement des joueurs", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } }
private void btn_csv1_Click(object sender, EventArgs e) { // Déclaration de variables locales pour prendre le nombre de participants à écrire dans le fichier csv int NbParticipants = Tournoi.Joueurs_Totaux(); int i = 0; // Reprend la liste des joueurs List <Joueur> Participants; Participants = Tournoi.ChargerListe(); // Cherche le chemin string path = @"H:\GENLOG\POBJ\Projet_Tournoi_Echec\Tournoi_Echec\Classement.csv"; // Ecriture (avec l'encoding UTF8) File.WriteAllText(path, "Pos : ;N° ;Joueur : ;Club : ;ELO : ;Titre;V;N;P;Pts : ;Buchh : ;SoBerg :" + Environment.NewLine + Environment.NewLine, Encoding.UTF8); for (i = 0; i < NbParticipants; i++) { File.AppendAllText(path, (i + 1).ToString() + ';' + Participants[i].n_Depart_Du_JoueurLoad().ToString() + ';' + Participants[i].nom + ' ' + Participants[i].prenom + ';' + Participants[i].club + ';' + Participants[i].ELO.ToString() + ';' + Participants[i].Titre + ';' + Participants[i].VictoireJoueur().ToString() + ';' + Participants[i].NulJoueur().ToString() + ';' + Participants[i].DefaiteJoueur().ToString() + ';' + Participants[i].PointsJoueur().ToString() + ';' + Participants[i].BuchhJoueur().ToString() + ';' + Participants[i].SoBergJoueur().ToString() + Environment.NewLine, Encoding.UTF8); } }
private void btn_suppresion_joueur_Click(object sender, EventArgs e) { // Si le nombre de joueurs est suppérieur à 0 if (Nombre_de_Joueurs > 0) { // Retirer le dernier joueur entrer Participant.RemoveAt((Nombre_de_Joueurs - 1)); DGV_LDD.Rows.RemoveAt((Nombre_de_Joueurs - 1)); Nombre_de_Joueurs = Tournoi.Joueurs_Totaux(); Nombre_de_Joueurs--; Tournoi.MAJ_Joueurs_Totaux(Nombre_de_Joueurs); // Il faudra trier Tri_Fait = 0; } else { // Message pour préciser qu'il n'y a plus de joueurs MessageBox.Show("Il n'y a pas de joueur dans votre tournoi !", "Enregistrement des joueurs", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } }
private void btn_csv2_Click(object sender, EventArgs e) { // Déclaration de variables locales pour prendre le nombre de participants à écrire dans le fichier csv int NbParticipants = Tournoi.Joueurs_Totaux(); int i = 0; // Reprend la liste des joueurs List <Joueur> Participants; Participants = Tournoi.ChargerListe(); // Faire disparaitre le bouton pour extraire sur csv //btn_csv2.Hide(); // Cherche le chemin string path = @"H:\GENLOG\POBJ\Projet_Tournoi_Echec\Tournoi_Echec\Classement detaille.csv"; // Ecriture (avec l'encoding UTF8) File.WriteAllText(path, "Pos : ;N° ;Joueur : ;Club : ;ELO : ;Titre ;R1 : ;R2 : ;R3 : ;R4 : ;R5 : ;R6 : ;R7 : ;R8 : ;R9 : ;R10 : ;R11 : ;Pts : ;Buchh : ;SoBerg :" + Environment.NewLine + Environment.NewLine, Encoding.UTF8); for (i = 0; i < NbParticipants; i++) { File.AppendAllText(path, (i + 1).ToString() + ';' + Participants[i].n_Depart_Du_JoueurLoad().ToString() + ';' + Participants[i].nom + ' ' + Participants[i].prenom + ';' + Participants[i].club + ';' + Participants[i].ELO.ToString() + ';' + Participants[i].Titre + ';' + Ronde_Texte[i, 0] + ';' + Ronde_Texte[i, 1] + ';' + Ronde_Texte[i, 2] + ';' + Ronde_Texte[i, 3] + ';' + Ronde_Texte[i, 4] + ';' + Ronde_Texte[i, 5] + ';' + Ronde_Texte[i, 6] + ';' + Ronde_Texte[i, 7] + ';' + Ronde_Texte[i, 8] + ';' + Ronde_Texte[i, 9] + ';' + Ronde_Texte[i, 10] + ';' + Participants[i].PointsJoueur().ToString() + ';' + Participants[i].BuchhJoueur().ToString() + ';' + Participants[i].SoBergJoueur().ToString() + Environment.NewLine, Encoding.UTF8); } }
private void btn_ShowClassement_Click(object sender, EventArgs e) { // Liste des joueurs List <Joueur> Participants; List <Joueur> Classement; // Element pour l'affichage et les calculs int Ronde, Adv; int i, j, TeteDeSerie, V, N, D; float Pts = 0, Buchh = 0, SoBerg = 0; float Buchh_A_Ajouter = 0, SoBerg_A_Ajouter = 0; // Prend le nombre de joueur int NbParticipants; // Prise de la liste de depart Participants = Tournoi.ChargerListe(); // Prise du nombre de joueur NbParticipants = Tournoi.Joueurs_Totaux(); // Retrié par n° de départ du joueur, pour que le calcul s'effectue correctement TriParNdeDepart(Participants, NbParticipants); // Effacer toutes les cases du tableau (par précaution) dataGridView1.Rows.Clear(); // Remise à 0 du buchholz et du SoBerg de tous les joueurs (si plusieurs appuis sur le bouton classement, il ne doit pas y avoir de changements) for (i = 0; i < (NbParticipants); i++) { // Effacer Participants[i].MAJ_Buchh(0); Participants[i].MAJ_SoBerg(0); } // Effectuer le calcul du Buchholtz et de la somme de Buchholtz de tous les joueurs dans la gestion du classement // parce que ceux-ci évolue selon le tournoi des joueurs adverses // Prend le nombre de rondes Ronde = Tournoi.Ronde_Jouee(); for (j = 1; j <= Ronde; j++) { // D'abord mettre à jour tous les buchholtz avant les SoBerg for (i = 0; i < (NbParticipants); i++) { // Va chercher l'adversaire du joueur (-1 car le joueur tête de série n°1 à l'indice 0) Adv = (Participants[i].Adv_To_Return(j)) - 1; // Mise à jour du buchholtz à ajouter Buchh_A_Ajouter = Participants[Adv].PointsJoueur(); // Va chercher le buccholtz actuel du joueur Buchh = Participants[i].BuchhJoueur(); // Remet à jour le buchholtz du joueur Participants[i].MAJ_Buchh(Buchh_A_Ajouter + Buchh); } } for (j = 1; j <= Ronde; j++) { // Et on refait la même opération pour les SoBerg for (i = 0; i < (NbParticipants); i++) { // Va chercher l'adversaire du joueur (-1 car le joueur tête de série n°1 à l'indice 0) Adv = (Participants[i].Adv_To_Return(j)) - 1; // Mise à jour du soberg à ajouter SoBerg_A_Ajouter = Participants[Adv].BuchhJoueur(); // Va chercher le soberg actuel du joueur SoBerg = Participants[i].SoBergJoueur(); // Remet à jour le soberg du joueur Participants[i].MAJ_SoBerg(SoBerg_A_Ajouter + SoBerg); } } // Copie de la liste des participants dans la zone prévue pour l'affichage du classement Classement = Participants; // Génération du classement et tri selon le nombre de points / Bucch / SoBerg et Victoire des joueurs TriClassement(Classement, NbParticipants); // Génération du tableau for (i = 0; i < (NbParticipants); i++) { // Elements à afficher TeteDeSerie = Classement[i].n_Depart_Du_JoueurLoad(); V = Classement[i].VictoireJoueur(); N = Classement[i].NulJoueur(); D = Classement[i].DefaiteJoueur(); Pts = Classement[i].PointsJoueur(); Buchh = Classement[i].BuchhJoueur(); SoBerg = Classement[i].SoBergJoueur(); // Mise à jour du rang final du joueur Classement[i].MAJ_RangFinal(i + 1); // Création des lignes pour le classement string[] row = new string[] { (i + 1).ToString(), TeteDeSerie.ToString(), Classement[i].nom + " " + Classement[i].prenom, Classement[i].club, Classement[i].ELO.ToString(), Classement[i].Titre, V.ToString(), N.ToString(), D.ToString(), Pts.ToString(), Buchh.ToString(), SoBerg.ToString() }; dataGridView1.Rows.Add(row); } // Enregistrer la liste Tournoi.SaveListe(Participants); // Faire apparaître le bouton pour un classement complet btn_ShowClassementDetaille.Show(); // Faire apparaitre le bouton pour extraire sur csv btn_csv1.Show(); }
private void btn_ShowClassementDetaille2_Click(object sender, EventArgs e) { // Liste des joueurs List <Joueur> Participants; List <Joueur> Classement; // Element pour l'affichage et les calculs int Ronde, Adv, Pos; int i, j, TeteDeSerie; float Pts, Buchh, SoBerg; // Prend le nombre de joueur int NbParticipants; // Vider le tableau dataGridView1.Rows.Clear(); // Prise de la liste de depart Participants = Tournoi.ChargerListe(); // Prise du nombre de joueur NbParticipants = Tournoi.Joueurs_Totaux(); // Effectuer le calcul du Buchholtz et de la somme de Buchholtz de tous les joueurs dans la gestion du classement // parce que ceux-ci évolue selon le tournoi des joueurs adverses // Prend le nombre de rondes Ronde = Tournoi.Ronde_Jouee(); // On retrie par n° de départ pour prendre les positions finales de chaque joueur TriParNdeDepart(Participants, NbParticipants); // Prendre les adversaires selon leurs classements for (i = 0; i < (NbParticipants); i++) { // Prise de la valeur de chaque adversaire / chaque couleur et chaque resultat pour chaque ronde for (j = 1; j <= Ronde; j++) { // Prise de l'adversaire (son n° indice) Adv = (Participants[i].Adv_To_Return(j)) - 1; // Remplacer la valeur de l'adversaire ==> l'indice devient son classement final Pos = Participants[Adv].RangFinal(); Participants[i].MAJ_n_adversaire(Pos, j); } } // Copie de la liste des participants dans la zone prévue pour l'affichage du classement Classement = Participants; // On retrie selon la position TriParPosition(Classement, NbParticipants); // Génération du tableau for (i = 0; i < (NbParticipants); i++) { // Prise de la valeur de chaque adversaire / chaque couleur et chaque resultat pour chaque ronde for (j = 1; j <= Ronde; j++) { // Prise de l'adversaire (son n° de classement FINAL) Adv = (Participants[i].Adv_To_Return(j)) - 1; nbAdversaire[j - 1] = Participants[Adv].RangFinal(); // Prise de la couleur if ((Participants[i].Couleur_To_Return(j) == 0)) { // 0 = noir ==> mise de S (Schwarz) nbCouleur[j - 1] = 'S'; } else { // 1 = blanc ==> mise de W (Weiss) nbCouleur[j - 1] = 'W'; } // Prise du résultat nbResultat[j - 1] = Participants[i].Resultat_To_Return(j); // Mettre tout ça dans un string Ronde_Texte[i, j - 1] = nbAdversaire[j - 1].ToString() + nbCouleur[j - 1].ToString() + nbResultat[j - 1].ToString(); } // Pour les rondes non jouées (pour y mettre des cases 'X' pour indiqué une ronde non jouée for (j = (Ronde + 1); j <= 11; j++) { Ronde_Texte[i, j - 1] = "X"; } // Elements à afficher TeteDeSerie = Classement[i].n_Depart_Du_JoueurLoad(); Pts = Classement[i].PointsJoueur(); Buchh = Classement[i].BuchhJoueur(); SoBerg = Classement[i].SoBergJoueur(); // Création des lignes pour le classement string[] row = new string[] { (i + 1).ToString(), TeteDeSerie.ToString(), Classement[i].nom + " " + Classement[i].prenom, Classement[i].club, Classement[i].ELO.ToString(), Classement[i].Titre, Ronde_Texte[i, 0], Ronde_Texte[i, 1], Ronde_Texte[i, 2], Ronde_Texte[i, 3], Ronde_Texte[i, 4], Ronde_Texte[i, 5], Ronde_Texte[i, 6], Ronde_Texte[i, 7], Ronde_Texte[i, 8], Ronde_Texte[i, 9], Ronde_Texte[i, 10], Pts.ToString(), Buchh.ToString(), SoBerg.ToString() }; dataGridView1.Rows.Add(row); } // Faire disparaitre le bouton pour afficher le classement détaillé (pour éviter un bug de remise de valeur incompréhensible) btn_ShowClassementDetaille2.Hide(); // Faire apparaitre le bouton pour extraire sur csv btn_csv2.Show(); }
// 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; }