|
|
|
@ -1,43 +1,96 @@
|
|
|
|
|
namespace CoreLibrary
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Représente le plateau de jeu qui initialise deux tableaux de taille 12.
|
|
|
|
|
/// Il possède deux méthodes : une pour ajouter une combinaison dans le tableau et une autre pour vérifier si le tableau est plein.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public class Plateau
|
|
|
|
|
{
|
|
|
|
|
private static readonly int tailleMax = 12;
|
|
|
|
|
private CombinaisonSecrete combinaisonSecrete = new CombinaisonSecrete();
|
|
|
|
|
private CombinaisonJoueur[] lesCombinaisonsJoueur = new CombinaisonJoueur[tailleMax];
|
|
|
|
|
private Combinaison[] lesCombinaisonsIndicateur = new CombinaisonIndicateur[tailleMax];
|
|
|
|
|
private int index = 0;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Ajoute une combinaison de joueur au plateau.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="combinaisonJoueur">La combinaison du joueur à ajouter.</param>
|
|
|
|
|
/// <returns>True si la combinaison correspond à la combinaison secrète, sinon False.</returns>
|
|
|
|
|
public bool AjouterCombinaison(CombinaisonJoueur combinaisonJoueur)
|
|
|
|
|
{
|
|
|
|
|
if (EstComplet())
|
|
|
|
|
{
|
|
|
|
|
throw new Exception("Le plateau est plein, impossible d'ajouter une combinaison supplémentaire.");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
lesCombinaisonsJoueur[index] = combinaisonJoueur;
|
|
|
|
|
index++;
|
|
|
|
|
return combinaisonSecrete.EstEgale(combinaisonJoueur);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Vérifie si le plateau est complet.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns>True si le plateau est plein, sinon False.</returns>
|
|
|
|
|
public bool EstComplet()
|
|
|
|
|
{
|
|
|
|
|
return index >= tailleMax;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
namespace CoreLibrary
|
|
|
|
|
{
|
|
|
|
|
public class Plateau
|
|
|
|
|
{
|
|
|
|
|
private static Random random = new Random();
|
|
|
|
|
|
|
|
|
|
private readonly Code codeSecret;
|
|
|
|
|
private readonly Code?[] grille;
|
|
|
|
|
private readonly IEnumerable<Indicateur>[] 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)
|
|
|
|
|
{
|
|
|
|
|
codeSecret = new Code(tailleCode);
|
|
|
|
|
grille = new Code?[tailleGrille];
|
|
|
|
|
indicateurs = new IEnumerable<Indicateur>[tailleGrille];
|
|
|
|
|
|
|
|
|
|
this.tailleCode = tailleCode;
|
|
|
|
|
|
|
|
|
|
GenererCodeAleatoire();
|
|
|
|
|
|
|
|
|
|
foreach (Jeton? jeton in codeSecret.Jetons())
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine(jeton.Value.Couleur);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
{
|
|
|
|
|
indicateurs[Tour - 1] = codeSecret.Comparer(code);
|
|
|
|
|
grille[Tour - 1] = code;
|
|
|
|
|
++Tour;
|
|
|
|
|
|
|
|
|
|
if (EstBonCode(code))
|
|
|
|
|
{
|
|
|
|
|
Victoire = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool EstBonCode(Code code)
|
|
|
|
|
{
|
|
|
|
|
IEnumerable<Indicateur> 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<IEnumerable<Jeton?>> Grille()
|
|
|
|
|
{
|
|
|
|
|
IEnumerable<Jeton?>[] grilleJetons = new IEnumerable<Jeton?>[grille.Length];
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < grille.Length; ++i)
|
|
|
|
|
{
|
|
|
|
|
grilleJetons[i] = grille[i]?.Jetons() ?? new Code(tailleCode).Jetons();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return grilleJetons;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public IEnumerable<IEnumerable<Indicateur>> Indicateurs()
|
|
|
|
|
{
|
|
|
|
|
return indicateurs;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|