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 int Id { get; set; } public TimeSpan Duration { get; set; } public DateOnly Date { get; set; } public ReadOnlyCollection Players { get; private set; } private List players; public ReadOnlyCollection Turns { get; private set; } private List turns; public ReadOnlyDictionary Grilles { get; private set; } private readonly Dictionary grilles; public ReadOnlyDictionary Scores { get; private set; } private readonly Dictionary scores; public GameMode GameMode { get; set; } //public Game(TimeSpan duration, DateOnly date, Dictionary grilles, Dictionary scores, List turns, GameMode gameMode,int id=0) //{ // Players = players.AsReadOnly(); // Duration = duration; // Date = date; // Grilles = new ReadOnlyDictionary(grilles); // Scores = new ReadOnlyDictionary(scores); // Turns = turns.AsReadOnly(); // GameMode = gameMode; // Id = id; //} public Game(DateOnly date, Player ?owner, GameMode gameMode, int id = 0) { Date = date; players = new(); turns = new(); grilles = new Dictionary(); scores = new Dictionary(); Players = new ReadOnlyCollection(players); Grilles = new ReadOnlyDictionary(grilles); Scores = new ReadOnlyDictionary(scores); Turns = new ReadOnlyCollection(turns); grilles.Add(owner, new Grille()); scores.Add(owner, 0); players.Add(owner); GameMode = gameMode; Id = id; } public Game(int id, TimeSpan duration, DateOnly date, List players, List turns, Dictionary grilles, Dictionary scores, GameMode gameMode) { Id = id; Duration = duration; Date = date; this.players = players; Players = new ReadOnlyCollection(this.players); this.turns = turns; Turns = new ReadOnlyCollection(this.turns); this.grilles = grilles; Grilles = new ReadOnlyDictionary(this.grilles); this.scores = scores; Scores = new ReadOnlyDictionary(this.scores); GameMode = gameMode; } public bool AddPlayerToGame(Player player) { if(grilles.ContainsKey(player) == false && scores.ContainsKey(player) == false) { grilles.Add(player, new Grille()); scores.Add(player, 0); return true; } return false; } public bool AddScoreToPlayer(Player player, int score) { if (grilles.ContainsKey(player) == true && scores.ContainsKey(player) == true) { scores[player] = score; return true; } return false; } public bool AddCaseValueToPlayer(Player player, int value, int index) { if (grilles.ContainsKey(player) == true && scores.ContainsKey(player) == true) { return grilles[player].AddValueToCase(value, index); } return false; } public void AddTurn(Turn turn) { turns.Add(turn); } public void AddTime(TimeSpan time) { Duration = time; } } }