Files
LittleTown/src/LittleTown.Core/BoardAggregate/Board.cs
2024-05-29 12:20:04 +02:00

59 lines
1.9 KiB
C#

using System.Text.Json.Serialization;
namespace LittleTown.Core;
/// <summary>
/// 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
/// /// </summary>
public class Board
{
/// <summary> Nombre de colonne dans le plateau </summary>
public int Width { get; init; }
/// <summary> Nombre de rangée dans le plateau </summary>
public int Height { get; init; }
[JsonInclude]
private Tile[] Tiles { get; init; } = new Tile[1];
/// <summary>
/// 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
/// </summary>
/// <param name="x">la colonne de la tile partant de la gauche a 0</param>
/// <param name="y">ligne de la tile partant du bas a 0</param>
/// <returns>la tile</returns>
public Tile? GetTile(int x, int y)
{
if (x < 0 || x >= Width || y < 0 || y >= Height)
return null;
return Tiles[x + y * Width];
}
/// <summary>Permet de recuperer la liste des tiles autour de la position en parametre </summary>
/// <param name="x">la colonne au centre de la zone</param>
/// <param name="y">la rangée du centre de la zone</param>
/// <returns>une liste des tiles contenant entre 3(coin) et 8(centre) tiles</returns>
public ICollection<Tile> GetArea(int x, int y)
{
List<Tile> result = new List<Tile>();
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;
}
}