59 lines
1.9 KiB
C#
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;
|
|
}
|
|
}
|