Correction code smell comparerCode()
continuous-integration/drone/push Build is passing Details

master
Céleste BARBOSA 12 months ago
parent d63040824b
commit e7309f5339

@ -1,186 +1,178 @@
using CoreLibrary.Exceptions; using CoreLibrary.Exceptions;
namespace CoreLibrary namespace CoreLibrary
{ {
/// <summary> /// <summary>
/// Représente un code composé de jetons. /// Représente un code composé de jetons.
/// </summary> /// </summary>
public class Code public class Code
{ {
private readonly Jeton?[] lesJetons; private readonly Jeton?[] lesJetons;
/// <summary> /// <summary>
/// Obtenir le nombre de jetons dans le code. /// Obtenir le nombre de jetons dans le code.
/// </summary> /// </summary>
public int NbJetons { get; private set; } = 0; public int NbJetons { get; private set; } = 0;
/// <summary> /// <summary>
/// Initialise une nouvelle instance de la classe <see cref="Code"/> avec la longueur de code spécifiée. /// Initialise une nouvelle instance de la classe <see cref="Code"/> avec la longueur de code spécifiée.
/// </summary> /// </summary>
/// <param name="tailleCode">La longueur du code.</param> /// <param name="tailleCode">La longueur du code.</param>
/// <exception cref="TailleCodeException">Levée lorsque la longueur du code spécifiée est inférieure ou égale à zéro.</exception> /// <exception cref="TailleCodeException">Levée lorsque la longueur du code spécifiée est inférieure ou égale à zéro.</exception>
public Code(int tailleCode) public Code(int tailleCode)
{ {
if(tailleCode <= 0) if(tailleCode <= 0)
{ {
throw new TailleCodeException(tailleCode); throw new TailleCodeException(tailleCode);
} }
lesJetons = new Jeton?[tailleCode]; lesJetons = new Jeton?[tailleCode];
} }
/// <summary> /// <summary>
/// Initialise une nouvelle instance de la class <see cref="Code"/> avec les jetons spécifiés. /// Initialise une nouvelle instance de la class <see cref="Code"/> avec les jetons spécifiés.
/// </summary> /// </summary>
/// <param name="jetons">Les jetons pour initaliser le code.</param> /// <param name="jetons">Les jetons pour initaliser le code.</param>
/// <exception cref="TailleCodeException">Levée lorsque la collection de jetons spécifiée est vide.</exception> /// <exception cref="TailleCodeException">Levée lorsque la collection de jetons spécifiée est vide.</exception>
public Code(IEnumerable<Jeton> jetons) public Code(IEnumerable<Jeton> jetons)
{ {
if (!jetons.Any()) if (!jetons.Any())
{ {
throw new TailleCodeException(jetons.Count()); throw new TailleCodeException(jetons.Count());
} }
lesJetons = new Jeton?[jetons.Count()]; lesJetons = new Jeton?[jetons.Count()];
foreach(Jeton jeton in jetons) foreach(Jeton jeton in jetons)
{ {
AjouterJeton(jeton); AjouterJeton(jeton);
} }
} }
/// <summary> /// <summary>
/// Ajoute un jeton au code. /// Ajoute un jeton au code.
/// </summary> /// </summary>
/// <param name="jeton">Le jeton à ajouter</param> /// <param name="jeton">Le jeton à ajouter</param>
/// <exception cref="CodeCompletException">Levée lorsque le code est plein.</exception> /// <exception cref="CodeCompletException">Levée lorsque le code est plein.</exception>
public void AjouterJeton(Jeton jeton) public void AjouterJeton(Jeton jeton)
{ {
if (NbJetons == TailleMaximale()) if (NbJetons == TailleMaximale())
{ {
throw new CodeCompletException(); throw new CodeCompletException();
} }
lesJetons[NbJetons++] = jeton; lesJetons[NbJetons++] = jeton;
} }
/// <summary> /// <summary>
/// Supprime le dernier jeton ajouté au code. /// Supprime le dernier jeton ajouté au code.
/// </summary> /// </summary>
/// <exception cref="CodeVideException">Levée lorsque le code est vide.</exception> /// <exception cref="CodeVideException">Levée lorsque le code est vide.</exception>
public void SupprimerDernierJeton() public void SupprimerDernierJeton()
{ {
if(NbJetons == 0) if(NbJetons == 0)
{ {
throw new CodeVideException(); throw new CodeVideException();
} }
lesJetons[--NbJetons] = null; lesJetons[--NbJetons] = null;
} }
/// <summary> /// <summary>
/// Récupère le jeton à l'indice spécifié dans le code. /// Récupère le jeton à l'indice spécifié dans le code.
/// </summary> /// </summary>
/// <param name="indice">L'indice du jeton a récupéré.</param> /// <param name="indice">L'indice du jeton a récupéré.</param>
/// <returns>Le jeton situé à l'indice spécifié.</returns> /// <returns>Le jeton situé à l'indice spécifié.</returns>
/// <exception cref="IndiceCodeException">Levée lorsque l'indice est supérieur à la taille maximale du code, inférieur à 0 ou qu'il n'y a pas de jeton à l'indice spécifié</exception> /// <exception cref="IndiceCodeException">Levée lorsque l'indice est supérieur à la taille maximale du code, inférieur à 0 ou qu'il n'y a pas de jeton à l'indice spécifié</exception>
public Jeton RecupererJeton(int indice) public Jeton RecupererJeton(int indice)
{ {
if(indice < 0 || indice >= TailleMaximale()) if(indice < 0 || indice >= TailleMaximale())
throw new IndiceCodeException(indice, NbJetons-1); throw new IndiceCodeException(indice, NbJetons-1);
Jeton? jeton = lesJetons[indice]; Jeton? jeton = lesJetons[indice];
if (!jeton.HasValue) if (!jeton.HasValue)
throw new IndiceCodeException(indice, NbJetons-1); throw new IndiceCodeException(indice, NbJetons-1);
return jeton.Value; return jeton.Value;
} }
/// <summary> /// <summary>
/// Récupère une énumération des jetons dans le code. /// Récupère une énumération des jetons dans le code.
/// </summary> /// </summary>
/// <returns>Enumération des jetons du code</returns> /// <returns>Enumération des jetons du code</returns>
public IEnumerable<Jeton?> Jetons() public IEnumerable<Jeton?> Jetons()
{ {
return lesJetons; return lesJetons;
} }
/// <summary> /// <summary>
/// Vérifie si le code est complet. /// Vérifie si le code est complet.
/// </summary> /// </summary>
/// <returns>True si le code est complet, sinon False.</returns> /// <returns>True si le code est complet, sinon False.</returns>
public bool EstComplet() public bool EstComplet()
{ {
return NbJetons == lesJetons.Length; return NbJetons == lesJetons.Length;
} }
/// <summary> /// <summary>
/// Recupère la taille maximal du code. /// Recupère la taille maximal du code.
/// </summary> /// </summary>
/// <returns>Taille maximal du code.</returns> /// <returns>Taille maximal du code.</returns>
public int TailleMaximale() public int TailleMaximale()
{ {
return lesJetons.Length; return lesJetons.Length;
} }
/// <summary> /// <summary>
/// Compare le code avec un autre code et génère des indcateurs de correspondance. /// Compare le code avec un autre code et génère des indcateurs de correspondance.
/// </summary> /// </summary>
/// <param name="autreCode">Le code à comparer avec le code actuel</param> /// <param name="autreCode">Le code à comparer avec le code actuel</param>
/// <returns>Enumération d'indicateurs de correspondance entre les deux codes.</returns> /// <returns>Enumération d'indicateurs de correspondance entre les deux codes.</returns>
public IEnumerable<Indicateur> Comparer(Code autreCode) public IEnumerable<Indicateur> Comparer(Code autreCode)
{ {
// Mon code est le code correct, l'autre code est celui qui teste // Mon code est le code correct, l'autre code est celui qui teste
Indicateur[] indicateurs = []; Indicateur[] indicateurs = [];
if (!autreCode.EstComplet()) if (!autreCode.EstComplet())
return indicateurs; return indicateurs;
Jeton?[] mesJetons = Jetons().ToArray(); List<Jeton?> mesJetons = new List<Jeton?>(Jetons());
Jeton?[] sesJetons = autreCode.Jetons().ToArray(); List<Jeton?> sesJetons = new List<Jeton?>(autreCode.Jetons());
for (int i = 0; i < mesJetons.Length; ++i) for (int i = 0; i < mesJetons.Count; ++i)
{ {
Jeton? monJeton = mesJetons[i]; Jeton? monJeton = mesJetons[i];
Jeton? sonJeton = sesJetons[i]; Jeton? sonJeton = sesJetons[i];
if (monJeton.HasValue && sonJeton.HasValue && monJeton.Value.Couleur.Equals(sonJeton.Value.Couleur)) if (monJeton.HasValue && sonJeton.HasValue && monJeton.Value.Couleur.Equals(sonJeton.Value.Couleur))
{ {
indicateurs = indicateurs.Append(Indicateur.BONNEPLACE).ToArray(); indicateurs = indicateurs.Append(Indicateur.BONNEPLACE).ToArray();
mesJetons[i] = null; mesJetons[i] = null;
sesJetons[i] = null; sesJetons[i] = null;
} }
} }
for (int i = 0; i < sesJetons.Length; ++i) for (int i = 0; i < sesJetons.Count; ++i)
{ {
Jeton? sonJeton = sesJetons[i]; Jeton? sonJeton = sesJetons[i];
if (sonJeton.HasValue)
{
for (int j = 0; j < mesJetons.Length; ++j) if (sonJeton.HasValue && mesJetons.Contains(sonJeton.Value))
{ {
Jeton? monJeton = mesJetons[j]; indicateurs = indicateurs.Append(Indicateur.BONNECOULEUR).ToArray();
mesJetons[mesJetons.IndexOf(sonJeton)] = null;
if (monJeton.HasValue && sonJeton.Value.Couleur.Equals(monJeton.Value.Couleur)) sesJetons[i] = null;
{ }
indicateurs = indicateurs.Append(Indicateur.BONNECOULEUR).ToArray(); }
mesJetons[j] = null;
sesJetons[i] = null; return indicateurs;
break; }
} }
}
}
}
}
return indicateurs;
}
}
}

Loading…
Cancel
Save