diff --git a/Sources/Model/Game.cs b/Sources/Model/Game.cs new file mode 100644 index 0000000..2f0ca4c --- /dev/null +++ b/Sources/Model/Game.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Model +{ + public class Game + { + public string Name { get; private set; } + + public bool IsFirstTurn { get; private set; } = false; + + private readonly List turns; + + /// + /// get a READ ONLY enumerable of all turns belonging to this game + /// + /// a readonly enumerable of all this game's turns + public IEnumerable GetHistory() => turns.AsEnumerable(); + + public PlayerManager PlayerManager { get; } + + public Game(string name, IEnumerable turns, PlayerManager playerManager) + { + Name = name; + this.turns = turns.ToList() ?? new List(); + PlayerManager = playerManager ?? new PlayerManager(); + } + + public Game(string name) + : this(name, null, null) + { } + + public void PerformTurn() + { + Player player = PlayerManager.WhoPlaysNow(IsFirstTurn); + if (IsFirstTurn) { IsFirstTurn = false; } // only true one time (on the first turn...) + + + // in a "faces" var, throw all the dice and stuff... + + Turn turn = Turn.CreateWithDefaultTime(new Player(player)/*, faces*/); //using a copy so that next line doesn't "change history" + PlayerManager.PrepareNextPlayer(player); + turns.Add(turn); + } + + + + + // TODO test and debug + public override string ToString() + { + StringBuilder sb = new(); + sb.AppendFormat("Game: {0}===========\n" + + "{1} are playing. {2} is next.\n" + + "Log:\n", + Name, + PlayerManager.GetAll().ToString(), + PlayerManager.WhoPlaysNow(IsFirstTurn)); + + foreach (Turn turn in this.turns) + { + sb.Append("\t" + turn.ToString()); + } + + return sb.ToString(); + } + } +}