using System.Text.Json.Serialization;
namespace LittleTown.Core;
///
/// Represente un plateau de jeu dans un match
/// Le plateau de littleTown est constitué 9 X 6 cases
/// Chaque case est a un type et peut ou pas contenir un batiment
/// ///
public class Board
{
/// Nombre de colonne dans le plateau
public int Width { get; init; }
/// Nombre de rangée dans le plateau
public int Height { get; init; }
[JsonInclude]
private Tile[] Tiles { get; init; } = new Tile[1];
///
/// Permet de récupéré une tile sur le plateau, le 0,0 étant le bas gauche du plateau, x sur la largeur et y la hauteur
///
/// la colonne de la tile partant de la gauche a 0
/// ligne de la tile partant du bas a 0
/// la tile
public Tile? GetTile(int x, int y)
{
if (x < 0 || x >= Width || y < 0 || y >= Height)
return null;
return Tiles[x + y * Width];
}
/// Permet de recuperer la liste des tiles autour de la position en parametre
/// la colonne au centre de la zone
/// la rangée du centre de la zone
/// une liste des tiles contenant entre 3(coin) et 8(centre) tiles
public ICollection GetArea(int x, int y)
{
List result = new List();
for (int ix = -1; ix <= 1; ix++)
{
for (int iy = -1; iy <= 1; iy++)
{
if (iy != 0 || ix != 0)
{
Tile? t = GetTile(x + ix, y + iy);
if (null != t)
{
result.Add((Tile)t);
}
}
}
}
return result;
}
}