namespace Akwaier.Engine; /// Eén van de zes spelers, met banksaldo en aandelenbezit. public sealed class Speler { public Speler(int nummer, string naam) { Nummer = nummer; Naam = naam; Geld = Regels.Startgeld; } public int Nummer { get; } public string Naam { get; set; } /// Waar of de speler door de mens bediend wordt. public bool Mens { get; set; } /// bezit%(): het banksaldo. public int Geld { get; set; } /// aandelen%(): bezit per keten, plaats 1..8. public int[] Aandelen { get; } = new int[Regels.AantalKetens + 1]; } /// Wat er van een vakje te zeggen valt, zonder het bord aan te raken. public sealed class Zetkans { public int X { get; init; } public int Y { get; init; } /// Onwaar als kanniet% waar zou zijn: hier leggen mag niet. public bool Mag { get; init; } /// De aanliggende ketens, ontdubbeld, in de volgorde van DATA 1300. public List Aanliggend { get; init; } = new(); /// Aanliggende losse stenen; die worden mee opgeslokt. public List<(int X, int Y)> Losse { get; init; } = new(); /// De grootste aanliggende keten; 0 als er geen keten aanligt. public int Winnaar { get; init; } /// kiezen%: meerdere even grote ketens, de speler moet kiezen. public bool Gelijkspel { get; init; } public List Gelijken { get; init; } = new(); public bool Fuseert => Aanliggend.Count > 1; } /// Wat één opgeslokte keten aan bonus uitkeert. public sealed class Uitkering { public int Keten { get; init; } public int Naar { get; init; } public int Grootte { get; init; } public int Prijs { get; init; } public int Pot { get; init; } public Dictionary Bedragen { get; } = new(); } /// Verslag van één gespeelde steen. public sealed class Zetverslag { public int X { get; init; } public int Y { get; init; } /// De keten waar de steen bij hoort; 0 voor een losse steen. public int Keten { get; set; } public List Opgeslokt { get; } = new(); public List Uitkeringen { get; } = new(); } /// Wordt gemeld als een zet tegen de regels ingaat. public sealed class OngeldigeZet : Exception { public OngeldigeZet(string bericht) : base(bericht) { } }