using CoreLibrary.Persistance; using CoreLibrary.Joueurs; using CoreLibrary.Regles; using CoreLibrary.Statistiques; namespace CoreLibrary.Manageurs { public class Manageur { private readonly IPersistance persistance; private readonly List joueurs; private readonly List parties; public IReadOnlyList Joueurs => joueurs; public IReadOnlyList Parties => parties; public Manageur(IPersistance persistance) { this.persistance = persistance; joueurs = persistance.Charger().ToList(); parties = persistance.Charger().ToList(); } private void Sauvegarder() { persistance.Enregistrer(joueurs.ToArray()); persistance.Enregistrer(parties.ToArray()); } public Partie NouvellePartie(IRegles regles) { Partie partie = new Partie(regles); parties.Add(partie); partie.PartiePasserLaMain += (sender, e) => e.Joueur.IncrementerStatistique(partie.Regles, Statistique.CoupJoue); partie.PartieNouveauTour += (sender, e) => Sauvegarder(); partie.PartiePartieTerminee += (sender, e) => { if (e.Gagnants.Count == 1) { e.Gagnants[0].IncrementerStatistique(regles, Statistique.PartieGagnee); } else { foreach (Joueur gagnant in e.Gagnants) gagnant.IncrementerStatistique(regles, Statistique.PartieEgalite); } foreach (Joueur perdant in e.Perdants) { perdant.IncrementerStatistique(regles, Statistique.PartiePerdue); } }; return partie; } public Joueur DemanderJoueur(string nom) { foreach (Joueur joueur in joueurs) { if (joueur.Nom == nom) { return joueur; } } Joueur nouveauJoueur = new Joueur(nom); joueurs.Add(nouveauJoueur); return nouveauJoueur; } } }