You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mastermind/Sources/CoreLibrary/Manageurs/Manageur.cs

80 lines
2.2 KiB

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<Joueur> joueurs;
private readonly List<Partie> parties;
public IReadOnlyList<Joueur> Joueurs => joueurs;
public IReadOnlyList<Partie> Parties => parties;
public Manageur(IPersistance persistance)
{
this.persistance = persistance;
joueurs = persistance.Charger<Joueur>().ToList();
parties = persistance.Charger<Partie>().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;
}
}
}