From ca3ec81ae61b08011133d4786a09873b9a7cadf4 Mon Sep 17 00:00:00 2001 From: Alexis DRAI Date: Sat, 8 Oct 2022 12:31:47 +0200 Subject: [PATCH] :bug: Prevent Die ctor from making dice with no face --- Sources/App/Program.cs | 30 +++++++++++++++++++++++++--- Sources/Data/Stub.cs | 10 +++++----- Sources/Model/Dice/ColorDie.cs | 4 ++-- Sources/Model/Dice/Die.cs | 4 ++-- Sources/Model/Dice/HomogeneousDie.cs | 3 ++- Sources/Model/Dice/ImageDie.cs | 3 ++- Sources/Model/Dice/NumberDie.cs | 3 ++- 7 files changed, 42 insertions(+), 15 deletions(-) diff --git a/Sources/App/Program.cs b/Sources/App/Program.cs index ea0a9bb..9bd769d 100644 --- a/Sources/App/Program.cs +++ b/Sources/App/Program.cs @@ -274,13 +274,17 @@ namespace App Console.WriteLine("create a face with a number, or enter 'ok' if you're finished"); menuChoiceNewFaces = Console.ReadLine(); + PreventEmptyDieCreation(ref menuChoiceNewFaces, faces.Count); + if (!menuChoiceNewFaces.Equals("ok") && int.TryParse(menuChoiceNewFaces, out int num)) { faces.Add(new(num)); } } - die = new NumberDie(faces.ToArray()); + NumberFace[] facesArr = faces.ToArray(); + + die = new NumberDie(facesArr[0], facesArr[1..]); return die; } @@ -294,10 +298,15 @@ namespace App { Console.WriteLine("create a face with an color name, or enter 'ok' if you're finished"); menuChoiceNewFaces = Console.ReadLine(); + + PreventEmptyDieCreation(ref menuChoiceNewFaces, faces.Count); + if (menuChoiceNewFaces != "ok") faces.Add(new(Color.FromName(menuChoiceNewFaces))); } - die = new ColorDie(faces.ToArray()); + ColorFace[] facesArr = faces.ToArray(); + + die = new ColorDie(facesArr[0], facesArr[1..]); return die; } @@ -312,6 +321,8 @@ namespace App Console.WriteLine("create a face with an image uri, or enter 'ok' if you're finished"); menuChoiceNewFaces = Console.ReadLine(); + PreventEmptyDieCreation(ref menuChoiceNewFaces, faces.Count); + if (menuChoiceNewFaces != "ok") { try @@ -329,10 +340,23 @@ namespace App } } } - die = new ImageDie(faces.ToArray()); + + ImageFace[] facesArr = faces.ToArray(); + + die = new ImageDie(facesArr[0], facesArr[1..]); return die; } + + private static void PreventEmptyDieCreation(ref string menuChoice, int count) + { + if (menuChoice.Equals("ok") && count == 0) + { + Console.WriteLine("create at least one valid face"); + menuChoice = ""; // persiste en dehors du scope de cette fonction + } + } + private static IEnumerable PrepareDice(MasterOfCeremonies masterOfCeremonies) { List result = new(); diff --git a/Sources/Data/Stub.cs b/Sources/Data/Stub.cs index 7137aed..cc9e1a0 100644 --- a/Sources/Data/Stub.cs +++ b/Sources/Data/Stub.cs @@ -27,8 +27,8 @@ namespace Data NumberFace[] d6Faces = new NumberFace[] { new(1), new(2), new(3), new(4), new(5), new(6) }; monopolyDice.Add(new NumberDie(new NumberFace(1), new NumberFace(1), new NumberFace(1), new NumberFace(1))); - monopolyDice.Add(new NumberDie(d6Faces)); - monopolyDice.Add(new NumberDie(d6Faces)); + monopolyDice.Add(new NumberDie(d6Faces[0], d6Faces[1..])); + monopolyDice.Add(new NumberDie(d6Faces[0], d6Faces[1..])); ColorFace[] colorFaces = new ColorFace[] { @@ -40,7 +40,7 @@ namespace Data new(Color.FromName("white")) }; - monopolyDice.Add(new ColorDie(colorFaces)); + monopolyDice.Add(new ColorDie(colorFaces[0], colorFaces[1..])); string rootPath = "https://unsplash.com/photos/"; @@ -52,7 +52,7 @@ namespace Data new(new Uri(rootPath + "A_Ncbi-RH6s")), }; - monopolyDice.Add(new ImageDie(imageFaces)); + monopolyDice.Add(new ImageDie(imageFaces[0], imageFaces[1..])); NumberFace[] d20Faces = new NumberFace[] { new(1), new(2), new(3), new(4), new(5), @@ -61,7 +61,7 @@ namespace Data new(16), new(17), new(18), new(19), new(20) }; - dndDice.Add(new NumberDie(d20Faces)); + dndDice.Add(new NumberDie(d20Faces[0], d20Faces[1..])); gr.DiceGroupManager.Add(new KeyValuePair>(dndName, dndDice.AsEnumerable())); gr.DiceGroupManager.Add(new KeyValuePair>(monopolyName, monopolyDice.AsEnumerable())); diff --git a/Sources/Model/Dice/ColorDie.cs b/Sources/Model/Dice/ColorDie.cs index 547222c..7fcd416 100644 --- a/Sources/Model/Dice/ColorDie.cs +++ b/Sources/Model/Dice/ColorDie.cs @@ -5,9 +5,9 @@ namespace Model.Dice { public class ColorDie : HomogeneousDie { - public ColorDie(params ColorFace[] faces) : base(faces) + public ColorDie(ColorFace first, params ColorFace[] faces) + : base(first, faces) { - } } } diff --git a/Sources/Model/Dice/Die.cs b/Sources/Model/Dice/Die.cs index 6a62f47..686e194 100644 --- a/Sources/Model/Dice/Die.cs +++ b/Sources/Model/Dice/Die.cs @@ -13,9 +13,9 @@ namespace Model.Dice private readonly List faces = new(); - protected Die(params Face[] faces) + protected Die(Face first, params Face[] faces) { - this.faces.AddRange(faces); + this.faces.AddRange(faces.Append(first)); } public virtual Face GetRandomFace() diff --git a/Sources/Model/Dice/HomogeneousDie.cs b/Sources/Model/Dice/HomogeneousDie.cs index 6ccd6a9..b882bc7 100644 --- a/Sources/Model/Dice/HomogeneousDie.cs +++ b/Sources/Model/Dice/HomogeneousDie.cs @@ -4,7 +4,8 @@ namespace Model.Dice { public abstract class HomogeneousDie : Die { - protected HomogeneousDie(params Face[] faces) : base(faces) + protected HomogeneousDie(Face first, params Face[] faces) + : base(first, faces) { } diff --git a/Sources/Model/Dice/ImageDie.cs b/Sources/Model/Dice/ImageDie.cs index 43a1754..3fddbbe 100644 --- a/Sources/Model/Dice/ImageDie.cs +++ b/Sources/Model/Dice/ImageDie.cs @@ -5,7 +5,8 @@ namespace Model.Dice { public class ImageDie : HomogeneousDie { - public ImageDie(params ImageFace[] faces) : base(faces) + public ImageDie(ImageFace first, params ImageFace[] faces) + : base(first, faces) { } } diff --git a/Sources/Model/Dice/NumberDie.cs b/Sources/Model/Dice/NumberDie.cs index dede1cd..653960c 100644 --- a/Sources/Model/Dice/NumberDie.cs +++ b/Sources/Model/Dice/NumberDie.cs @@ -4,7 +4,8 @@ namespace Model.Dice { public class NumberDie : HomogeneousDie { - public NumberDie(params NumberFace[] faces) : base(faces) + public NumberDie(NumberFace first, params NumberFace[] faces) + : base(first, faces) { } }