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] : '?';
}