Ejemplo n.º 1
0
 public bool Equals(StatistiquesPerso other)
 {
     if (this.Pseudo == other.Pseudo && this.DateEntrainement == other.DateEntrainement)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
Ejemplo n.º 2
0
 private void dgResult_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
 {
     if (dgResult.SelectedItem != null)
     {
         StatistiquesPerso sp = (StatistiquesPerso)dgResult.SelectedItem;
         try {
             LoadStatsParJoueur(sp.Pseudo);
         }
         catch (Exception ex) {
             MessageBox.Show(ex.Message);
         }
     }
 }
Ejemplo n.º 3
0
        public void LoadData()
        {
            if (lstGames.SelectedItems.Count == 0)
            {
                return;
            }
            List <StatistiquesPerso> lstPerso = new List <StatistiquesPerso>();

            #region partie
            // on créer une liste de parties

            List <IGrouping <DateTime, ScoreCard> > lstGroupScores = new List <IGrouping <DateTime, ScoreCard> >();
            foreach (IGrouping <string, ScoreCard> entrainement in lstEntrainement.SelectedItems)
            {
                foreach (var partie in entrainement.GroupBy(g => g.dt))
                {
                    lstGroupScores.Add(partie);
                }
            }

            List <Partie> lstParties = GenerateParties(lstGroupScores);
            #endregion
            // dans lstParties, j'ai une liste de toutes les parties des entrainements selectionnées.
            // je dois enlever les parties non selectionnable :

            // par type de partie :
            lstParties = lstParties.Where(p => cmbTypePartie.SelectedItems.Contains(p.type)).ToList();

            // TODO : par joueur présent ?

            // on fait une liste des fiches de scores pour remplir la grille principale
            // c'est a dire toutes les fiches de lstParties pour lequelles la date est selectionnée dans lstGames
            List <ScoreCard> lstTravail = new List <ScoreCard>();
            foreach (Partie p in lstParties)
            {
                foreach (var item in lstGames.SelectedItems)
                {
                    IGrouping <DateTime, ScoreCard> group = (IGrouping <DateTime, ScoreCard>)item;
                    lstTravail.AddRange(p.lstScores.Where(x => x.dt == group.Key).ToList());
                }
                //lstTravail.AddRange(p.lstScores.Where(x => lstGames.SelectedItems.Contains(x)).ToList());
            }

            // liste des stats perso (en fonction du mode)
            // en mode global, une stat par joueur
            // en mode non global, une stat par joueur et par entrainement
            IEnumerable <IGrouping <object, ScoreCard> > query;
            if (IsModeGlobal)
            {
                query = lstTravail.GroupBy(q => q.pseudo);
            }
            else
            {
                // on fait un groupement par date d'entrainement de toutes les fiches
                query = lstTravail.GroupBy(q => new { q.pseudo, q.dt.Year, q.dt.Month, q.dt.Day });
            }
            foreach (var group in query.ToList())
            {
                lstPerso.Add(new StatistiquesPerso(group.ToList()));
            }

            // on compte le nombre de victoires... on considère la partie complète dans le cas de la selection d'une seule manche
            foreach (Partie g in lstParties)
            {
                // on ne doit prendre que les parties pour lesquelles on a selectionner au moins une manche dans lstGames
                bool ok = false;
                foreach (ScoreCard sc in lstTravail)
                {
                    foreach (ScoreCard sc2 in g.lstScores)
                    {
                        if (sc2 == sc)
                        {
                            ok = true;
                            break;
                        }
                    }
                }
                if (ok)
                {
                    try {
                        // cette partie compte dans les stats, on doit donc mettre a jour le nombre de parties jouée par chaque joueur présent
                        List <string> lst = g.lstScores.Select(p => p.pseudo).Distinct().ToList();
                        foreach (string nom in lst)
                        {
                            // en mode non global, ajouter la date de l'entrainement pour retrouver la stat correspondante
                            StatistiquesPerso perso = lstPerso.Where(q => q.Pseudo == nom).First();
                            perso.nbParties++;
                            lstPerso[lstPerso.IndexOf(perso)] = perso;
                        }
                        lst = g.getWinners();
                        if (lst != null)
                        {
                            foreach (string nom in lst)
                            {
                                StatistiquesPerso perso = lstPerso.Where(q => q.Pseudo == nom).First();
                                perso.nbVictoire++;
                                lstPerso[lstPerso.IndexOf(perso)] = perso;
                            }
                            if (g.type == "Chieur")
                            {
                                string            chieur = g.getChieur();
                                StatistiquesPerso per    = lstPerso.Where(q => q.Pseudo == chieur).First();

                                // TODO : si chieur et score + tir a 0, on ne compte pas la partie dans la moyenne
                                int nbManchesNulles = g.lstScores.Where(p => p.pseudo == chieur && p.score == 0 && p.tirs == 0).Count();

                                if (nbManchesNulles > 0)
                                {
                                    per.RankAdjust(g.lstScores.Where(p => p.pseudo == chieur && p.score == 0 && p.tirs == 0).Sum(p => p.rank));
                                    per.nbMancheObservateur += nbManchesNulles;
                                    per.nbObservateur++;
                                }
                                else
                                {
                                    per.nbChieur++;
                                }
                                lstPerso[lstPerso.IndexOf(per)] = per;
                            }
                        }
                    }
                    catch (Exception ex) {
                        MessageBox.Show("Erreur avec la selection : " + ex.Message);
                    }
                }
            }

            // ici j'ai :
            // dans lstTravail l'ensemble des scorecards selectionnées
            lstScoreCardSelect = lstTravail;
            lstPartieSelect    = lstParties;
            // dans lstParties l'ensemble des parties avec au moins une manche selectionnées
            // dans lstPerso les statistiques persos pour les scorecards selectionnées
            dgResult.ItemsSource = lstPerso;
            //LoadStatsParJoueur();

            #region stats pack
            Dictionary <int, StatistiquePack> dicoPack = new Dictionary <int, StatistiquePack>();
            foreach (ScoreCard sc in lstScoreCardSelect)
            {
                StatistiquePack sp = new StatistiquePack();
                if (dicoPack.ContainsKey(sc.pack))
                {
                    sp = dicoPack[sc.pack];
                }
                else
                {
                    dicoPack.Add(sc.pack, sp);
                }
                sp.packId = sc.pack;
                sp.nbGames++;
                sp.score += sc.score;
                foreach (LigneScore l in sc.Up)
                {
                    sp.frontplus += l.front;
                    sp.backplus  += l.back;
                    sp.shdplus   += l.shoulder;
                    sp.gunplus   += l.gun;
                }
                foreach (LigneScore l in sc.Down)
                {
                    sp.frontmoins += l.front;
                    sp.backmoins  += l.back;
                    sp.shdmoins   += l.shoulder;
                    sp.gunmoins   += l.gun;
                }
            }
            dgPack.ItemsSource = dicoPack.Values;
            #endregion
        }