From dc21e90c762c7b6738c376c7bac4e7cf3cc985ed Mon Sep 17 00:00:00 2001 From: "nicolas.barbosa" Date: Tue, 28 May 2024 22:29:03 +0200 Subject: [PATCH] La taille du code en cours de saisi s'adapte automatiquement --- Sources/CoreLibrary/Core/Code.cs | 61 +++++++------------ Sources/CoreLibrary/Core/Plateau.cs | 8 +-- .../CoreLibrary/Regles/ReglesClassiques.cs | 6 +- Sources/MauiSpark/Pages/Plateau.xaml | 28 +++++++-- 4 files changed, 51 insertions(+), 52 deletions(-) diff --git a/Sources/CoreLibrary/Core/Code.cs b/Sources/CoreLibrary/Core/Code.cs index 33b2ea2..68e0f41 100644 --- a/Sources/CoreLibrary/Core/Code.cs +++ b/Sources/CoreLibrary/Core/Code.cs @@ -1,31 +1,26 @@ using CoreLibrary.Exceptions; -using System.ComponentModel; +using System.Collections.ObjectModel; namespace CoreLibrary.Core { /// /// Classe représentant un code composé de jetons et ses différentes méthodes. /// - public class Code : INotifyPropertyChanged + public class Code { - public event PropertyChangedEventHandler? PropertyChanged; + private readonly ObservableCollection lesJetons = new ObservableCollection(); - void OnPropertyChanged(string propertyName) - { - if (PropertyChanged != null) - { - PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); - } - } - - private readonly Jeton?[] lesJetons; + /// + /// Le nombre maximum de jetons dans le code. + /// + public int NbJetonsMax { get; private set; } /// /// Le nombre de jetons dans le code. /// - public int NbJetons { get; private set; } = 0; + public int NbJetons { get => lesJetons.Count; } - public IEnumerable Jetons => lesJetons; + public ObservableCollection Jetons => lesJetons; /// /// Initialise une nouvelle instance de la classe avec la longueur de code spécifiée. @@ -34,12 +29,12 @@ namespace CoreLibrary.Core /// Levée lorsque la longueur du code spécifiée est inférieure ou égale à zéro. public Code(int tailleCode) { + NbJetonsMax = tailleCode; + if (tailleCode <= 0) { throw new TailleCodeException(tailleCode); } - - lesJetons = new Jeton?[tailleCode]; } /// @@ -54,7 +49,10 @@ namespace CoreLibrary.Core throw new TailleCodeException(jetons.Count()); } - lesJetons = new Jeton?[jetons.Count()]; + NbJetonsMax = jetons.Count(); + + + foreach (Jeton jeton in jetons) { AjouterJeton(jeton); @@ -68,13 +66,12 @@ namespace CoreLibrary.Core /// Levée lorsque le code est plein. public void AjouterJeton(Jeton jeton) { - if (NbJetons == TailleMaximale()) + if (lesJetons.Count == NbJetonsMax) { throw new CodeCompletException(); } - lesJetons[NbJetons++] = jeton; - OnPropertyChanged(nameof(Jetons)); + lesJetons.Add(jeton); } /// @@ -83,13 +80,12 @@ namespace CoreLibrary.Core /// Levée lorsque le code est vide. public void SupprimerDernierJeton() { - if (NbJetons == 0) + if (lesJetons.Count == 0) { throw new CodeVideException(); } - lesJetons[--NbJetons] = null; - OnPropertyChanged(nameof(Jetons)); + lesJetons.RemoveAt(lesJetons.Count - 1); } /// @@ -100,13 +96,13 @@ namespace CoreLibrary.Core /// 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é public Jeton RecupererJeton(int indice) { - if (indice < 0 || indice >= TailleMaximale()) - throw new IndiceCodeException(indice, NbJetons - 1); + if (indice < 0 || indice >= NbJetonsMax) + throw new IndiceCodeException(indice, lesJetons.Count - 1); Jeton? jeton = lesJetons[indice]; if (!jeton.HasValue) - throw new IndiceCodeException(indice, NbJetons - 1); + throw new IndiceCodeException(indice, lesJetons.Count - 1); return jeton.Value; } @@ -117,16 +113,7 @@ namespace CoreLibrary.Core /// True si le code est complet, sinon False. public bool EstComplet() { - return NbJetons == lesJetons.Length; - } - - /// - /// Recupère la taille maximale du code. - /// - /// Taille maximale du code. - public int TailleMaximale() - { - return lesJetons.Length; + return lesJetons.Count == NbJetonsMax; } /// @@ -164,8 +151,6 @@ namespace CoreLibrary.Core { Jeton? sonJeton = sesJetons[i]; - - if (sonJeton.HasValue && mesJetons.Contains(sonJeton.Value)) { indicateurs = indicateurs.Append(Indicateur.BONNECOULEUR).ToArray(); diff --git a/Sources/CoreLibrary/Core/Plateau.cs b/Sources/CoreLibrary/Core/Plateau.cs index 394b12f..c3d1f3e 100644 --- a/Sources/CoreLibrary/Core/Plateau.cs +++ b/Sources/CoreLibrary/Core/Plateau.cs @@ -82,9 +82,9 @@ namespace CoreLibrary.Core /// Levée lorsque le code fourni est incomplet. public void AjouterCode(Code code) { - if (code.TailleMaximale() != tailleCode) + if (code.NbJetonsMax != tailleCode) { - throw new CodeInvalideException(code.TailleMaximale(), tailleCode); + throw new CodeInvalideException(code.NbJetonsMax, tailleCode); } if (!code.EstComplet()) @@ -111,9 +111,9 @@ namespace CoreLibrary.Core /// Levée lorsque le code fourni est incomplet. public bool EstBonCode(Code code) { - if (code.TailleMaximale() != tailleCode) + if (code.NbJetonsMax != tailleCode) { - throw new CodeInvalideException(code.TailleMaximale(), tailleCode); + throw new CodeInvalideException(code.NbJetonsMax, tailleCode); } if (!code.EstComplet()) diff --git a/Sources/CoreLibrary/Regles/ReglesClassiques.cs b/Sources/CoreLibrary/Regles/ReglesClassiques.cs index 7c929c2..d4bd89f 100644 --- a/Sources/CoreLibrary/Regles/ReglesClassiques.cs +++ b/Sources/CoreLibrary/Regles/ReglesClassiques.cs @@ -1,8 +1,4 @@ -using CoreLibrary.Core; -using CoreLibrary.Exceptions; -using CoreLibrary.Joueurs; - -namespace CoreLibrary.Regles +namespace CoreLibrary.Regles { /// /// Classe définissant les règles classiques du jeu. diff --git a/Sources/MauiSpark/Pages/Plateau.xaml b/Sources/MauiSpark/Pages/Plateau.xaml index 60e72d8..bf2362b 100644 --- a/Sources/MauiSpark/Pages/Plateau.xaml +++ b/Sources/MauiSpark/Pages/Plateau.xaml @@ -96,11 +96,29 @@ -