From d0dd55ab657917ffd8bd175abb21685b3a6f01c5 Mon Sep 17 00:00:00 2001 From: "pauline.prady" Date: Fri, 5 Apr 2024 15:26:37 +0200 Subject: [PATCH 1/3] Ajout classe Combinaison --- BibliothequeClasses/Combinaison.cs | 31 ++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 BibliothequeClasses/Combinaison.cs diff --git a/BibliothequeClasses/Combinaison.cs b/BibliothequeClasses/Combinaison.cs new file mode 100644 index 0000000..2ec2547 --- /dev/null +++ b/BibliothequeClasses/Combinaison.cs @@ -0,0 +1,31 @@ +namespace BibliothequeClasses +{ + public class Combinaison + { + + private int taillePhysique = 4; + private int tailleLogique = 0; + private Jeton[] lesJetons = new Jeton[0]; + + + public Jeton GetJeton(int indice) + { + return lesJetons[indice]; + } + + public void AjouterJeton(Jeton jeton) + { + lesJetons[tailleLogique++] = jeton; + } + + public void SupprimerDernierJeton() + { + --tailleLogique; + } + + public bool EstComplet() + { + return tailleLogique == taillePhysique; + } + } +} From fe0edefc683e1e71db8517b1f82479fe5b94ea69 Mon Sep 17 00:00:00 2001 From: "pauline.prady" Date: Tue, 9 Apr 2024 19:35:57 +0200 Subject: [PATCH 2/3] =?UTF-8?q?Cr=C3=A9ation=20combinaison,=20combinaison?= =?UTF-8?q?=20secrete=20et=20ombinaison=20joueur?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BibliothequeClasses/Combinaison.cs | 29 +++--------- BibliothequeClasses/CombinaisonIndicateur.cs | 40 +++++++++++++++++ BibliothequeClasses/CombinaisonJoueur.cs | 12 +++++ BibliothequeClasses/CombinaisonSecrete.cs | 47 ++++++++++++++++++++ BibliothequeClasses/Jeton.cs | 15 ------- BibliothequeClasses/abc.cs | 20 +++++++++ BibliothequeClasses/couleurs.cs | 15 ------- 7 files changed, 126 insertions(+), 52 deletions(-) create mode 100644 BibliothequeClasses/CombinaisonIndicateur.cs create mode 100644 BibliothequeClasses/CombinaisonJoueur.cs create mode 100644 BibliothequeClasses/CombinaisonSecrete.cs delete mode 100644 BibliothequeClasses/Jeton.cs create mode 100644 BibliothequeClasses/abc.cs delete mode 100644 BibliothequeClasses/couleurs.cs diff --git a/BibliothequeClasses/Combinaison.cs b/BibliothequeClasses/Combinaison.cs index 2ec2547..ffedd46 100644 --- a/BibliothequeClasses/Combinaison.cs +++ b/BibliothequeClasses/Combinaison.cs @@ -1,31 +1,16 @@ namespace BibliothequeClasses { - public class Combinaison + public abstract class Combinaison { - private int taillePhysique = 4; - private int tailleLogique = 0; - private Jeton[] lesJetons = new Jeton[0]; + protected static readonly int taillePhysique = 4; + public int TailleLogique { get; private set; } = 0; + private readonly Jeton[] lesJetons = new Jeton[taillePhysique]; + protected void AjouterJeton(Jeton jeton) => lesJetons[TailleLogique++] = jeton; - public Jeton GetJeton(int indice) - { - return lesJetons[indice]; - } + public Jeton GetJeton(int indice) => lesJetons[indice]; - public void AjouterJeton(Jeton jeton) - { - lesJetons[tailleLogique++] = jeton; - } - - public void SupprimerDernierJeton() - { - --tailleLogique; - } - - public bool EstComplet() - { - return tailleLogique == taillePhysique; - } + protected void SupprimerDernierJeton() => --TailleLogique; } } diff --git a/BibliothequeClasses/CombinaisonIndicateur.cs b/BibliothequeClasses/CombinaisonIndicateur.cs new file mode 100644 index 0000000..fd21fd1 --- /dev/null +++ b/BibliothequeClasses/CombinaisonIndicateur.cs @@ -0,0 +1,40 @@ +namespace BibliothequeClasses +{ + public class CombinaisonIndicateur : Combinaison + { + public CombinaisonIndicateur(CombinaisonJoueur combinaisonJoueur, CombinaisonSecrete combinaisonSecrete) + { + + } + + private void AjouterJetonBienPlace() + { + JetonIndicateur jeton = new JetonIndicateur(Couleur.Noir); + base.AjouterJeton(jeton); + } + + private void AjouterJetonBonneCouleur() + { + JetonIndicateur jeton = new JetonIndicateur(Couleur.Blanc); + base.AjouterJeton(jeton); + } + + private bool ComparerJeton(JetonJoueur jetonJoueur, JetonJoueur jetonSecret) + { + return jetonJoueur.Couleur == jetonSecret.Couleur; + } + + private bool ContientJeton(JetonJoueur jetonJoueur, JetonJoueur[] jetonsSecret) + { + for(int i = 0; i < jetonsSecret.Length; i++) + { + if(ComparerJeton(jetonJoueur, jetonsSecret[i])) + { + return true; + } + } + + return false; + } + } +} diff --git a/BibliothequeClasses/CombinaisonJoueur.cs b/BibliothequeClasses/CombinaisonJoueur.cs new file mode 100644 index 0000000..88ba4d8 --- /dev/null +++ b/BibliothequeClasses/CombinaisonJoueur.cs @@ -0,0 +1,12 @@ +namespace BibliothequeClasses +{ + public class CombinaisonJoueur : Combinaison + { + + public void AjouterJeton(JetonJoueur jetonJoueur) => base.AjouterJeton(jetonJoueur); + + public new void SupprimerDernierJeton() => base.SupprimerDernierJeton(); + + public bool EstComplete() => base.TailleLogique == Combinaison.taillePhysique; + } +} diff --git a/BibliothequeClasses/CombinaisonSecrete.cs b/BibliothequeClasses/CombinaisonSecrete.cs new file mode 100644 index 0000000..9b45ba6 --- /dev/null +++ b/BibliothequeClasses/CombinaisonSecrete.cs @@ -0,0 +1,47 @@ +namespace BibliothequeClasses +{ + public class CombinaisonSecrete : Combinaison + { + private static readonly Couleur[] couleurs = (Couleur[])Enum.GetValues(typeof(Couleur)); + private static readonly Random rand = new Random(); + + public CombinaisonSecrete() + { + for(int i = 0; i < Combinaison.taillePhysique; i++) { + this.AjouterJetonAleatoire(); + } + } + + private void AjouterJetonAleatoire() + { + JetonJoueur jeton = CombinaisonSecrete.GenererJetonAleatoire(); + base.AjouterJeton(jeton); + } + + private static JetonJoueur GenererJetonAleatoire() + { + int indice = rand.Next(couleurs.Length); + Couleur couleur = couleurs[indice]; + + return new JetonJoueur(couleur); + } + + public bool EstEgale(CombinaisonJoueur combinaisonJoueur) + { + if(!combinaisonJoueur.EstComplete()) + { + throw new Exception("Combinaison imcomplete"); + } + + for(int indice = 0; indice < CombinaisonSecrete.taillePhysique; ++indice) + { + if(this.GetJeton(indice).Couleur != combinaisonJoueur.GetJeton(indice).Couleur) + { + return false; + } + } + + return true; + } + } +} diff --git a/BibliothequeClasses/Jeton.cs b/BibliothequeClasses/Jeton.cs deleted file mode 100644 index acbb96d..0000000 --- a/BibliothequeClasses/Jeton.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace BibliothequeClasses -{ - /// - /// Class jeton qui peut recuperer la couleu du jeton et la changer - /// - public class Jeton - { - - public Couleur Couleur - { - get; - set; - } - } -} diff --git a/BibliothequeClasses/abc.cs b/BibliothequeClasses/abc.cs new file mode 100644 index 0000000..234e865 --- /dev/null +++ b/BibliothequeClasses/abc.cs @@ -0,0 +1,20 @@ +namespace BibliothequeClasses +{ + public enum Couleur { Noir, Blanc, Rouge }; + + public abstract class Jeton + { + public Couleur Couleur { get; set; } + public Jeton(Couleur couleur) { } + } + + public class JetonJoueur : Jeton + { + public JetonJoueur(Couleur couleur): base(couleur) { } + } + + public class JetonIndicateur : Jeton + { + public JetonIndicateur(Couleur couleur) : base(couleur) { } + } +} diff --git a/BibliothequeClasses/couleurs.cs b/BibliothequeClasses/couleurs.cs deleted file mode 100644 index 7379fd7..0000000 --- a/BibliothequeClasses/couleurs.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace BibliothequeClasses -{ - /// - /// Enumeration des 6 couleurs que peuvent prendre les jetons - /// - public enum Couleur - { - Rouge, - Bleu, - Vert, - Jaune, - Noir, - Blanc, - } -} \ No newline at end of file From 993529e94137953153a781113e72962c95ad081f Mon Sep 17 00:00:00 2001 From: "pauline.prady" Date: Fri, 12 Apr 2024 16:34:21 +0200 Subject: [PATCH 3/3] Classe combinaison indicateur fini --- BibliothequeClasses/CombinaisonIndicateur.cs | 52 ++++++++++++++++---- 1 file changed, 42 insertions(+), 10 deletions(-) diff --git a/BibliothequeClasses/CombinaisonIndicateur.cs b/BibliothequeClasses/CombinaisonIndicateur.cs index fd21fd1..59d5073 100644 --- a/BibliothequeClasses/CombinaisonIndicateur.cs +++ b/BibliothequeClasses/CombinaisonIndicateur.cs @@ -4,7 +4,47 @@ { public CombinaisonIndicateur(CombinaisonJoueur combinaisonJoueur, CombinaisonSecrete combinaisonSecrete) { + if(!combinaisonJoueur.EstComplete()) + { + throw new ArgumentException("Combinaison non complète"); + } + + JetonJoueur?[] lesJetonsJoueur = new JetonJoueur?[combinaisonJoueur.TailleLogique]; + for(int i = 0; i < combinaisonJoueur.TailleLogique; ++i) + { + lesJetonsJoueur[i] = (JetonJoueur) combinaisonJoueur.GetJeton(i); + } + + JetonJoueur?[] lesJetonsSecret = new JetonJoueur?[combinaisonSecrete.TailleLogique]; + for (int i = 0; i < combinaisonSecrete.TailleLogique; ++i) + { + lesJetonsSecret[i] = (JetonJoueur)combinaisonSecrete.GetJeton(i); + } + + for (int i = 0; i < Combinaison.taillePhysique; ++i) + { + JetonJoueur? jetonJoueur = lesJetonsJoueur[i]; + JetonJoueur? jetonSecret = lesJetonsSecret[i]; + if (jetonJoueur is not null && jetonSecret is not null && ComparerJeton(jetonJoueur, jetonSecret)) + { + AjouterJetonBienPlace(); + lesJetonsJoueur[i] = null; + lesJetonsSecret[i] = null; + } + } + + for (int i = 0; i < Combinaison.taillePhysique; ++i) + { + JetonJoueur? jetonJoueur = lesJetonsJoueur[i]; + + if (jetonJoueur is not null && ContientJeton(jetonJoueur, lesJetonsSecret)) + { + AjouterJetonBonneCouleur(); + lesJetonsJoueur[i] = null; + lesJetonsSecret[i] = null; + } + } } private void AjouterJetonBienPlace() @@ -24,17 +64,9 @@ return jetonJoueur.Couleur == jetonSecret.Couleur; } - private bool ContientJeton(JetonJoueur jetonJoueur, JetonJoueur[] jetonsSecret) + private bool ContientJeton(JetonJoueur jetonJoueur, JetonJoueur?[] jetonsSecret) { - for(int i = 0; i < jetonsSecret.Length; i++) - { - if(ComparerJeton(jetonJoueur, jetonsSecret[i])) - { - return true; - } - } - - return false; + return Array.IndexOf(jetonsSecret, jetonJoueur) != -1; } } }