using CoreLibrary.Persistance; using CoreLibrary.Joueurs; using CoreLibrary.Regles; using CoreLibrary.Statistiques; using System.Text.RegularExpressions; 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 IReadOnlyList PartiesNonTerminees => parties.Where(partie => !partie.Termine).Reverse().ToList(); 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 ChargerPartie(Partie partie) { parties.Remove(partie); Partie nouvellePartie = new Partie(partie); parties.Add(nouvellePartie); EcouterPartie(nouvellePartie); return nouvellePartie; } public Partie NouvellePartie(IRegles regles) { Partie partie = new Partie(regles); parties.Add(partie); EcouterPartie(partie); return partie; } private void EcouterPartie(Partie partie) { partie.PartieDemanderJoueur += (sender, e) => Sauvegarder(); partie.PartieDebutPartie += (sender, e) => Sauvegarder(); partie.PartieNouveauTour += (sender, e) => Sauvegarder(); partie.PartiePasserLaMain += (sender, e) => { DemanderJoueur(e.Joueur).IncrementerStatistique(partie.Regles, Statistique.CoupJoue); Sauvegarder(); }; partie.PartiePartieTerminee += (sender, e) => { if (e.Gagnants.Count == 1) { DemanderJoueur(e.Gagnants[0]).IncrementerStatistique(partie.Regles, Statistique.PartieGagnee); } else { foreach (string gagnant in e.Gagnants) DemanderJoueur(gagnant).IncrementerStatistique(partie.Regles, Statistique.PartieEgalite); } foreach (string perdant in e.Perdants) { DemanderJoueur(perdant).IncrementerStatistique(partie.Regles, Statistique.PartiePerdue); } Sauvegarder(); }; } 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; } } }