ajout de la classe plateau
This commit was merged in pull request #3.
This commit is contained in:
58
src/LittleTown.Core/BoardAggregate/Board.cs
Normal file
58
src/LittleTown.Core/BoardAggregate/Board.cs
Normal file
@@ -0,0 +1,58 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
28
src/LittleTown.Core/BoardAggregate/Tile.cs
Normal file
28
src/LittleTown.Core/BoardAggregate/Tile.cs
Normal file
@@ -0,0 +1,28 @@
|
||||
using System.Text.Json.Serialization;
|
||||
using LittleTown.Core.Enums;
|
||||
|
||||
namespace LittleTown.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Represente les infos d'une tile sur le plateau de jeu
|
||||
/// /// </summary>
|
||||
public record struct Tile
|
||||
{
|
||||
/// <summary>
|
||||
/// Le type de ressource présente sur cette Tile
|
||||
/// </summary>
|
||||
/// <value></value>
|
||||
[JsonConverter(typeof(JsonStringEnumConverter))]
|
||||
public ResourceType ResourceType { get; init; }
|
||||
|
||||
/// <summary>
|
||||
/// Position X sur le plateau de cette tile, X = 0 a gauche du plateau
|
||||
/// </summary>
|
||||
/// <value></value>
|
||||
public int PosX { get; init; }
|
||||
/// <summary>
|
||||
/// Position Y, sur la hauteur, du plateau, le Y = 0 est en bas du plateau
|
||||
/// </summary>
|
||||
/// <value></value>
|
||||
public int PosY { get; init; }
|
||||
}
|
||||
276
src/LittleTown.Core/Data/Board1.json
Normal file
276
src/LittleTown.Core/Data/Board1.json
Normal file
@@ -0,0 +1,276 @@
|
||||
{
|
||||
"Width": 9,
|
||||
"Height": 6,
|
||||
"Tiles": [
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 0,
|
||||
"PosY": 0
|
||||
},
|
||||
{
|
||||
"ResourceType": "Wood",
|
||||
"PosX": 1,
|
||||
"PosY": 0
|
||||
},
|
||||
{
|
||||
"ResourceType": "Wood",
|
||||
"PosX": 2,
|
||||
"PosY": 0
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 3,
|
||||
"PosY": 0
|
||||
},
|
||||
{
|
||||
"ResourceType": "Fish",
|
||||
"PosX": 4,
|
||||
"PosY": 0
|
||||
},
|
||||
{
|
||||
"ResourceType": "Fish",
|
||||
"PosX": 5,
|
||||
"PosY": 0
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 6,
|
||||
"PosY": 0
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 7,
|
||||
"PosY": 0
|
||||
},
|
||||
{
|
||||
"ResourceType": "Wood",
|
||||
"PosX": 8,
|
||||
"PosY": 0
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 0,
|
||||
"PosY": 1
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 1,
|
||||
"PosY": 1
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 2,
|
||||
"PosY": 1
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 3,
|
||||
"PosY": 1
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 4,
|
||||
"PosY": 1
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 5,
|
||||
"PosY": 1
|
||||
},
|
||||
{
|
||||
"ResourceType": "Wood",
|
||||
"PosX": 6,
|
||||
"PosY": 1
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 7,
|
||||
"PosY": 1
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 8,
|
||||
"PosY": 1
|
||||
},
|
||||
{
|
||||
"ResourceType": "Wood",
|
||||
"PosX": 0,
|
||||
"PosY": 2
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 1,
|
||||
"PosY": 2
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 2,
|
||||
"PosY": 2
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 3,
|
||||
"PosY": 2
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 4,
|
||||
"PosY": 2
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 5,
|
||||
"PosY": 2
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 6,
|
||||
"PosY": 2
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 7,
|
||||
"PosY": 2
|
||||
},
|
||||
{
|
||||
"ResourceType": "Fish",
|
||||
"PosX": 8,
|
||||
"PosY": 2
|
||||
},
|
||||
{
|
||||
"ResourceType": "Fish",
|
||||
"PosX": 0,
|
||||
"PosY": 3
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 1,
|
||||
"PosY": 3
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 2,
|
||||
"PosY": 3
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 3,
|
||||
"PosY": 3
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 4,
|
||||
"PosY": 3
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 5,
|
||||
"PosY": 3
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 6,
|
||||
"PosY": 3
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 7,
|
||||
"PosY": 3
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 8,
|
||||
"PosY": 3
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 0,
|
||||
"PosY": 4
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 1,
|
||||
"PosY": 4
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 2,
|
||||
"PosY": 4
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 3,
|
||||
"PosY": 4
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 4,
|
||||
"PosY": 4
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 5,
|
||||
"PosY": 4
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 6,
|
||||
"PosY": 4
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 7,
|
||||
"PosY": 4
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 8,
|
||||
"PosY": 4
|
||||
},
|
||||
{
|
||||
"ResourceType": "Rock",
|
||||
"PosX": 0,
|
||||
"PosY": 5
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 1,
|
||||
"PosY": 5
|
||||
},
|
||||
{
|
||||
"ResourceType": "Wood",
|
||||
"PosX": 2,
|
||||
"PosY": 5
|
||||
},
|
||||
{
|
||||
"ResourceType": "Rock",
|
||||
"PosX": 3,
|
||||
"PosY": 5
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 4,
|
||||
"PosY": 5
|
||||
},
|
||||
{
|
||||
"ResourceType": "Fish",
|
||||
"PosX": 5,
|
||||
"PosY": 5
|
||||
},
|
||||
{
|
||||
"ResourceType": "None",
|
||||
"PosX": 6,
|
||||
"PosY": 5
|
||||
},
|
||||
{
|
||||
"ResourceType": "Rock",
|
||||
"PosX": 7,
|
||||
"PosY": 5
|
||||
},
|
||||
{
|
||||
"ResourceType": "Rock",
|
||||
"PosX": 8,
|
||||
"PosY": 5
|
||||
}
|
||||
]
|
||||
}
|
||||
18
src/LittleTown.Core/Enumerations/ResourceType.cs
Normal file
18
src/LittleTown.Core/Enumerations/ResourceType.cs
Normal file
@@ -0,0 +1,18 @@
|
||||
namespace LittleTown.Core.Enums;
|
||||
|
||||
/// <summary>
|
||||
/// Les types de ressources existant dans le jeu
|
||||
/// </summary>
|
||||
public enum ResourceType
|
||||
{
|
||||
/// <summary> certaines cases n'ont aucunes ressources </summary>
|
||||
None,
|
||||
/// <summary> Pierres, présente sur le plateau, ne sont pas de la nourriture </summary>
|
||||
Rock,
|
||||
/// <summary> Bois, présente sur le plateau, n'est pas de la nourriture </summary>
|
||||
Wood,
|
||||
/// <summary> Poisson, présente sur le plateau, peut être utilisé comme nourriture </summary>
|
||||
Fish,
|
||||
///<summary> Blé, non présente sur le plateau, peut être utilisé comme nourriture </summary>
|
||||
Cereal
|
||||
}
|
||||
21
src/LittleTown.Core/Exceptions/MatchConfigException.cs
Normal file
21
src/LittleTown.Core/Exceptions/MatchConfigException.cs
Normal file
@@ -0,0 +1,21 @@
|
||||
namespace LittleTown.Core.Exceptions;
|
||||
|
||||
/// <summary>
|
||||
/// Exception indiquant un probleme lors de la configuration d'un match.
|
||||
/// </summary>
|
||||
public class MatchConfigException : Exception
|
||||
{
|
||||
/// <summary> constructeur de base </summary>
|
||||
public MatchConfigException() : base() { }
|
||||
|
||||
/// <summary> Constructeur avec un message d'erreur </summary>
|
||||
/// <param name="message">le message decrivant l'exception en detail</param>
|
||||
public MatchConfigException(string message) : base(message) { }
|
||||
|
||||
/// <summary>
|
||||
/// Constructeur avec un message et une exception interne
|
||||
/// </summary>
|
||||
/// <param name="message">Le message de l'erreur</param>
|
||||
/// <param name="innerException">l'exception encapsulée</param>
|
||||
public MatchConfigException(string message, Exception innerException) : base(message, innerException) { }
|
||||
}
|
||||
Reference in New Issue
Block a user