namespace CoreLibrary { public class Plateau { private static Random random = new Random(); private readonly Code codeSecret; private readonly Code?[] grille; private readonly IEnumerable[] indicateurs; private readonly int tailleCode; public int Tour { get; private set; } = 1; public bool Victoire { get; private set; } = false; public Plateau(int tailleCode, int tailleGrille) { if(tailleCode <= 0) { throw new PlateauTailleCodeException(); } if (tailleGrille <= 0) { throw new PlateauTailleGrilleException(); } codeSecret = new Code(tailleCode); grille = new Code?[tailleGrille]; indicateurs = new IEnumerable[tailleGrille]; this.tailleCode = tailleCode; GenererCodeAleatoire(); } private void GenererCodeAleatoire() { Couleur[] couleurs = (Couleur[])Enum.GetValues(typeof(Couleur)); for (int i = 0; i < tailleCode; ++i) { codeSecret.AjouterJeton(new Jeton(couleurs[random.Next(couleurs.Length)])); } } public bool EstComplet() { return Tour - 1 == grille.Length; } public void AjouterCode(Code code) { if (code.TailleMaximale() != tailleCode) { throw new CodeTailleMaximaleException(); } if (!code.EstComplet()) { throw new CodeIncompletException(); } indicateurs[Tour - 1] = codeSecret.Comparer(code); grille[Tour - 1] = code; ++Tour; if (EstBonCode(code)) { Victoire = true; } } public bool EstBonCode(Code code) { IEnumerable indicateurs = codeSecret.Comparer(code); if (indicateurs.Count() != tailleCode) { return false; } foreach (Indicateur indicateur in indicateurs) { if (indicateur != Indicateur.BONNEPLACE) { return false; } } return true; } public IEnumerable> Grille() { IEnumerable[] grilleJetons = new IEnumerable[grille.Length]; for (int i = 0; i < grille.Length; ++i) { grilleJetons[i] = grille[i]?.Jetons() ?? new Code(tailleCode).Jetons(); } return grilleJetons; } public IEnumerable> Indicateurs() { return indicateurs; } } }