namespace Akwaier.Engine; /// /// De vaste getallen van het spel, zoals ze in AQUIRE.BBC stonden. /// public static class Regels { /// Het bord is 15 bij 15. public const int Grootte = 15; /// Waarde van een leeg vakje (in het origineel 99 of -1). public const int Leeg = -1; /// Een losse steen die nog bij geen enkele keten hoort. public const int Los = 0; public const int AantalKetens = 8; public const string Letters = "ABCDEFGH"; /// De vier buren, in de volgorde van DATA 1300 uit het origineel. public static readonly (int Dx, int Dy)[] Buren = { (1, 0), (-1, 0), (0, 1), (0, -1) }; /// DATA 20000: basisprijs per keten, plaats 0 blijft leeg. public static readonly int[] Basisprijs = { 0, 900, 900, 800, 700, 700, 600, 500, 400 }; /// DATA 1980: boven elke drempel komt er 100 bij de prijs. public static readonly int[] Prijsdrempels = { 0, 1, 2, 3, 4, 9, 14, 19, 24, 35 }; public const int Startgeld = 25_000; /// speelsteen%(8,6): acht stenen in de hand. public const int HandGrootte = 8; public const int AantalSpelers = 6; /// W% >= 210 maakt een einde aan het spel. public const int MaxBeurten = 210; /// Een keten groter dan dit beëindigt het spel. public const int EindKetenGrootte = 100; /// Steennummer 1..225 omzetten naar kolom en rij, als regel 2240/2250. public static (int X, int Y) TegelPositie(int n) { int y = n % Grootte; if (y == 0) y = Grootte; int x = n / Grootte; if (x == 0) x = Grootte; return (x, y); } /// Kolom en rij als "B7": rijletter gevolgd door kolomnummer. public static string Naam(int x, int y) => $"{(char)('A' + y - 1)}{x}"; public static char KetenLetter(int c) => c >= 1 && c <= 8 ? Letters[c - 1] : '?'; }