From 6e6f999b093ee8de0e6251d253b815cc52168e54 Mon Sep 17 00:00:00 2001 From: Ismail TAHA JANAN Date: Fri, 30 Sep 2022 12:29:28 +0200 Subject: [PATCH 1/8] simple commit --- Sources/Model/Dice/AbstractDie.cs | 2 +- Sources/Model/Dice/ColorDie.cs | 3 +- Sources/Model/Dice/Faces/AbstractDieFace.cs | 11 +++++-- Sources/Model/Dice/Faces/ColorDieFace.cs | 35 +++++---------------- Sources/Model/Dice/Faces/ImageDieFace.cs | 17 ++++------ Sources/Model/Dice/Faces/NumberDieFace.cs | 10 +++--- Sources/Model/Dice/ImageDie.cs | 2 +- Sources/Model/Dice/NumberDie.cs | 2 +- 8 files changed, 31 insertions(+), 51 deletions(-) diff --git a/Sources/Model/Dice/AbstractDie.cs b/Sources/Model/Dice/AbstractDie.cs index 2340067..d9c4626 100644 --- a/Sources/Model/Dice/AbstractDie.cs +++ b/Sources/Model/Dice/AbstractDie.cs @@ -5,7 +5,7 @@ using Model.Dice.Faces; namespace Model.Dice { - public abstract class AbstractDie : RandomnessHaver where T : AbstractDieFace + public abstract class AbstractDie : RandomnessHaver where T : AbstractDieFace { public IEnumerable ListFaces => listFaces; diff --git a/Sources/Model/Dice/ColorDie.cs b/Sources/Model/Dice/ColorDie.cs index 454e4d6..b5f016b 100644 --- a/Sources/Model/Dice/ColorDie.cs +++ b/Sources/Model/Dice/ColorDie.cs @@ -3,13 +3,14 @@ using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Model.Dice { - public class ColorDie : AbstractDie + public class ColorDie : AbstractDie { public ColorDie(params ColorDieFace[] faces) : base(faces) { diff --git a/Sources/Model/Dice/Faces/AbstractDieFace.cs b/Sources/Model/Dice/Faces/AbstractDieFace.cs index ae09083..3872a0f 100644 --- a/Sources/Model/Dice/Faces/AbstractDieFace.cs +++ b/Sources/Model/Dice/Faces/AbstractDieFace.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; namespace Model.Dice.Faces { - public abstract class AbstractDieFace + public abstract class AbstractDieFace { /// /// every die face has a value, and they can all be represented by an int, @@ -14,9 +14,14 @@ namespace Model.Dice.Faces ///
/// USE GetPracticalValue for a Value specific to face type ///
- public int Value { get; protected set; } + public T Value { get; protected set; } - public abstract object GetPracticalValue(); + public abstract T GetPracticalValue(); + + public AbstractDieFace(T value) + { + Value = value; + } public override string ToString() { diff --git a/Sources/Model/Dice/Faces/ColorDieFace.cs b/Sources/Model/Dice/Faces/ColorDieFace.cs index 77b5d3c..4465203 100644 --- a/Sources/Model/Dice/Faces/ColorDieFace.cs +++ b/Sources/Model/Dice/Faces/ColorDieFace.cs @@ -1,45 +1,26 @@ using System; using System.Collections.Generic; +using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Model.Dice.Faces { - public class ColorDieFace : AbstractDieFace + public class ColorDieFace : AbstractDieFace { - private static readonly int MAX_HEX = 16777215; + /// - /// accepts hex strings like "ffbb84" and "#af567d" ([RRGGBB]) /// - /// hex string - public ColorDieFace(string hexValueString) - { - // https://stackoverflow.com/questions/1139957/convert-integer-to-hexadecimal-and-back-again - // we remove any initial '#' before parsing - if (hexValueString.StartsWith('#')) - { - hexValueString = hexValueString[1..]; - } - - int result = int.Parse(hexValueString, System.Globalization.NumberStyles.HexNumber); + /// Color type + public ColorDieFace(Color hexValueString):base(hexValueString) + {} - if (result < 0) Value = 0; - else if (result > MAX_HEX) Value = MAX_HEX; - else Value = result; - } - /// - /// accepts a decimal value that represents a color hex (0 is black, 65280 is green...) - /// - /// - public ColorDieFace(int decimalValue) - : this(decimalValue.ToString()) - { } - public override object GetPracticalValue() + public override Color GetPracticalValue() { // https://stackoverflow.com/questions/1139957/convert-integer-to-hexadecimal-and-back-again - return Value.ToString("X6").Insert(0, "#"); + return Value; } } } diff --git a/Sources/Model/Dice/Faces/ImageDieFace.cs b/Sources/Model/Dice/Faces/ImageDieFace.cs index 84d472b..671951f 100644 --- a/Sources/Model/Dice/Faces/ImageDieFace.cs +++ b/Sources/Model/Dice/Faces/ImageDieFace.cs @@ -7,21 +7,16 @@ using System.Threading.Tasks; namespace Model.Dice.Faces { - public class ImageDieFace : AbstractDieFace + public class ImageDieFace : AbstractDieFace { - public ImageDieFace(string uri) - { - Value = int.Parse(Path.GetFileNameWithoutExtension(uri)); - } + public ImageDieFace(Uri uri):base(uri) + {} + - public ImageDieFace(int code) - { - Value = code; - } - public override object GetPracticalValue() + public override Uri GetPracticalValue() { - return string.Format($"Assets/images/{Value}.png"); + return Value; } } } diff --git a/Sources/Model/Dice/Faces/NumberDieFace.cs b/Sources/Model/Dice/Faces/NumberDieFace.cs index 5aa7adf..3bb494e 100644 --- a/Sources/Model/Dice/Faces/NumberDieFace.cs +++ b/Sources/Model/Dice/Faces/NumberDieFace.cs @@ -6,14 +6,12 @@ using System.Threading.Tasks; namespace Model.Dice.Faces { - public class NumberDieFace : AbstractDieFace + public class NumberDieFace : AbstractDieFace { - public NumberDieFace(int value) - { - Value = value; - } + public NumberDieFace(int value):base(value) + {} - public override object GetPracticalValue() + public override int GetPracticalValue() { return Value; } diff --git a/Sources/Model/Dice/ImageDie.cs b/Sources/Model/Dice/ImageDie.cs index 7a8879b..c537221 100644 --- a/Sources/Model/Dice/ImageDie.cs +++ b/Sources/Model/Dice/ImageDie.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; namespace Model.Dice { - public class ImageDie : AbstractDie + public class ImageDie : AbstractDie { public ImageDie(params ImageDieFace[] faces) : base(faces) { diff --git a/Sources/Model/Dice/NumberDie.cs b/Sources/Model/Dice/NumberDie.cs index 013c5fa..bb8435e 100644 --- a/Sources/Model/Dice/NumberDie.cs +++ b/Sources/Model/Dice/NumberDie.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; namespace Model.Dice { - public class NumberDie : AbstractDie + public class NumberDie : AbstractDie { public NumberDie(params NumberDieFace[] faces) : base(faces) { -- 2.36.3 From 1149c916c413652731f2585de3160fc00bee7a5d Mon Sep 17 00:00:00 2001 From: Ismail TAHA JANAN Date: Fri, 30 Sep 2022 15:27:46 +0200 Subject: [PATCH 2/8] simple commit --- Sources/Data/Stub.cs | 4 +-- Sources/Model/Dice/AbstractDie.cs | 4 +-- Sources/Model/Dice/DieManager.cs | 49 ++++++++++++++++++++------- Sources/Model/Dice/HomogeneousDice.cs | 17 ++++++++++ Sources/Model/Dice/ImageDie.cs | 2 +- Sources/Model/Dice/NumberDie.cs | 2 +- Sources/Model/Games/Game.cs | 8 ++--- Sources/Model/Games/GameRunner.cs | 8 ++--- 8 files changed, 67 insertions(+), 27 deletions(-) create mode 100644 Sources/Model/Dice/HomogeneousDice.cs diff --git a/Sources/Data/Stub.cs b/Sources/Data/Stub.cs index e61ee46..38b7923 100644 --- a/Sources/Data/Stub.cs +++ b/Sources/Data/Stub.cs @@ -20,8 +20,8 @@ namespace Data gr.GlobalPlayerManager.Add(player3); - List> monopolyDice = new(); - List> dndDice = new(); + List monopolyDice = new(); + List dndDice = new(); string monopolyName = "Monopoly", dndName = "DnD"; diff --git a/Sources/Model/Dice/AbstractDie.cs b/Sources/Model/Dice/AbstractDie.cs index d9c4626..e9b6379 100644 --- a/Sources/Model/Dice/AbstractDie.cs +++ b/Sources/Model/Dice/AbstractDie.cs @@ -5,9 +5,9 @@ using Model.Dice.Faces; namespace Model.Dice { - public abstract class AbstractDie : RandomnessHaver where T : AbstractDieFace + public abstract class AbstractDie : RandomnessHaver { - public IEnumerable ListFaces => listFaces; + public IEnumerable> ListFaces => listFaces; private readonly List listFaces = new(); diff --git a/Sources/Model/Dice/DieManager.cs b/Sources/Model/Dice/DieManager.cs index 06e3a52..b13fe37 100644 --- a/Sources/Model/Dice/DieManager.cs +++ b/Sources/Model/Dice/DieManager.cs @@ -5,35 +5,45 @@ using System.Linq; namespace Model.Dice { - public class DieManager : IManager>>> + public class DieManager : IManager,object>>>> { - private readonly Dictionary>> diceGroups = new(); + private readonly Dictionary,object>>> diceGroups = new(); - public KeyValuePair>> Add(KeyValuePair>> toAdd) + public KeyValuePair,object>>> Add(KeyValuePair,object>>> toAdd) { // on trim la clé d'abord diceGroups.Add(toAdd.Key.Trim(), toAdd.Value); return toAdd; - } - - public IEnumerable>>> GetAll() + } + + public IEnumerable,object>>>> GetAll() { return diceGroups.AsEnumerable(); } - public KeyValuePair>> GetOneByName(string name) + public KeyValuePair,object>>> GetOneByName(string name) { // les groupes de dés nommés : // ils sont case-sensistive, mais "mon jeu" == "mon jeu " == " mon jeu" - return new KeyValuePair>>(name, diceGroups[name]); + return new KeyValuePair,object>>>(name, diceGroups[name]); } - public void Remove(KeyValuePair>> toRemove) + public void Remove(KeyValuePair,object>>> toRemove) { diceGroups.Remove(toRemove.Key); - } - - public KeyValuePair>> Update(KeyValuePair>> before, KeyValuePair>> after) + } + + /*public void Remove(KeyValuePair, object>>> toRemove) + { + throw new NotImplementedException(); + } + + public void Remove(KeyValuePair, object>>> toRemove) + { + throw new NotImplementedException(); + }*/ + + public KeyValuePair,object>>> Update(KeyValuePair,object>>> before, KeyValuePair,object>>> after) { // pas autorisé de changer les dés, juste le nom if (!before.Value.Equals(after.Value)) @@ -48,6 +58,19 @@ namespace Model.Dice return after; } return before; - } + } + + + IEnumerable, object>>>> IManager, object>>>>.GetAll() + { + throw new NotImplementedException(); + } + + + KeyValuePair, object>>> IManager, object>>>>.GetOneByName(string name) + { + throw new NotImplementedException(); + } + } } diff --git a/Sources/Model/Dice/HomogeneousDice.cs b/Sources/Model/Dice/HomogeneousDice.cs new file mode 100644 index 0000000..4f6cdce --- /dev/null +++ b/Sources/Model/Dice/HomogeneousDice.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Model.Dice.Faces; + +namespace Model.Dice +{ + public class HomogeneousDice: AbstractDie,object> + { + public HomogeneousDice(params AbstractDieFace[] faces) : base(faces) + { + + } + } +} diff --git a/Sources/Model/Dice/ImageDie.cs b/Sources/Model/Dice/ImageDie.cs index c537221..bf97ab4 100644 --- a/Sources/Model/Dice/ImageDie.cs +++ b/Sources/Model/Dice/ImageDie.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; namespace Model.Dice { - public class ImageDie : AbstractDie + public class ImageDie : HomogeneousDice { public ImageDie(params ImageDieFace[] faces) : base(faces) { diff --git a/Sources/Model/Dice/NumberDie.cs b/Sources/Model/Dice/NumberDie.cs index bb8435e..6b2379e 100644 --- a/Sources/Model/Dice/NumberDie.cs +++ b/Sources/Model/Dice/NumberDie.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; namespace Model.Dice { - public class NumberDie : AbstractDie + public class NumberDie : HomogeneousDice { public NumberDie(params NumberDieFace[] faces) : base(faces) { diff --git a/Sources/Model/Games/Game.cs b/Sources/Model/Games/Game.cs index 9ed1d40..303ae07 100644 --- a/Sources/Model/Games/Game.cs +++ b/Sources/Model/Games/Game.cs @@ -57,8 +57,8 @@ namespace Model.Games /// /// the group of dice used for this game /// - public IEnumerable> Dice => dice; - private readonly IEnumerable> dice; + public IEnumerable,object>> Dice => dice; + private readonly IEnumerable, object>> dice; /// /// constructs a Game with its own history of Turns. @@ -68,7 +68,7 @@ namespace Model.Games /// the turns that have been done so far /// the game's player manager, doing CRUD on players and switching whose turn it is /// the group of dice used for this game - public Game(string name, IManager playerManager, IEnumerable> dice, IEnumerable turns) + public Game(string name, IManager playerManager, IEnumerable, object>> dice, IEnumerable turns) { Name = name; PlayerManager = playerManager; @@ -83,7 +83,7 @@ namespace Model.Games /// the name of the game 😎 /// the game's player manager, doing CRUD on players and switching whose turn it is /// the group of dice used for this game - public Game(string name, IManager playerManager, IEnumerable> dice) + public Game(string name, IManager playerManager, IEnumerable, object>> dice) : this(name, playerManager, dice, null) { } diff --git a/Sources/Model/Games/GameRunner.cs b/Sources/Model/Games/GameRunner.cs index eb24f80..4498d7f 100644 --- a/Sources/Model/Games/GameRunner.cs +++ b/Sources/Model/Games/GameRunner.cs @@ -12,17 +12,17 @@ namespace Model.Games public class GameRunner : IManager { public IManager GlobalPlayerManager { get; private set; } - public IManager>>> GlobalDieManager { get; private set; } + public IManager,object>>>> GlobalDieManager { get; private set; } private readonly List games; - public GameRunner(IManager globalPlayerManager, IManager>>> globalDieManager, List games) + public GameRunner(IManager globalPlayerManager, IManager,object>>>> globalDieManager, List games) { GlobalPlayerManager = globalPlayerManager; GlobalDieManager = globalDieManager; this.games = games ?? new(); } - public GameRunner(IManager globalPlayerManager, IManager>>> globalDieManager) + public GameRunner(IManager globalPlayerManager, IManager,object>>>> globalDieManager) : this(globalPlayerManager, globalDieManager, null){ } @@ -65,7 +65,7 @@ namespace Model.Games /// /// creates a new game /// - public Game StartNewGame(string name, IManager playerManager, IEnumerable> dice) + public Game StartNewGame(string name, IManager playerManager, IEnumerable,object>> dice) { Game game = new(name, playerManager, dice); return Add(game); -- 2.36.3 From 3a263b4dca3e03f9c5690167415ed45b5ac6c3b7 Mon Sep 17 00:00:00 2001 From: Ismail TAHA JANAN Date: Sat, 1 Oct 2022 14:40:10 +0200 Subject: [PATCH 3/8] simple commit --- Sources/Model/Dice/AbstractDie.cs | 6 +++--- Sources/Model/Dice/ColorDie.cs | 2 +- Sources/Model/Dice/DieManager.cs | 24 ++++++++++++------------ Sources/Model/Dice/HomogeneousDice.cs | 4 ++-- Sources/Model/Dice/ImageDie.cs | 2 +- Sources/Model/Dice/NumberDie.cs | 2 +- Sources/Model/Games/Game.cs | 14 +++++++------- 7 files changed, 27 insertions(+), 27 deletions(-) diff --git a/Sources/Model/Dice/AbstractDie.cs b/Sources/Model/Dice/AbstractDie.cs index e9b6379..3d36f6c 100644 --- a/Sources/Model/Dice/AbstractDie.cs +++ b/Sources/Model/Dice/AbstractDie.cs @@ -9,14 +9,14 @@ namespace Model.Dice { public IEnumerable> ListFaces => listFaces; - private readonly List listFaces = new(); + private readonly List> listFaces = new(); - protected AbstractDie(params T[] faces) + protected AbstractDie(params AbstractDieFace[] faces) { listFaces.AddRange(faces); } - public T GetRandomFace() + public AbstractDieFace GetRandomFace() { int faceIndex = rnd.Next(0, ListFaces.Count()); return ListFaces.ElementAt(faceIndex); diff --git a/Sources/Model/Dice/ColorDie.cs b/Sources/Model/Dice/ColorDie.cs index b5f016b..d136db8 100644 --- a/Sources/Model/Dice/ColorDie.cs +++ b/Sources/Model/Dice/ColorDie.cs @@ -10,7 +10,7 @@ using System.Threading.Tasks; namespace Model.Dice { - public class ColorDie : AbstractDie + public class ColorDie : AbstractDie { public ColorDie(params ColorDieFace[] faces) : base(faces) { diff --git a/Sources/Model/Dice/DieManager.cs b/Sources/Model/Dice/DieManager.cs index b13fe37..704f200 100644 --- a/Sources/Model/Dice/DieManager.cs +++ b/Sources/Model/Dice/DieManager.cs @@ -5,30 +5,30 @@ using System.Linq; namespace Model.Dice { - public class DieManager : IManager,object>>>> + public class DieManager : IManager>>>> { - private readonly Dictionary,object>>> diceGroups = new(); + private readonly Dictionary>>> diceGroups = new(); - public KeyValuePair,object>>> Add(KeyValuePair,object>>> toAdd) + public KeyValuePair>>> Add(KeyValuePair>>> toAdd) { // on trim la clé d'abord diceGroups.Add(toAdd.Key.Trim(), toAdd.Value); return toAdd; } - public IEnumerable,object>>>> GetAll() + public IEnumerable>>>> GetAll() { return diceGroups.AsEnumerable(); } - public KeyValuePair,object>>> GetOneByName(string name) + public KeyValuePair>>> GetOneByName(string name) { // les groupes de dés nommés : // ils sont case-sensistive, mais "mon jeu" == "mon jeu " == " mon jeu" - return new KeyValuePair,object>>>(name, diceGroups[name]); + return new KeyValuePair>>>(name, diceGroups[name]); } - public void Remove(KeyValuePair,object>>> toRemove) + public void Remove(KeyValuePair>>> toRemove) { diceGroups.Remove(toRemove.Key); } @@ -43,7 +43,7 @@ namespace Model.Dice throw new NotImplementedException(); }*/ - public KeyValuePair,object>>> Update(KeyValuePair,object>>> before, KeyValuePair,object>>> after) + public KeyValuePair>>> Update(KeyValuePair>>> before, KeyValuePair>>> after) { // pas autorisé de changer les dés, juste le nom if (!before.Value.Equals(after.Value)) @@ -60,17 +60,17 @@ namespace Model.Dice return before; } - - IEnumerable, object>>>> IManager, object>>>>.GetAll() +/* + IEnumerable>>> IManager>>>>.GetAll() { throw new NotImplementedException(); } - KeyValuePair, object>>> IManager, object>>>>.GetOneByName(string name) + KeyValuePair>>> IManager>>>>.GetOneByName(string name) { throw new NotImplementedException(); } - +*/ } } diff --git a/Sources/Model/Dice/HomogeneousDice.cs b/Sources/Model/Dice/HomogeneousDice.cs index 4f6cdce..efe626e 100644 --- a/Sources/Model/Dice/HomogeneousDice.cs +++ b/Sources/Model/Dice/HomogeneousDice.cs @@ -7,9 +7,9 @@ using Model.Dice.Faces; namespace Model.Dice { - public class HomogeneousDice: AbstractDie,object> + public class HomogeneousDice: AbstractDie { - public HomogeneousDice(params AbstractDieFace[] faces) : base(faces) + public HomogeneousDice(params AbstractDieFace[] faces) : base(faces) { } diff --git a/Sources/Model/Dice/ImageDie.cs b/Sources/Model/Dice/ImageDie.cs index bf97ab4..3a17e44 100644 --- a/Sources/Model/Dice/ImageDie.cs +++ b/Sources/Model/Dice/ImageDie.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; namespace Model.Dice { - public class ImageDie : HomogeneousDice + public class ImageDie : HomogeneousDice { public ImageDie(params ImageDieFace[] faces) : base(faces) { diff --git a/Sources/Model/Dice/NumberDie.cs b/Sources/Model/Dice/NumberDie.cs index 6b2379e..556ee2d 100644 --- a/Sources/Model/Dice/NumberDie.cs +++ b/Sources/Model/Dice/NumberDie.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; namespace Model.Dice { - public class NumberDie : HomogeneousDice + public class NumberDie : HomogeneousDice { public NumberDie(params NumberDieFace[] faces) : base(faces) { diff --git a/Sources/Model/Games/Game.cs b/Sources/Model/Games/Game.cs index 303ae07..6b9a85b 100644 --- a/Sources/Model/Games/Game.cs +++ b/Sources/Model/Games/Game.cs @@ -57,8 +57,8 @@ namespace Model.Games /// /// the group of dice used for this game /// - public IEnumerable,object>> Dice => dice; - private readonly IEnumerable, object>> dice; + public IEnumerable>> Dice => dice; + private readonly IEnumerable>> dice; /// /// constructs a Game with its own history of Turns. @@ -68,7 +68,7 @@ namespace Model.Games /// the turns that have been done so far /// the game's player manager, doing CRUD on players and switching whose turn it is /// the group of dice used for this game - public Game(string name, IManager playerManager, IEnumerable, object>> dice, IEnumerable turns) + public Game(string name, IManager playerManager, IEnumerable>> dice, IEnumerable turns) { Name = name; PlayerManager = playerManager; @@ -83,7 +83,7 @@ namespace Model.Games /// the name of the game 😎 /// the game's player manager, doing CRUD on players and switching whose turn it is /// the group of dice used for this game - public Game(string name, IManager playerManager, IEnumerable, object>> dice) + public Game(string name, IManager playerManager, IEnumerable>> dice) : this(name, playerManager, dice, null) { } @@ -161,10 +161,10 @@ namespace Model.Games /// throws all the Dice in FavGroup and returns a list of their Faces /// /// list of AbstractDieFaces after a throw - private Dictionary, AbstractDieFace> ThrowAll() + private Dictionary>, AbstractDieFace> ThrowAll() { - Dictionary, AbstractDieFace> faces = new(); - foreach (AbstractDie die in dice) + Dictionary>, AbstractDieFace> faces = new(); + foreach (AbstractDie> die in dice) { faces.Add(die, die.GetRandomFace()); } -- 2.36.3 From d4d587afb9f67044b2fead2a5589bfbd42f21e78 Mon Sep 17 00:00:00 2001 From: Alexis DRAI Date: Sat, 1 Oct 2022 17:31:41 +0200 Subject: [PATCH 4/8] :sparkles: Simplify code and give more freedom by introducing HomogeneousDie, changing the logic in Face, and making class names shorter --- Sources/App/Program.cs | 33 +- Sources/Data/Stub.cs | 36 +- Sources/Model/Dice/AbstractDie.cs | 25 - Sources/Model/Dice/ColorDie.cs | 12 +- Sources/Model/Dice/Die.cs | 27 + Sources/Model/Dice/DieManager.cs | 18 +- Sources/Model/Dice/Faces/AbstractDieFace.cs | 26 - Sources/Model/Dice/Faces/ColorDieFace.cs | 45 -- Sources/Model/Dice/Faces/ColorFace.cs | 11 + Sources/Model/Dice/Faces/Face.cs | 28 + Sources/Model/Dice/Faces/ImageDieFace.cs | 27 - Sources/Model/Dice/Faces/ImageFace.cs | 11 + Sources/Model/Dice/Faces/NumberDieFace.cs | 21 - Sources/Model/Dice/Faces/NumberFace.cs | 9 + Sources/Model/Dice/HomogeneousDie.cs | 11 + Sources/Model/Dice/ImageDie.cs | 8 +- Sources/Model/Dice/NumberDie.cs | 4 +- Sources/Model/Dice/RandomnessHaver.cs | 16 - Sources/Model/Games/Game.cs | 14 +- Sources/Model/Games/GameRunner.cs | 8 +- Sources/Model/Games/Turn.cs | 12 +- Sources/Tests/Model_UTs/GameTest.cs | 180 +++---- Sources/Tests/Model_UTs/TurnTest.cs | 555 +++++++++----------- 23 files changed, 487 insertions(+), 650 deletions(-) delete mode 100644 Sources/Model/Dice/AbstractDie.cs create mode 100644 Sources/Model/Dice/Die.cs delete mode 100644 Sources/Model/Dice/Faces/AbstractDieFace.cs delete mode 100644 Sources/Model/Dice/Faces/ColorDieFace.cs create mode 100644 Sources/Model/Dice/Faces/ColorFace.cs create mode 100644 Sources/Model/Dice/Faces/Face.cs delete mode 100644 Sources/Model/Dice/Faces/ImageDieFace.cs create mode 100644 Sources/Model/Dice/Faces/ImageFace.cs delete mode 100644 Sources/Model/Dice/Faces/NumberDieFace.cs create mode 100644 Sources/Model/Dice/Faces/NumberFace.cs create mode 100644 Sources/Model/Dice/HomogeneousDie.cs delete mode 100644 Sources/Model/Dice/RandomnessHaver.cs diff --git a/Sources/App/Program.cs b/Sources/App/Program.cs index badbca6..d80f387 100644 --- a/Sources/App/Program.cs +++ b/Sources/App/Program.cs @@ -5,6 +5,7 @@ using Model.Games; using Model.Players; using System; using System.Collections.Generic; +using System.Drawing; using System.Linq; namespace App @@ -61,7 +62,7 @@ namespace App Console.WriteLine("make at least one dice group first, then try again"); break; } - IEnumerable> newGameDice = PrepareDice(gameRunner); + IEnumerable newGameDice = PrepareDice(gameRunner); string newGameName; Console.WriteLine("give this new game a name\n>"); @@ -83,11 +84,11 @@ namespace App Console.WriteLine("give this new dice group a name"); newGroupName = Console.ReadLine(); - List> newGroupDice = new(); + List newGroupDice = new(); string menuChoiceNewDice = ""; while (!(menuChoiceNewDice.Equals("ok") && newGroupDice.Any())) { - AbstractDie die = null; + Die die = null; Console.WriteLine("create a die you want to add (at least one), or enter 'ok' if you're finished"); Console.WriteLine("what type of die ?\n" + "n... number\n" + @@ -114,7 +115,7 @@ namespace App newGroupDice.Add(die); } } - gameRunner.GlobalDieManager.Add(new KeyValuePair>>(newGroupName, newGroupDice)); + gameRunner.GlobalDieManager.Add(new KeyValuePair>(newGroupName, newGroupDice)); break; default: @@ -173,7 +174,7 @@ namespace App private static NumberDie MakeNumberDie() { NumberDie die; - List faces = new(); + List faces = new(); string menuChoiceNewFaces = ""; while (menuChoiceNewFaces != "ok") @@ -194,14 +195,14 @@ namespace App private static ColorDie MakeColorDie() { ColorDie die; - List faces = new(); + List faces = new(); string menuChoiceNewFaces = ""; while (!menuChoiceNewFaces.Equals("ok")) { - Console.WriteLine("create a face with an color hex code, or enter 'ok' if you're finished"); + Console.WriteLine("create a face with an color name, or enter 'ok' if you're finished"); menuChoiceNewFaces = Console.ReadLine(); - if (menuChoiceNewFaces != "ok") faces.Add(new(menuChoiceNewFaces)); + if (menuChoiceNewFaces != "ok") faces.Add(new(Color.FromName(menuChoiceNewFaces))); } die = new ColorDie(faces.ToArray()); @@ -211,27 +212,27 @@ namespace App private static ImageDie MakeImageDie() { ImageDie die; - List faces = new(); + List faces = new(); string menuChoiceNewFaces = ""; while (!menuChoiceNewFaces.Equals("ok")) { - Console.WriteLine("create a face with an image url, or enter 'ok' if you're finished"); + Console.WriteLine("create a face with an image uri, or enter 'ok' if you're finished"); menuChoiceNewFaces = Console.ReadLine(); - if (menuChoiceNewFaces != "ok") faces.Add(new(menuChoiceNewFaces)); + if (menuChoiceNewFaces != "ok") faces.Add(new(new Uri(menuChoiceNewFaces))); } die = new ImageDie(faces.ToArray()); return die; } - private static IEnumerable> PrepareDice(GameRunner gameRunner) + private static IEnumerable PrepareDice(GameRunner gameRunner) { - List> result = new(); + List result = new(); Console.WriteLine("add dice to the game"); Console.WriteLine("all known dice or groups of dice:"); - foreach ((string name, IEnumerable> dice) in gameRunner.GlobalDieManager.GetAll()) + foreach ((string name, IEnumerable dice) in gameRunner.GlobalDieManager.GetAll()) { Console.WriteLine($"{name} -- {dice}"); } @@ -243,8 +244,8 @@ namespace App // no checks, this is temporary if (!menuChoiceDice.Equals("ok")) { - IEnumerable> chosenDice = gameRunner.GlobalDieManager.GetOneByName(menuChoiceDice).Value; - foreach (AbstractDie die in chosenDice) + IEnumerable chosenDice = gameRunner.GlobalDieManager.GetOneByName(menuChoiceDice).Value; + foreach (Die die in chosenDice) { result.Add(die); } diff --git a/Sources/Data/Stub.cs b/Sources/Data/Stub.cs index e61ee46..3d4e934 100644 --- a/Sources/Data/Stub.cs +++ b/Sources/Data/Stub.cs @@ -4,6 +4,7 @@ using Model.Dice.Faces; using Model.Games; using Model.Players; using System.Collections.Generic; +using System.Drawing; namespace Data { @@ -20,18 +21,39 @@ namespace Data gr.GlobalPlayerManager.Add(player3); - List> monopolyDice = new(); - List> dndDice = new(); + List monopolyDice = new(); + List dndDice = new(); string monopolyName = "Monopoly", dndName = "DnD"; - NumberDieFace[] d6Faces = new NumberDieFace[] { new(1), new(2), new(3), new(4), new(5), new(6) }; + NumberFace[] d6Faces = new NumberFace[] { new(1), new(2), new(3), new(4), new(5), new(6) }; monopolyDice.Add(new NumberDie(d6Faces)); monopolyDice.Add(new NumberDie(d6Faces)); - monopolyDice.Add(new ColorDie(new("#ff0000"), new("#00ff00"), new("#0000ff"), new("#ffff00"), new("#000000"), new("#ffffff"))); - NumberDieFace[] d20Faces = new NumberDieFace[] { + ColorFace[] colorFaces = new ColorFace[] + { + new(Color.FromName("blue")), + new(Color.FromName("red")), + new(Color.FromName("yellow")), + new(Color.FromName("green")), + new(Color.FromName("black")), + new(Color.FromName("white")) + }; + + monopolyDice.Add(new ColorDie(colorFaces)); + + ImageFace[] imageFaces = new ImageFace[] + { + new(new Uri("https://unsplash.com/photos/TLD6iCOlyb0")), + new(new Uri("https://unsplash.com/photos/rTZW4f02zY8")), + new(new Uri("https://unsplash.com/photos/Hyu76loQLdk")), + new(new Uri("https://unsplash.com/photos/A_Ncbi-RH6s")), + }; + + monopolyDice.Add(new ImageDie(imageFaces)); + + NumberFace[] d20Faces = new NumberFace[] { new(1), new(2), new(3), new(4), new(5), new(6), new(7), new(8), new(9), new(10), new(11), new(12), new(13), new(14), new(15), @@ -40,8 +62,8 @@ namespace Data dndDice.Add(new NumberDie(d20Faces)); - gr.GlobalDieManager.Add(new KeyValuePair>>(dndName, dndDice.AsEnumerable())); - gr.GlobalDieManager.Add(new KeyValuePair>>(monopolyName, monopolyDice.AsEnumerable())); + gr.GlobalDieManager.Add(new KeyValuePair>(dndName, dndDice.AsEnumerable())); + gr.GlobalDieManager.Add(new KeyValuePair>(monopolyName, monopolyDice.AsEnumerable())); string game1 = "Forgotten Realms", game2 = "4e", game3 = "The Coopers"; diff --git a/Sources/Model/Dice/AbstractDie.cs b/Sources/Model/Dice/AbstractDie.cs deleted file mode 100644 index 2340067..0000000 --- a/Sources/Model/Dice/AbstractDie.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Model.Dice.Faces; - -namespace Model.Dice -{ - public abstract class AbstractDie : RandomnessHaver where T : AbstractDieFace - { - public IEnumerable ListFaces => listFaces; - - private readonly List listFaces = new(); - - protected AbstractDie(params T[] faces) - { - listFaces.AddRange(faces); - } - - public T GetRandomFace() - { - int faceIndex = rnd.Next(0, ListFaces.Count()); - return ListFaces.ElementAt(faceIndex); - } - } -} diff --git a/Sources/Model/Dice/ColorDie.cs b/Sources/Model/Dice/ColorDie.cs index 454e4d6..290c5dc 100644 --- a/Sources/Model/Dice/ColorDie.cs +++ b/Sources/Model/Dice/ColorDie.cs @@ -1,17 +1,11 @@ using Model.Dice.Faces; -using System; -using System.Collections; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Drawing; namespace Model.Dice { - public class ColorDie : AbstractDie + public class ColorDie : HomogeneousDie { - public ColorDie(params ColorDieFace[] faces) : base(faces) + public ColorDie(params ColorFace[] faces) : base(faces) { } } diff --git a/Sources/Model/Dice/Die.cs b/Sources/Model/Dice/Die.cs new file mode 100644 index 0000000..6a1534c --- /dev/null +++ b/Sources/Model/Dice/Die.cs @@ -0,0 +1,27 @@ +using Model.Dice.Faces; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Model.Dice +{ + public abstract class Die + { + public IEnumerable ListFaces => listFaces; + + protected static readonly Random rnd = new(); + + private readonly List listFaces = new(); + + protected Die(params Face[] faces) + { + listFaces.AddRange(faces); + } + + public Face GetRandomFace() + { + int faceIndex = rnd.Next(0, ListFaces.Count()); + return ListFaces.ElementAt(faceIndex); + } + } +} diff --git a/Sources/Model/Dice/DieManager.cs b/Sources/Model/Dice/DieManager.cs index 71654cf..cfc77cb 100644 --- a/Sources/Model/Dice/DieManager.cs +++ b/Sources/Model/Dice/DieManager.cs @@ -5,40 +5,40 @@ using System.Linq; namespace Model.Dice { - public class DieManager : IManager>>> + public class DieManager : IManager>> { - private readonly Dictionary>> diceGroups = new(); + private readonly Dictionary> diceGroups = new(); - public KeyValuePair>> Add(KeyValuePair>> toAdd) + public KeyValuePair> Add(KeyValuePair> toAdd) { // on trim la clé d'abord diceGroups.Add(toAdd.Key.Trim(), toAdd.Value); return toAdd; } - public IEnumerable>>> GetAll() + public IEnumerable>> GetAll() { return diceGroups.AsEnumerable(); } - public KeyValuePair>> GetOneByID(Guid ID) + public KeyValuePair> GetOneByID(Guid ID) { throw new NotImplementedException(); } - public KeyValuePair>> GetOneByName(string name) + public KeyValuePair> GetOneByName(string name) { // les groupes de dés nommés : // ils sont case-sensistive, mais "mon jeu" == "mon jeu " == " mon jeu" - return new KeyValuePair>>(name, diceGroups[name]); + return new KeyValuePair>(name, diceGroups[name]); } - public void Remove(KeyValuePair>> toRemove) + public void Remove(KeyValuePair> toRemove) { diceGroups.Remove(toRemove.Key); } - public KeyValuePair>> Update(KeyValuePair>> before, KeyValuePair>> after) + public KeyValuePair> Update(KeyValuePair> before, KeyValuePair> after) { // pas autorisé de changer les dés, juste le nom if (!before.Value.Equals(after.Value)) diff --git a/Sources/Model/Dice/Faces/AbstractDieFace.cs b/Sources/Model/Dice/Faces/AbstractDieFace.cs deleted file mode 100644 index ae09083..0000000 --- a/Sources/Model/Dice/Faces/AbstractDieFace.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Model.Dice.Faces -{ - public abstract class AbstractDieFace - { - /// - /// every die face has a value, and they can all be represented by an int, - /// even if they're not litterally a decimal number - ///
- /// USE GetPracticalValue for a Value specific to face type - ///
- public int Value { get; protected set; } - - public abstract object GetPracticalValue(); - - public override string ToString() - { - return GetPracticalValue().ToString(); - } - } -} diff --git a/Sources/Model/Dice/Faces/ColorDieFace.cs b/Sources/Model/Dice/Faces/ColorDieFace.cs deleted file mode 100644 index 77b5d3c..0000000 --- a/Sources/Model/Dice/Faces/ColorDieFace.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Model.Dice.Faces -{ - public class ColorDieFace : AbstractDieFace - { - private static readonly int MAX_HEX = 16777215; - /// - /// accepts hex strings like "ffbb84" and "#af567d" ([RRGGBB]) - /// - /// hex string - public ColorDieFace(string hexValueString) - { - // https://stackoverflow.com/questions/1139957/convert-integer-to-hexadecimal-and-back-again - // we remove any initial '#' before parsing - if (hexValueString.StartsWith('#')) - { - hexValueString = hexValueString[1..]; - } - - int result = int.Parse(hexValueString, System.Globalization.NumberStyles.HexNumber); - - if (result < 0) Value = 0; - else if (result > MAX_HEX) Value = MAX_HEX; - else Value = result; - } - - /// - /// accepts a decimal value that represents a color hex (0 is black, 65280 is green...) - /// - /// - public ColorDieFace(int decimalValue) - : this(decimalValue.ToString()) - { } - public override object GetPracticalValue() - { - // https://stackoverflow.com/questions/1139957/convert-integer-to-hexadecimal-and-back-again - return Value.ToString("X6").Insert(0, "#"); - } - } -} diff --git a/Sources/Model/Dice/Faces/ColorFace.cs b/Sources/Model/Dice/Faces/ColorFace.cs new file mode 100644 index 0000000..3ae7760 --- /dev/null +++ b/Sources/Model/Dice/Faces/ColorFace.cs @@ -0,0 +1,11 @@ +using System.Drawing; + +namespace Model.Dice.Faces +{ + public class ColorFace : Face + { + public ColorFace(Color value) : base(value) + { + } + } +} diff --git a/Sources/Model/Dice/Faces/Face.cs b/Sources/Model/Dice/Faces/Face.cs new file mode 100644 index 0000000..472b25f --- /dev/null +++ b/Sources/Model/Dice/Faces/Face.cs @@ -0,0 +1,28 @@ +namespace Model.Dice.Faces +{ + public abstract class Face + { + public string StringValue { get; protected set; } + + public override string ToString() + { + return StringValue; + } + } + public abstract class Face : Face + { + public T Value { get; protected set; } + + protected Face(T value) + { + Value = value; + StringValue = value.ToString(); + } + + protected Face(T value, string stringValue) + { + Value = value; + StringValue = stringValue; + } + } +} diff --git a/Sources/Model/Dice/Faces/ImageDieFace.cs b/Sources/Model/Dice/Faces/ImageDieFace.cs deleted file mode 100644 index 84d472b..0000000 --- a/Sources/Model/Dice/Faces/ImageDieFace.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Model.Dice.Faces -{ - public class ImageDieFace : AbstractDieFace - { - public ImageDieFace(string uri) - { - Value = int.Parse(Path.GetFileNameWithoutExtension(uri)); - } - - public ImageDieFace(int code) - { - Value = code; - } - - public override object GetPracticalValue() - { - return string.Format($"Assets/images/{Value}.png"); - } - } -} diff --git a/Sources/Model/Dice/Faces/ImageFace.cs b/Sources/Model/Dice/Faces/ImageFace.cs new file mode 100644 index 0000000..0b27a40 --- /dev/null +++ b/Sources/Model/Dice/Faces/ImageFace.cs @@ -0,0 +1,11 @@ +using System; + +namespace Model.Dice.Faces +{ + public class ImageFace : Face + { + public ImageFace(Uri value) : base(value) + { + } + } +} diff --git a/Sources/Model/Dice/Faces/NumberDieFace.cs b/Sources/Model/Dice/Faces/NumberDieFace.cs deleted file mode 100644 index 5aa7adf..0000000 --- a/Sources/Model/Dice/Faces/NumberDieFace.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Model.Dice.Faces -{ - public class NumberDieFace : AbstractDieFace - { - public NumberDieFace(int value) - { - Value = value; - } - - public override object GetPracticalValue() - { - return Value; - } - } -} diff --git a/Sources/Model/Dice/Faces/NumberFace.cs b/Sources/Model/Dice/Faces/NumberFace.cs new file mode 100644 index 0000000..9d7374b --- /dev/null +++ b/Sources/Model/Dice/Faces/NumberFace.cs @@ -0,0 +1,9 @@ +namespace Model.Dice.Faces +{ + public class NumberFace : Face + { + public NumberFace(int value) : base(value) + { + } + } +} diff --git a/Sources/Model/Dice/HomogeneousDie.cs b/Sources/Model/Dice/HomogeneousDie.cs new file mode 100644 index 0000000..22ab110 --- /dev/null +++ b/Sources/Model/Dice/HomogeneousDie.cs @@ -0,0 +1,11 @@ +using Model.Dice.Faces; + +namespace Model.Dice +{ + public abstract class HomogeneousDie : Die + { + protected HomogeneousDie(params Face[] faces) : base(faces) + { + } + } +} diff --git a/Sources/Model/Dice/ImageDie.cs b/Sources/Model/Dice/ImageDie.cs index 7a8879b..43a1754 100644 --- a/Sources/Model/Dice/ImageDie.cs +++ b/Sources/Model/Dice/ImageDie.cs @@ -1,15 +1,11 @@ using Model.Dice.Faces; using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Model.Dice { - public class ImageDie : AbstractDie + public class ImageDie : HomogeneousDie { - public ImageDie(params ImageDieFace[] faces) : base(faces) + public ImageDie(params ImageFace[] faces) : base(faces) { } } diff --git a/Sources/Model/Dice/NumberDie.cs b/Sources/Model/Dice/NumberDie.cs index 013c5fa..4f7b385 100644 --- a/Sources/Model/Dice/NumberDie.cs +++ b/Sources/Model/Dice/NumberDie.cs @@ -7,9 +7,9 @@ using System.Threading.Tasks; namespace Model.Dice { - public class NumberDie : AbstractDie + public class NumberDie : HomogeneousDie { - public NumberDie(params NumberDieFace[] faces) : base(faces) + public NumberDie(params NumberFace[] faces) : base(faces) { } } diff --git a/Sources/Model/Dice/RandomnessHaver.cs b/Sources/Model/Dice/RandomnessHaver.cs deleted file mode 100644 index 45aaf5c..0000000 --- a/Sources/Model/Dice/RandomnessHaver.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Model.Dice -{ - public class RandomnessHaver - { - protected RandomnessHaver() - { - } - protected static readonly Random rnd = new(); - } -} diff --git a/Sources/Model/Games/Game.cs b/Sources/Model/Games/Game.cs index 9ed1d40..1dc3281 100644 --- a/Sources/Model/Games/Game.cs +++ b/Sources/Model/Games/Game.cs @@ -57,8 +57,8 @@ namespace Model.Games /// /// the group of dice used for this game /// - public IEnumerable> Dice => dice; - private readonly IEnumerable> dice; + public IEnumerable Dice => dice; + private readonly IEnumerable dice; /// /// constructs a Game with its own history of Turns. @@ -68,7 +68,7 @@ namespace Model.Games /// the turns that have been done so far /// the game's player manager, doing CRUD on players and switching whose turn it is /// the group of dice used for this game - public Game(string name, IManager playerManager, IEnumerable> dice, IEnumerable turns) + public Game(string name, IManager playerManager, IEnumerable dice, IEnumerable turns) { Name = name; PlayerManager = playerManager; @@ -83,7 +83,7 @@ namespace Model.Games /// the name of the game 😎 /// the game's player manager, doing CRUD on players and switching whose turn it is /// the group of dice used for this game - public Game(string name, IManager playerManager, IEnumerable> dice) + public Game(string name, IManager playerManager, IEnumerable dice) : this(name, playerManager, dice, null) { } @@ -161,10 +161,10 @@ namespace Model.Games /// throws all the Dice in FavGroup and returns a list of their Faces /// /// list of AbstractDieFaces after a throw - private Dictionary, AbstractDieFace> ThrowAll() + private Dictionary ThrowAll() { - Dictionary, AbstractDieFace> faces = new(); - foreach (AbstractDie die in dice) + Dictionary faces = new(); + foreach (Die die in dice) { faces.Add(die, die.GetRandomFace()); } diff --git a/Sources/Model/Games/GameRunner.cs b/Sources/Model/Games/GameRunner.cs index d58085e..1d294be 100644 --- a/Sources/Model/Games/GameRunner.cs +++ b/Sources/Model/Games/GameRunner.cs @@ -12,17 +12,17 @@ namespace Model.Games public class GameRunner : IManager { public IManager GlobalPlayerManager { get; private set; } - public IManager>>> GlobalDieManager { get; private set; } + public IManager>> GlobalDieManager { get; private set; } private readonly List games; - public GameRunner(IManager globalPlayerManager, IManager>>> globalDieManager, List games) + public GameRunner(IManager globalPlayerManager, IManager>> globalDieManager, List games) { GlobalPlayerManager = globalPlayerManager; GlobalDieManager = globalDieManager; this.games = games ?? new(); } - public GameRunner(IManager globalPlayerManager, IManager>>> globalDieManager) + public GameRunner(IManager globalPlayerManager, IManager>> globalDieManager) : this(globalPlayerManager, globalDieManager, null){ } @@ -65,7 +65,7 @@ namespace Model.Games /// /// creates a new game /// - public Game StartNewGame(string name, IManager playerManager, IEnumerable> dice) + public Game StartNewGame(string name, IManager playerManager, IEnumerable dice) { Game game = new(name, playerManager, dice); return Add(game); diff --git a/Sources/Model/Games/Turn.cs b/Sources/Model/Games/Turn.cs index ea202d4..fe9ccfe 100644 --- a/Sources/Model/Games/Turn.cs +++ b/Sources/Model/Games/Turn.cs @@ -33,8 +33,8 @@ namespace Model.Games /// /// the collection of Face that were rolled /// - public IEnumerable, AbstractDieFace>> DiceNFaces => diceNFaces.AsEnumerable(); - private readonly Dictionary, AbstractDieFace> diceNFaces; + public IEnumerable> DiceNFaces => diceNFaces.AsEnumerable(); + private readonly Dictionary diceNFaces; /// /// this private constructor is to be used only by factories @@ -42,7 +42,7 @@ namespace Model.Games /// date and time of the turn /// player who played the turn /// faces that were rolled - private Turn(DateTime when, Player player, Dictionary, AbstractDieFace> diceNFaces) + private Turn(DateTime when, Player player, Dictionary diceNFaces) { When = when; Player = player; @@ -59,7 +59,7 @@ namespace Model.Games /// player who played the turn /// faces that were rolled /// a new Turn object - public static Turn CreateWithSpecifiedTime(DateTime when, Player player, Dictionary, AbstractDieFace> diceNFaces) + public static Turn CreateWithSpecifiedTime(DateTime when, Player player, Dictionary diceNFaces) { if (player is null) { @@ -87,7 +87,7 @@ namespace Model.Games /// player who played the turn /// faces that were rolled /// a new Turn object - public static Turn CreateWithDefaultTime(Player player, Dictionary, AbstractDieFace> diceNFaces) + public static Turn CreateWithDefaultTime(Player player, Dictionary diceNFaces) { return CreateWithSpecifiedTime(DateTime.UtcNow, player, diceNFaces); } @@ -108,7 +108,7 @@ namespace Model.Games date, time, Player.ToString()); - foreach (AbstractDieFace face in this.diceNFaces.Values) + foreach (Face face in this.diceNFaces.Values) { sb.Append(" " + face.ToString()); } diff --git a/Sources/Tests/Model_UTs/GameTest.cs b/Sources/Tests/Model_UTs/GameTest.cs index 6eddc05..d7db841 100644 --- a/Sources/Tests/Model_UTs/GameTest.cs +++ b/Sources/Tests/Model_UTs/GameTest.cs @@ -11,55 +11,32 @@ using System.Threading.Tasks; using Xunit; using static System.Collections.Specialized.BitVector32; using System.Diagnostics; +using Data; namespace Tests.Model_UTs { public class GameTest { - + private readonly GameRunner stubGameRunner = new Stub().LoadApp(); private static readonly string GAME_NAME = "my game"; private static readonly Player PLAYER_1 = new("Alice"), PLAYER_2 = new("Bob"), PLAYER_3 = new("Clyde"); - - private readonly static NumberDieFace FACE_NUM = new(1); - private readonly static ImageDieFace FACE_IMG = new(10); - private readonly static ColorDieFace FACE_CLR = new(1000); - - private readonly static NumberDieFace[] FACES_1 = new NumberDieFace[] - { - FACE_NUM, - new(2), - new(3), - new(4) - }; - - private readonly static ImageDieFace[] FACES_2 = new ImageDieFace[] + private readonly IEnumerable DICE_1, DICE_2; + public GameTest() { - FACE_IMG, - new(20), - new(30), - new(40) - }; - - private readonly static ColorDieFace[] FACES_3 = new ColorDieFace[] - { - FACE_CLR, - new(2000), - new(3000), - new(4000) - }; + DICE_1 = stubGameRunner.GlobalDieManager.GetAll().First().Value; + DICE_2 = stubGameRunner.GlobalDieManager.GetAll().Last().Value; + } - private static readonly AbstractDie NUM = new NumberDie(FACES_1), IMG = new ImageDie(FACES_2), CLR = new ColorDie(FACES_3); - private static readonly IEnumerable> DICE = - new List>() { NUM, IMG, CLR } - .AsEnumerable(); [Fact] public void TestNamePropertyGet() { // Arrange - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + Game game = new(name: GAME_NAME, + playerManager: new PlayerManager(), + dice: DICE_1); // Act string actual = game.Name; @@ -72,9 +49,11 @@ namespace Tests.Model_UTs public void TestNamePropertySetWhenValidThenCorrect() { // Arrange - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); - string expected = "shitty marmot"; + Game game = new(name: GAME_NAME, + playerManager: new PlayerManager(), + dice: DICE_1); + string expected = "shitty marmot"; // Act game.Name = expected; @@ -94,7 +73,9 @@ namespace Tests.Model_UTs Game game; // Act - void action() => game = new(name: name, playerManager: new PlayerManager(), dice: DICE); + void action() => game = new(name: name, + playerManager: new PlayerManager(), + dice: DICE_1); // Assert Assert.Throws(action); @@ -104,12 +85,7 @@ namespace Tests.Model_UTs public void TestGetHistory() { // Arrange - Dictionary, AbstractDieFace> diceNFaces = new() - { - { CLR, FACE_CLR }, - { IMG, FACE_IMG }, - { NUM, FACE_NUM } - }; + Dictionary diceNFaces = (Dictionary)stubGameRunner.GetAll().First().GetHistory().First().DiceNFaces; Turn turn1 = Turn.CreateWithDefaultTime(PLAYER_1, diceNFaces); Turn turn2 = Turn.CreateWithDefaultTime(PLAYER_2, diceNFaces); // yeah they rolled the same @@ -117,7 +93,11 @@ namespace Tests.Model_UTs IEnumerable expected = new List() { turn1, turn2 }; // Act - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE, expected); + Game game = new(name: GAME_NAME, + playerManager: new PlayerManager(), + dice: DICE_1, + expected); + IEnumerable actual = game.GetHistory(); // Assert @@ -128,12 +108,14 @@ namespace Tests.Model_UTs public void TestDicePropertyGet() { // Arrange - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + Game game = new(name: GAME_NAME, + playerManager: new PlayerManager(), + dice: DICE_2); // Act - IEnumerable> actual = game.Dice; - IEnumerable> expected = DICE; + IEnumerable actual = game.Dice; + IEnumerable expected = DICE_2; // Assert Assert.Equal(expected, actual); @@ -143,7 +125,10 @@ namespace Tests.Model_UTs public void TestPerformTurnDoesAddOneTurn() { // Arrange - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + Game game = new(name: GAME_NAME, + playerManager: new PlayerManager(), + dice: DICE_1); + game.PlayerManager.Add(PLAYER_1); game.PlayerManager.Add(PLAYER_2); @@ -171,7 +156,10 @@ namespace Tests.Model_UTs public void TestGetWhoPlaysNowWhenValidThenCorrect() { // Arrange - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + Game game = new(name: GAME_NAME, + playerManager: new PlayerManager(), + dice: DICE_1); + game.PlayerManager.Add(PLAYER_1); game.PlayerManager.Add(PLAYER_2); @@ -194,7 +182,9 @@ namespace Tests.Model_UTs public void TestGetWhoPlaysNowWhenInvalidThenException() { // Arrange - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + Game game = new(name: GAME_NAME, + playerManager: new PlayerManager(), + dice: DICE_1); // Act void action() => game.GetWhoPlaysNow(); // on an empty collection of players @@ -207,8 +197,9 @@ namespace Tests.Model_UTs public void TestPrepareNextPlayerWhenEmptyThenException() { // Arrange - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); - + Game game = new(name: GAME_NAME, + playerManager: new PlayerManager(), + dice: DICE_1); // Act void action() => game.PrepareNextPlayer(PLAYER_1); // on an empty collection of players @@ -220,7 +211,10 @@ namespace Tests.Model_UTs public void TestPrepareNextPlayerWhenNullThenException() { // Arrange - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + Game game = new(name: GAME_NAME, + playerManager: new PlayerManager(), + dice: DICE_2); + game.PlayerManager.Add(PLAYER_1); // Act @@ -234,7 +228,10 @@ namespace Tests.Model_UTs public void TestPrepareNextPlayerWhenNonExistentThenException() { // Arrange - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + Game game = new(name: GAME_NAME, + playerManager: new PlayerManager(), + dice: DICE_1); + game.PlayerManager.Add(PLAYER_2); // Act @@ -248,7 +245,10 @@ namespace Tests.Model_UTs public void TestPrepareNextPlayerWhenValidThenCorrectWithSeveralPlayers() { // Arrange - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + Game game = new(name: GAME_NAME, + playerManager: new PlayerManager(), + dice: DICE_2); + game.PlayerManager.Add(PLAYER_1); game.PlayerManager.Add(PLAYER_2); @@ -268,7 +268,10 @@ namespace Tests.Model_UTs public void TestPrepareNextPlayerWhenValidThenCorrectWithOnePlayer() { // Arrange - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + Game game = new(name: GAME_NAME, + playerManager: new PlayerManager(), + dice: DICE_1); + game.PlayerManager.Add(PLAYER_1); // Act @@ -287,7 +290,9 @@ namespace Tests.Model_UTs public void TestAddPlayerToGame() { // Arrange - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + Game game = new(name: GAME_NAME, + playerManager: new PlayerManager(), + dice: DICE_2); // Act Player expected = PLAYER_1; @@ -301,7 +306,9 @@ namespace Tests.Model_UTs public void TestGetPlayersFromGame() { // Arrange - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + Game game = new(name: GAME_NAME, + playerManager: new PlayerManager(), + dice: DICE_1); // Act Assert.Empty(game.PlayerManager.GetAll()); @@ -315,7 +322,10 @@ namespace Tests.Model_UTs public void TestUpdatePlayerInGame() { // Arrange - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + Game game = new(name: GAME_NAME, + playerManager: new PlayerManager(), + dice: DICE_2); + game.PlayerManager.Add(PLAYER_1); // Act @@ -330,7 +340,10 @@ namespace Tests.Model_UTs public void TestRemovePlayerFromGame() { // Arrange - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE); + Game game = new(name: GAME_NAME, + playerManager: new PlayerManager(), + dice: DICE_1); + game.PlayerManager.Add(PLAYER_1); game.PlayerManager.Add(PLAYER_2); game.PlayerManager.Remove(PLAYER_1); @@ -342,54 +355,5 @@ namespace Tests.Model_UTs // Assert Assert.Equal(expected, actual); } - - [Fact] - public void TestToString() - { - // Arrange - DateTime dateTime = DateTime.UtcNow; - - List turns = new() - { - Turn.CreateWithSpecifiedTime(dateTime, PLAYER_1, new() - { - {NUM, new NumberDieFace(4)}, - {IMG, new ImageDieFace(40)}, - {CLR, new ColorDieFace("A00FA0")}, - }), - Turn.CreateWithSpecifiedTime(dateTime, PLAYER_2, new() - { - {NUM, new NumberDieFace(3)}, - {IMG, new ImageDieFace(20)}, - {CLR, new ColorDieFace("A00BB8")}, - }), - }; - - Game game = new(name: GAME_NAME, playerManager: new PlayerManager(), dice: DICE, turns: turns); - game.PlayerManager.Add(PLAYER_1); - game.PlayerManager.Add(PLAYER_2); - - // Act - string[] dateTimeString = dateTime.ToString("s", System.Globalization.CultureInfo.InvariantCulture).Split("T"); - - string date = dateTimeString[0]; - string time = dateTimeString[1]; - - string expected = - "Game: my game" + - "\nPlayers: Alice Bob" + - "\nNext: Alice" + - "\nLog:" + - "\n\t" + date + " " + time + " -- Alice rolled: 4 Assets/images/40.png #A00FA0" + - "\n\t" + date + " " + time + " -- Bob rolled: 3 Assets/images/20.png #A00BB8" + - "\n"; - string actual = game.ToString(); - - Debug.WriteLine("expected:\n" + expected); - Debug.WriteLine("actual:\n" + actual); - - // Assert - Assert.Equal(expected, actual); - } } } diff --git a/Sources/Tests/Model_UTs/TurnTest.cs b/Sources/Tests/Model_UTs/TurnTest.cs index b9e8310..cdbb9ba 100644 --- a/Sources/Tests/Model_UTs/TurnTest.cs +++ b/Sources/Tests/Model_UTs/TurnTest.cs @@ -1,322 +1,245 @@ -using Model.Dice; -using Model.Dice.Faces; -using Model.Games; -using Model.Players; -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using Xunit; - -namespace Tests.Model_UTs -{ - public class TurnTest - - { - private readonly Dictionary, AbstractDieFace> DICE_N_FACES_1; - private readonly Dictionary, AbstractDieFace> DICE_N_FACES_2; - - private static readonly AbstractDieFace FACE_ONE = new NumberDieFace(1); - private static readonly AbstractDieFace FACE_TWO = new NumberDieFace(12); - private static readonly AbstractDieFace FACE_THREE = new ImageDieFace(54); - private static readonly AbstractDieFace FACE_FOUR = new ColorDieFace(16548); - - private readonly static NumberDieFace[] FACES1 = new NumberDieFace[] - { - FACE_ONE as NumberDieFace, - new NumberDieFace(2), - new NumberDieFace(3), - new NumberDieFace(4) - }; - - private readonly static NumberDieFace[] FACES2 = new NumberDieFace[] { - new NumberDieFace(9), - new NumberDieFace(10), - new NumberDieFace(11), - FACE_TWO as NumberDieFace, - new NumberDieFace(13), - new NumberDieFace(14) - }; - - private readonly static ImageDieFace[] FACES3 = new ImageDieFace[] { - new ImageDieFace(13), - new ImageDieFace(27), - new ImageDieFace(38), - FACE_THREE as ImageDieFace - }; - - private readonly static ColorDieFace[] FACES4 = new ColorDieFace[] { - new(11651), - new(24651), - FACE_FOUR as ColorDieFace, - new(412) - }; - - private readonly AbstractDie NUM1 = new NumberDie(FACES1); - private readonly AbstractDie NUM2 = new NumberDie(FACES2); - private readonly AbstractDie IMG1 = new ImageDie(FACES3); - private readonly AbstractDie CLR1 = new ColorDie(FACES4); - - public TurnTest() - { - DICE_N_FACES_1 = new() - { - { NUM1, FACE_ONE }, - { NUM2, FACE_TWO }, - { IMG1, FACE_THREE }, - { CLR1, FACE_FOUR } - }; - DICE_N_FACES_2 = new() - { - { NUM1, FACE_TWO }, - { IMG1, FACE_THREE }, - { CLR1, FACE_FOUR } - }; - } - - - - [Fact] - public void TestCreateWithSpecifiedTimeNotUTCThenValid() - { - // Arrange - DateTime dateTime = new(year: 2018, month: 06, day: 15, hour: 16, minute: 30, second: 0, kind: DateTimeKind.Local); - Player player = new("Alice"); - Assert.NotEqual(DateTimeKind.Utc, dateTime.Kind); - - // Act - Turn turn = Turn.CreateWithSpecifiedTime(dateTime, player, DICE_N_FACES_1); - - // Assert - Assert.Equal(DateTimeKind.Utc, turn.When.Kind); - Assert.Equal(dateTime.ToUniversalTime(), turn.When); - } - - - - [Fact] - public void TestCreateWithSpecifiedTimeUTCThenValid() - { - // Arrange - DateTime dateTime = new(year: 2018, month: 06, day: 15, hour: 16, minute: 30, second: 0, kind: DateTimeKind.Utc); - Player player = new("Bobby"); - Assert.Equal(DateTimeKind.Utc, dateTime.Kind); - - // Act - Turn turn = Turn.CreateWithSpecifiedTime(dateTime, player, DICE_N_FACES_1); - - // Assert - Assert.Equal(DateTimeKind.Utc, turn.When.Kind); - Assert.Equal(dateTime.ToUniversalTime(), turn.When); - } - - - [Fact] - public void TestCreateWithSpecifiedTimeNullPlayerThenException() - { - // Arrange - DateTime dateTime = new(year: 2018, month: 06, day: 15, hour: 16, minute: 30, second: 0, kind: DateTimeKind.Utc); - - // Act - void action() => Turn.CreateWithSpecifiedTime(dateTime, null, DICE_N_FACES_1); - - // Assert - Assert.Throws(action); - } - - [Fact] - public void TestCreateWithSpecifiedTimeNullFacesThenException() - { - // Arrange - DateTime dateTime = new(year: 2018, month: 06, day: 15, hour: 16, minute: 30, second: 0, kind: DateTimeKind.Utc); - Player player = new("Chucky"); - - // Act - void action() => Turn.CreateWithSpecifiedTime(dateTime, player, null); - - // Assert - Assert.Throws(action); - } - - - [Fact] - public void TestCreateWithSpecifiedTimeEmptyFacesThenException() - { - // Arrange - DateTime dateTime = new(year: 2018, month: 06, day: 15, hour: 16, minute: 30, second: 0, kind: DateTimeKind.Utc); - Player player = new("Chucky"); - DICE_N_FACES_1.Clear(); - - // Act - void action() => Turn.CreateWithSpecifiedTime(dateTime, player, DICE_N_FACES_1); - - // Assert - Assert.Throws(action); - } - - - - [Fact] - public void TestCreateWithDefaultTimeThenValid() - { - // Arrange - Player player = new("Chloe"); - - // Act - Turn turn = Turn.CreateWithDefaultTime(player, DICE_N_FACES_1); - - // Assert - Assert.Equal(DateTimeKind.Utc, turn.When.Kind); - Assert.Equal(DateTime.Now.ToUniversalTime().Date, turn.When.Date); - // N.B.: might fail between 11:59:59PM and 00:00:00AM - } - - - - [Fact] - public void TestToStringValidIfAllNormal() - { - // Arrange - DateTime dateTime = new(year: 2018, month: 06, day: 15, hour: 16, minute: 30, second: 0, kind: DateTimeKind.Utc); - string name = "Bobby"; - Player player = new(name); - string expected = $"2018-06-15 16:30:00 -- {name} rolled: " - + FACE_ONE.ToString() + " " - + FACE_TWO.ToString() + " " - + FACE_THREE.ToString() + " " - + FACE_FOUR.ToString(); - - Turn turn = Turn.CreateWithSpecifiedTime(dateTime, player, DICE_N_FACES_1); - - // Act - string actual = turn.ToString(); - Debug.WriteLine(actual); - - // Assert - Assert.Equal(expected, actual); - } - - [Fact] - public void TestDiceNFacesProperty() - { - // Arrange - Player player = new("Erika"); - - // Act - Turn turn = Turn.CreateWithDefaultTime(player, DICE_N_FACES_1); - IEnumerable, AbstractDieFace>> expected = DICE_N_FACES_1.AsEnumerable(); - - // Assert - Assert.Equal(expected, turn.DiceNFaces); +using Data; +using Model.Dice; +using Model.Dice.Faces; +using Model.Games; +using Model.Players; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using Xunit; + +namespace Tests.Model_UTs +{ + public class TurnTest + + { + private readonly GameRunner stubGameRunner = new Stub().LoadApp(); + + Dictionary DICE_N_FACES_1, DICE_N_FACES_2; + + public TurnTest() + { + DICE_N_FACES_1 = (Dictionary)stubGameRunner.GetAll().First().GetHistory().First().DiceNFaces; + DICE_N_FACES_2 = (Dictionary)stubGameRunner.GetAll().Last().GetHistory().Last().DiceNFaces; + } + + [Fact] + public void TestCreateWithSpecifiedTimeNotUTCThenValid() + { + // Arrange + DateTime dateTime = new(year: 2018, month: 06, day: 15, hour: 16, minute: 30, second: 0, kind: DateTimeKind.Local); + Player player = new("Alice"); + Assert.NotEqual(DateTimeKind.Utc, dateTime.Kind); + + // Act + Turn turn = Turn.CreateWithSpecifiedTime(dateTime, player, DICE_N_FACES_1); + + // Assert + Assert.Equal(DateTimeKind.Utc, turn.When.Kind); + Assert.Equal(dateTime.ToUniversalTime(), turn.When); + } + + + + [Fact] + public void TestCreateWithSpecifiedTimeUTCThenValid() + { + // Arrange + DateTime dateTime = new(year: 2018, month: 06, day: 15, hour: 16, minute: 30, second: 0, kind: DateTimeKind.Utc); + Player player = new("Bobby"); + Assert.Equal(DateTimeKind.Utc, dateTime.Kind); + + // Act + Turn turn = Turn.CreateWithSpecifiedTime(dateTime, player, DICE_N_FACES_1); + + // Assert + Assert.Equal(DateTimeKind.Utc, turn.When.Kind); + Assert.Equal(dateTime.ToUniversalTime(), turn.When); + } + + + [Fact] + public void TestCreateWithSpecifiedTimeNullPlayerThenException() + { + // Arrange + DateTime dateTime = new(year: 2018, month: 06, day: 15, hour: 16, minute: 30, second: 0, kind: DateTimeKind.Utc); + + // Act + void action() => Turn.CreateWithSpecifiedTime(dateTime, null, DICE_N_FACES_1); + + // Assert + Assert.Throws(action); + } + + [Fact] + public void TestCreateWithSpecifiedTimeNullFacesThenException() + { + // Arrange + DateTime dateTime = new(year: 2018, month: 06, day: 15, hour: 16, minute: 30, second: 0, kind: DateTimeKind.Utc); + Player player = new("Chucky"); + + // Act + void action() => Turn.CreateWithSpecifiedTime(dateTime, player, null); + + // Assert + Assert.Throws(action); + } + + + [Fact] + public void TestCreateWithSpecifiedTimeEmptyFacesThenException() + { + // Arrange + DateTime dateTime = new(year: 2018, month: 06, day: 15, hour: 16, minute: 30, second: 0, kind: DateTimeKind.Utc); + Player player = new("Chucky"); + DICE_N_FACES_1.Clear(); + + // Act + void action() => Turn.CreateWithSpecifiedTime(dateTime, player, DICE_N_FACES_1); + + // Assert + Assert.Throws(action); + } + + + + [Fact] + public void TestCreateWithDefaultTimeThenValid() + { + // Arrange + Player player = new("Chloe"); + + // Act + Turn turn = Turn.CreateWithDefaultTime(player, DICE_N_FACES_1); + + // Assert + Assert.Equal(DateTimeKind.Utc, turn.When.Kind); + Assert.Equal(DateTime.Now.ToUniversalTime().Date, turn.When.Date); + // N.B.: might fail between 11:59:59PM and 00:00:00AM } - [Fact] - public void TestEqualsFalseIfNotTurn() - { - // Arrange - Point point; - Turn turn; - Player player = new("Freddie"); - - // Act - point = new(1, 2); - turn = Turn.CreateWithDefaultTime(player, DICE_N_FACES_1); - - // Assert - Assert.False(point.Equals(turn)); - Assert.False(point.GetHashCode().Equals(turn.GetHashCode())); - Assert.False(turn.Equals(point)); - Assert.False(turn.GetHashCode().Equals(point.GetHashCode())); - } - - [Fact] - public void TestGoesThruToSecondMethodIfObjIsTypeTurn() - { - // Arrange - Object t1; - Turn t2; - Player player1 = new Player("Marvin"); - Player player2 = new Player("Noah"); - - // Act - t1 = Turn.CreateWithDefaultTime(player1, DICE_N_FACES_1); - t2 = Turn.CreateWithDefaultTime(player2, DICE_N_FACES_2); - - // Assert - Assert.False(t1.Equals(t2)); - Assert.False(t1.GetHashCode().Equals(t2.GetHashCode())); - Assert.False(t2.Equals(t1)); - Assert.False(t2.GetHashCode().Equals(t1.GetHashCode())); - } - - - [Fact] - public void TestEqualsFalseIfNotSamePlayer() - { - // Arrange - Player player1= new("Panama"); - Player player2= new("Clyde"); - - // Act - Turn t1 = Turn.CreateWithDefaultTime(player1, DICE_N_FACES_2); - Turn t2 = Turn.CreateWithDefaultTime(player2, DICE_N_FACES_2); - - // Assert - Assert.False(t1.Equals(t2)); - Assert.False(t1.GetHashCode().Equals(t2.GetHashCode())); - Assert.False(t2.Equals(t1)); - Assert.False(t2.GetHashCode().Equals(t1.GetHashCode())); + [Fact] + public void TestDiceNFacesProperty() + { + // Arrange + Player player = new("Erika"); + + // Act + Turn turn = Turn.CreateWithDefaultTime(player, DICE_N_FACES_1); + IEnumerable> expected = DICE_N_FACES_1.AsEnumerable(); + + // Assert + Assert.Equal(expected, turn.DiceNFaces); } - [Fact] - public void TestEqualsFalseIfNotSameTime() - { - // Arrange - Player player = new("Oscar"); - - // Act - Turn t1 = Turn.CreateWithSpecifiedTime(new DateTime(1994, 07, 10), player, DICE_N_FACES_1); - Turn t2 = Turn.CreateWithSpecifiedTime(new DateTime(1991, 08, 20), player, DICE_N_FACES_1); - - // Assert - Assert.False(t1.Equals(t2)); - Assert.False(t1.GetHashCode().Equals(t2.GetHashCode())); - Assert.False(t2.Equals(t1)); - Assert.False(t2.GetHashCode().Equals(t1.GetHashCode())); + [Fact] + public void TestEqualsFalseIfNotTurn() + { + // Arrange + Point point; + Turn turn; + Player player = new("Freddie"); + + // Act + point = new(1, 2); + turn = Turn.CreateWithDefaultTime(player, DICE_N_FACES_1); + + // Assert + Assert.False(point.Equals(turn)); + Assert.False(point.GetHashCode().Equals(turn.GetHashCode())); + Assert.False(turn.Equals(point)); + Assert.False(turn.GetHashCode().Equals(point.GetHashCode())); } - [Fact] - public void TestEqualsFalseIfNotSameDiceNFaces() - { - // Arrange - Player player = new("Django"); - - // Act - Turn t1 = Turn.CreateWithDefaultTime(player, DICE_N_FACES_1); - Turn t2 = Turn.CreateWithDefaultTime(player, DICE_N_FACES_2); - - // Assert - Assert.False(t1.Equals(t2)); - Assert.False(t1.GetHashCode().Equals(t2.GetHashCode())); - Assert.False(t2.Equals(t1)); - Assert.False(t2.GetHashCode().Equals(t1.GetHashCode())); - } - - [Fact] - public void TestEqualsTrueIfExactlySameProperties() - { - // Arrange - Player player = new("Elyse"); - - // Act - Turn t1 = Turn.CreateWithSpecifiedTime(new DateTime(1990, 04, 29), player, DICE_N_FACES_1); - Turn t2 = Turn.CreateWithSpecifiedTime(new DateTime(1990, 04, 29), player, DICE_N_FACES_1); - - // Assert - Assert.True(t1.Equals(t2)); - Assert.True(t1.GetHashCode().Equals(t2.GetHashCode())); - Assert.True(t2.Equals(t1)); - Assert.True(t2.GetHashCode().Equals(t1.GetHashCode())); - } - } -} + [Fact] + public void TestGoesThruToSecondMethodIfObjIsTypeTurn() + { + // Arrange + Object t1; + Turn t2; + Player player1 = new Player("Marvin"); + Player player2 = new Player("Noah"); + + // Act + t1 = Turn.CreateWithDefaultTime(player1, DICE_N_FACES_1); + t2 = Turn.CreateWithDefaultTime(player2, DICE_N_FACES_2); + + // Assert + Assert.False(t1.Equals(t2)); + Assert.False(t1.GetHashCode().Equals(t2.GetHashCode())); + Assert.False(t2.Equals(t1)); + Assert.False(t2.GetHashCode().Equals(t1.GetHashCode())); + } + + + [Fact] + public void TestEqualsFalseIfNotSamePlayer() + { + // Arrange + Player player1 = new("Panama"); + Player player2 = new("Clyde"); + + // Act + Turn t1 = Turn.CreateWithDefaultTime(player1, DICE_N_FACES_2); + Turn t2 = Turn.CreateWithDefaultTime(player2, DICE_N_FACES_2); + + // Assert + Assert.False(t1.Equals(t2)); + Assert.False(t1.GetHashCode().Equals(t2.GetHashCode())); + Assert.False(t2.Equals(t1)); + Assert.False(t2.GetHashCode().Equals(t1.GetHashCode())); + } + + [Fact] + public void TestEqualsFalseIfNotSameTime() + { + // Arrange + Player player = new("Oscar"); + + // Act + Turn t1 = Turn.CreateWithSpecifiedTime(new DateTime(1994, 07, 10), player, DICE_N_FACES_1); + Turn t2 = Turn.CreateWithSpecifiedTime(new DateTime(1991, 08, 20), player, DICE_N_FACES_1); + + // Assert + Assert.False(t1.Equals(t2)); + Assert.False(t1.GetHashCode().Equals(t2.GetHashCode())); + Assert.False(t2.Equals(t1)); + Assert.False(t2.GetHashCode().Equals(t1.GetHashCode())); + } + + [Fact] + public void TestEqualsFalseIfNotSameDiceNFaces() + { + // Arrange + Player player = new("Django"); + + // Act + Turn t1 = Turn.CreateWithDefaultTime(player, DICE_N_FACES_1); + Turn t2 = Turn.CreateWithDefaultTime(player, DICE_N_FACES_2); + + // Assert + Assert.False(t1.Equals(t2)); + Assert.False(t1.GetHashCode().Equals(t2.GetHashCode())); + Assert.False(t2.Equals(t1)); + Assert.False(t2.GetHashCode().Equals(t1.GetHashCode())); + } + + [Fact] + public void TestEqualsTrueIfExactlySameProperties() + { + // Arrange + Player player = new("Elyse"); + + // Act + Turn t1 = Turn.CreateWithSpecifiedTime(new DateTime(1990, 04, 29), player, DICE_N_FACES_1); + Turn t2 = Turn.CreateWithSpecifiedTime(new DateTime(1990, 04, 29), player, DICE_N_FACES_1); + + // Assert + Assert.True(t1.Equals(t2)); + Assert.True(t1.GetHashCode().Equals(t2.GetHashCode())); + Assert.True(t2.Equals(t1)); + Assert.True(t2.GetHashCode().Equals(t1.GetHashCode())); + } + } +} -- 2.36.3 From f12997f1f8fefacee781a8a35f36961e445432a3 Mon Sep 17 00:00:00 2001 From: Alexis DRAI Date: Sat, 1 Oct 2022 19:18:37 +0200 Subject: [PATCH 5/8] :recycle: :bug: :rotating_light: Refactor URIs and handle URI exceptions in prototype --- Sources/App/Program.cs | 18 ++++++++++++++++-- Sources/Data/Stub.cs | 10 ++++++---- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/Sources/App/Program.cs b/Sources/App/Program.cs index d80f387..5d89f6a 100644 --- a/Sources/App/Program.cs +++ b/Sources/App/Program.cs @@ -220,9 +220,23 @@ namespace App Console.WriteLine("create a face with an image uri, or enter 'ok' if you're finished"); menuChoiceNewFaces = Console.ReadLine(); - if (menuChoiceNewFaces != "ok") faces.Add(new(new Uri(menuChoiceNewFaces))); + if (menuChoiceNewFaces != "ok") + { + try + { + faces.Add(new(new Uri(menuChoiceNewFaces))); + } + catch (ArgumentNullException ex) + { + Console.WriteLine(ex.Message); + } + catch (UriFormatException ex) + { + Console.WriteLine("that URI was not valid"); + Console.WriteLine(ex.Message); + } + } } - die = new ImageDie(faces.ToArray()); return die; } diff --git a/Sources/Data/Stub.cs b/Sources/Data/Stub.cs index 3d4e934..e421177 100644 --- a/Sources/Data/Stub.cs +++ b/Sources/Data/Stub.cs @@ -43,12 +43,14 @@ namespace Data monopolyDice.Add(new ColorDie(colorFaces)); + string rootPath = "https://unsplash.com/photos/"; + ImageFace[] imageFaces = new ImageFace[] { - new(new Uri("https://unsplash.com/photos/TLD6iCOlyb0")), - new(new Uri("https://unsplash.com/photos/rTZW4f02zY8")), - new(new Uri("https://unsplash.com/photos/Hyu76loQLdk")), - new(new Uri("https://unsplash.com/photos/A_Ncbi-RH6s")), + new(new Uri(rootPath + "TLD6iCOlyb0")), + new(new Uri(rootPath + "rTZW4f02zY8")), + new(new Uri(rootPath + "Hyu76loQLdk")), + new(new Uri(rootPath + "A_Ncbi-RH6s")), }; monopolyDice.Add(new ImageDie(imageFaces)); -- 2.36.3 From 2fa185829fd9f5a67c366355d8d1da95bd4e23cc Mon Sep 17 00:00:00 2001 From: Alexis DRAI Date: Sun, 2 Oct 2022 00:31:43 +0200 Subject: [PATCH 6/8] :pencil2: :recycle: Rename Faces and override GetRandomFace() "ListFaces" was misleading because it is not a list GetRandomFace should return a Face when called from a HomogeneousDie --- Sources/Model/Dice/Die.cs | 12 ++++++------ Sources/Model/Dice/HomogeneousDie.cs | 5 +++++ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/Sources/Model/Dice/Die.cs b/Sources/Model/Dice/Die.cs index 6a1534c..6a62f47 100644 --- a/Sources/Model/Dice/Die.cs +++ b/Sources/Model/Dice/Die.cs @@ -7,21 +7,21 @@ namespace Model.Dice { public abstract class Die { - public IEnumerable ListFaces => listFaces; + public IEnumerable Faces => faces; protected static readonly Random rnd = new(); - private readonly List listFaces = new(); + private readonly List faces = new(); protected Die(params Face[] faces) { - listFaces.AddRange(faces); + this.faces.AddRange(faces); } - public Face GetRandomFace() + public virtual Face GetRandomFace() { - int faceIndex = rnd.Next(0, ListFaces.Count()); - return ListFaces.ElementAt(faceIndex); + int faceIndex = rnd.Next(0, Faces.Count()); + return Faces.ElementAt(faceIndex); } } } diff --git a/Sources/Model/Dice/HomogeneousDie.cs b/Sources/Model/Dice/HomogeneousDie.cs index 22ab110..6ccd6a9 100644 --- a/Sources/Model/Dice/HomogeneousDie.cs +++ b/Sources/Model/Dice/HomogeneousDie.cs @@ -7,5 +7,10 @@ namespace Model.Dice protected HomogeneousDie(params Face[] faces) : base(faces) { } + + public override Face GetRandomFace() + { + return (Face)base.GetRandomFace(); + } } } -- 2.36.3 From 3886fc7934c377c71258567da88f455aed0834de Mon Sep 17 00:00:00 2001 From: Ismail TAHA JANAN Date: Mon, 3 Oct 2022 15:48:13 +0200 Subject: [PATCH 7/8] code with error --- Sources/Data/Stub.cs | 12 ++++++------ Sources/Model/Dice/ColorDie.cs | 1 + Sources/Model/Dice/DieManager.cs | 16 ++++++++-------- Sources/Model/Games/Game.cs | 14 +++++++------- Sources/Model/Games/GameRunner.cs | 8 ++++---- Sources/Model/Games/Turn.cs | 12 ++++++------ 6 files changed, 32 insertions(+), 31 deletions(-) diff --git a/Sources/Data/Stub.cs b/Sources/Data/Stub.cs index 38b7923..b39f763 100644 --- a/Sources/Data/Stub.cs +++ b/Sources/Data/Stub.cs @@ -20,16 +20,16 @@ namespace Data gr.GlobalPlayerManager.Add(player3); - List monopolyDice = new(); - List dndDice = new(); + List> monopolyDice = new(); + List dndDice = new(); string monopolyName = "Monopoly", dndName = "DnD"; NumberDieFace[] d6Faces = new NumberDieFace[] { new(1), new(2), new(3), new(4), new(5), new(6) }; + monopolyDice.Add(new NumberDie(new NumberDieFace(1), new NumberDieFace(1), new NumberDieFace(1), new NumberDieFace(1))); monopolyDice.Add(new NumberDie(d6Faces)); - monopolyDice.Add(new NumberDie(d6Faces)); - monopolyDice.Add(new ColorDie(new("#ff0000"), new("#00ff00"), new("#0000ff"), new("#ffff00"), new("#000000"), new("#ffffff"))); + //monopolyDice.Add(new ColorDie(new("#ff0000"), new("#00ff00"), new("#0000ff"), new("#ffff00"), new("#000000"), new("#ffffff"))); NumberDieFace[] d20Faces = new NumberDieFace[] { new(1), new(2), new(3), new(4), new(5), @@ -40,8 +40,8 @@ namespace Data dndDice.Add(new NumberDie(d20Faces)); - gr.GlobalDieManager.Add(new KeyValuePair>>(dndName, dndDice.AsEnumerable())); - gr.GlobalDieManager.Add(new KeyValuePair>>(monopolyName, monopolyDice.AsEnumerable())); + gr.GlobalDieManager.Add(new KeyValuePair>>>(dndName, dndDice.AsEnumerable())); + gr.GlobalDieManager.Add(new KeyValuePair>>>(monopolyName, monopolyDice.AsEnumerable())); string game1 = "Forgotten Realms", game2 = "4e", game3 = "The Coopers"; diff --git a/Sources/Model/Dice/ColorDie.cs b/Sources/Model/Dice/ColorDie.cs index d136db8..49d71de 100644 --- a/Sources/Model/Dice/ColorDie.cs +++ b/Sources/Model/Dice/ColorDie.cs @@ -14,6 +14,7 @@ namespace Model.Dice { public ColorDie(params ColorDieFace[] faces) : base(faces) { + } } } diff --git a/Sources/Model/Dice/DieManager.cs b/Sources/Model/Dice/DieManager.cs index 704f200..6b6c85a 100644 --- a/Sources/Model/Dice/DieManager.cs +++ b/Sources/Model/Dice/DieManager.cs @@ -5,30 +5,30 @@ using System.Linq; namespace Model.Dice { - public class DieManager : IManager>>>> + public class DieManager : IManager>>> { - private readonly Dictionary>>> diceGroups = new(); + private readonly Dictionary>> diceGroups = new(); - public KeyValuePair>>> Add(KeyValuePair>>> toAdd) + public KeyValuePair>> Add(KeyValuePair>> toAdd) { // on trim la clé d'abord diceGroups.Add(toAdd.Key.Trim(), toAdd.Value); return toAdd; } - public IEnumerable>>>> GetAll() + public IEnumerable>>> GetAll() { return diceGroups.AsEnumerable(); } - public KeyValuePair>>> GetOneByName(string name) + public KeyValuePair>> GetOneByName(string name) { // les groupes de dés nommés : // ils sont case-sensistive, mais "mon jeu" == "mon jeu " == " mon jeu" - return new KeyValuePair>>>(name, diceGroups[name]); + return new KeyValuePair>>(name, diceGroups[name]); } - public void Remove(KeyValuePair>>> toRemove) + public void Remove(KeyValuePair>> toRemove) { diceGroups.Remove(toRemove.Key); } @@ -43,7 +43,7 @@ namespace Model.Dice throw new NotImplementedException(); }*/ - public KeyValuePair>>> Update(KeyValuePair>>> before, KeyValuePair>>> after) + public KeyValuePair>> Update(KeyValuePair>> before, KeyValuePair>> after) { // pas autorisé de changer les dés, juste le nom if (!before.Value.Equals(after.Value)) diff --git a/Sources/Model/Games/Game.cs b/Sources/Model/Games/Game.cs index 6b9a85b..37b2722 100644 --- a/Sources/Model/Games/Game.cs +++ b/Sources/Model/Games/Game.cs @@ -57,8 +57,8 @@ namespace Model.Games /// /// the group of dice used for this game /// - public IEnumerable>> Dice => dice; - private readonly IEnumerable>> dice; + public IEnumerable> Dice => dice; + private readonly IEnumerable> dice; /// /// constructs a Game with its own history of Turns. @@ -68,7 +68,7 @@ namespace Model.Games /// the turns that have been done so far /// the game's player manager, doing CRUD on players and switching whose turn it is /// the group of dice used for this game - public Game(string name, IManager playerManager, IEnumerable>> dice, IEnumerable turns) + public Game(string name, IManager playerManager, IEnumerable> dice, IEnumerable turns) { Name = name; PlayerManager = playerManager; @@ -83,7 +83,7 @@ namespace Model.Games /// the name of the game 😎 /// the game's player manager, doing CRUD on players and switching whose turn it is /// the group of dice used for this game - public Game(string name, IManager playerManager, IEnumerable>> dice) + public Game(string name, IManager playerManager, IEnumerable> dice) : this(name, playerManager, dice, null) { } @@ -161,10 +161,10 @@ namespace Model.Games /// throws all the Dice in FavGroup and returns a list of their Faces /// /// list of AbstractDieFaces after a throw - private Dictionary>, AbstractDieFace> ThrowAll() + private Dictionary, AbstractDieFace> ThrowAll() { - Dictionary>, AbstractDieFace> faces = new(); - foreach (AbstractDie> die in dice) + Dictionary, AbstractDieFace> faces = new(); + foreach (AbstractDie die in dice) { faces.Add(die, die.GetRandomFace()); } diff --git a/Sources/Model/Games/GameRunner.cs b/Sources/Model/Games/GameRunner.cs index 4498d7f..6fc9d38 100644 --- a/Sources/Model/Games/GameRunner.cs +++ b/Sources/Model/Games/GameRunner.cs @@ -12,17 +12,17 @@ namespace Model.Games public class GameRunner : IManager { public IManager GlobalPlayerManager { get; private set; } - public IManager,object>>>> GlobalDieManager { get; private set; } + public IManager>>> GlobalDieManager { get; private set; } private readonly List games; - public GameRunner(IManager globalPlayerManager, IManager,object>>>> globalDieManager, List games) + public GameRunner(IManager globalPlayerManager, IManager>>> globalDieManager, List games) { GlobalPlayerManager = globalPlayerManager; GlobalDieManager = globalDieManager; this.games = games ?? new(); } - public GameRunner(IManager globalPlayerManager, IManager,object>>>> globalDieManager) + public GameRunner(IManager globalPlayerManager, IManager>>> globalDieManager) : this(globalPlayerManager, globalDieManager, null){ } @@ -65,7 +65,7 @@ namespace Model.Games /// /// creates a new game /// - public Game StartNewGame(string name, IManager playerManager, IEnumerable,object>> dice) + public Game StartNewGame(string name, IManager playerManager, IEnumerable> dice) { Game game = new(name, playerManager, dice); return Add(game); diff --git a/Sources/Model/Games/Turn.cs b/Sources/Model/Games/Turn.cs index ea202d4..7c7f33e 100644 --- a/Sources/Model/Games/Turn.cs +++ b/Sources/Model/Games/Turn.cs @@ -33,8 +33,8 @@ namespace Model.Games /// /// the collection of Face that were rolled /// - public IEnumerable, AbstractDieFace>> DiceNFaces => diceNFaces.AsEnumerable(); - private readonly Dictionary, AbstractDieFace> diceNFaces; + public IEnumerable, AbstractDieFace>> DiceNFaces => diceNFaces.AsEnumerable(); + private readonly Dictionary, AbstractDieFace> diceNFaces; /// /// this private constructor is to be used only by factories @@ -42,7 +42,7 @@ namespace Model.Games /// date and time of the turn /// player who played the turn /// faces that were rolled - private Turn(DateTime when, Player player, Dictionary, AbstractDieFace> diceNFaces) + private Turn(DateTime when, Player player, Dictionary, AbstractDieFace> diceNFaces) { When = when; Player = player; @@ -59,7 +59,7 @@ namespace Model.Games /// player who played the turn /// faces that were rolled /// a new Turn object - public static Turn CreateWithSpecifiedTime(DateTime when, Player player, Dictionary, AbstractDieFace> diceNFaces) + public static Turn CreateWithSpecifiedTime(DateTime when, Player player, Dictionary, AbstractDieFace> diceNFaces) { if (player is null) { @@ -87,7 +87,7 @@ namespace Model.Games /// player who played the turn /// faces that were rolled /// a new Turn object - public static Turn CreateWithDefaultTime(Player player, Dictionary, AbstractDieFace> diceNFaces) + public static Turn CreateWithDefaultTime(Player player, Dictionary, AbstractDieFace> diceNFaces) { return CreateWithSpecifiedTime(DateTime.UtcNow, player, diceNFaces); } @@ -108,7 +108,7 @@ namespace Model.Games date, time, Player.ToString()); - foreach (AbstractDieFace face in this.diceNFaces.Values) + foreach (AbstractDieFace face in this.diceNFaces.Values) { sb.Append(" " + face.ToString()); } -- 2.36.3 From e49afa3b14d8bf518c285118adab0f6eddd7d11e Mon Sep 17 00:00:00 2001 From: Ismail TAHA JANAN Date: Mon, 3 Oct 2022 22:31:00 +0200 Subject: [PATCH 8/8] :adhesive_bandage: improve code --- Sources/Model/Dice/Faces/AbstractDieFace.cs | 31 --------------------- Sources/Model/Dice/Faces/ColorDieFace.cs | 26 ----------------- Sources/Model/Dice/Faces/ImageDieFace.cs | 22 --------------- Sources/Model/Dice/Faces/NumberDieFace.cs | 19 ------------- Sources/Model/Dice/HomogeneousDice.cs | 17 ----------- 5 files changed, 115 deletions(-) delete mode 100644 Sources/Model/Dice/Faces/AbstractDieFace.cs delete mode 100644 Sources/Model/Dice/Faces/ColorDieFace.cs delete mode 100644 Sources/Model/Dice/Faces/ImageDieFace.cs delete mode 100644 Sources/Model/Dice/Faces/NumberDieFace.cs delete mode 100644 Sources/Model/Dice/HomogeneousDice.cs diff --git a/Sources/Model/Dice/Faces/AbstractDieFace.cs b/Sources/Model/Dice/Faces/AbstractDieFace.cs deleted file mode 100644 index 3872a0f..0000000 --- a/Sources/Model/Dice/Faces/AbstractDieFace.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Model.Dice.Faces -{ - public abstract class AbstractDieFace - { - /// - /// every die face has a value, and they can all be represented by an int, - /// even if they're not litterally a decimal number - ///
- /// USE GetPracticalValue for a Value specific to face type - ///
- public T Value { get; protected set; } - - public abstract T GetPracticalValue(); - - public AbstractDieFace(T value) - { - Value = value; - } - - public override string ToString() - { - return GetPracticalValue().ToString(); - } - } -} diff --git a/Sources/Model/Dice/Faces/ColorDieFace.cs b/Sources/Model/Dice/Faces/ColorDieFace.cs deleted file mode 100644 index 4465203..0000000 --- a/Sources/Model/Dice/Faces/ColorDieFace.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Model.Dice.Faces -{ - public class ColorDieFace : AbstractDieFace - { - - /// - /// - /// Color type - public ColorDieFace(Color hexValueString):base(hexValueString) - {} - - - public override Color GetPracticalValue() - { - // https://stackoverflow.com/questions/1139957/convert-integer-to-hexadecimal-and-back-again - return Value; - } - } -} diff --git a/Sources/Model/Dice/Faces/ImageDieFace.cs b/Sources/Model/Dice/Faces/ImageDieFace.cs deleted file mode 100644 index 671951f..0000000 --- a/Sources/Model/Dice/Faces/ImageDieFace.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Model.Dice.Faces -{ - public class ImageDieFace : AbstractDieFace - { - public ImageDieFace(Uri uri):base(uri) - {} - - - - public override Uri GetPracticalValue() - { - return Value; - } - } -} diff --git a/Sources/Model/Dice/Faces/NumberDieFace.cs b/Sources/Model/Dice/Faces/NumberDieFace.cs deleted file mode 100644 index 3bb494e..0000000 --- a/Sources/Model/Dice/Faces/NumberDieFace.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Model.Dice.Faces -{ - public class NumberDieFace : AbstractDieFace - { - public NumberDieFace(int value):base(value) - {} - - public override int GetPracticalValue() - { - return Value; - } - } -} diff --git a/Sources/Model/Dice/HomogeneousDice.cs b/Sources/Model/Dice/HomogeneousDice.cs deleted file mode 100644 index cc4520a..0000000 --- a/Sources/Model/Dice/HomogeneousDice.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Model.Dice.Faces; - -namespace Model.Dice -{ - public class HomogeneousDice: Die - { - public HomogeneousDice(params Face[] faces) : base(faces) - { - - } - } -} -- 2.36.3