temp
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
using LittleTown.Core.Exceptions;
|
||||||
using LittleTown.Core.Ports;
|
using LittleTown.Core.Ports;
|
||||||
|
|
||||||
namespace LittleTown.Core;
|
namespace LittleTown.Core;
|
||||||
@@ -9,8 +10,20 @@ public class Match
|
|||||||
{
|
{
|
||||||
private const int _minPlayerCount = 2;
|
private const int _minPlayerCount = 2;
|
||||||
private const int _maxPlayerCount = 4;
|
private const int _maxPlayerCount = 4;
|
||||||
|
|
||||||
|
private int _maxWorkerPerPlayer;
|
||||||
|
private int _maxBuidingPerPlayer;
|
||||||
|
|
||||||
private readonly Board _board;
|
private readonly Board _board;
|
||||||
private ICollection<Building> _buildings;
|
private ICollection<Building> _buildings;
|
||||||
|
private ICollection<Objective> _objectives;
|
||||||
|
|
||||||
|
private Random _random = new Random();
|
||||||
|
|
||||||
|
private Dictionary<int, PlayerZone> _playersZones = new Dictionary<int, PlayerZone>();
|
||||||
|
|
||||||
|
/// <summary> LE numero du tour en cours (Partant de 1) </summary>
|
||||||
|
public int CurrentTurn { get; private set; } = 1;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructeur d'une nouvelle partie avec un nombre de joueurs données en parametres
|
/// Constructeur d'une nouvelle partie avec un nombre de joueurs données en parametres
|
||||||
@@ -24,7 +37,54 @@ public class Match
|
|||||||
ArgumentOutOfRangeException.ThrowIfGreaterThan(nbPlayer, _maxPlayerCount);
|
ArgumentOutOfRangeException.ThrowIfGreaterThan(nbPlayer, _maxPlayerCount);
|
||||||
|
|
||||||
_board = staticData.GetBoard(1);
|
_board = staticData.GetBoard(1);
|
||||||
|
|
||||||
_buildings = staticData.GetBuildings();
|
_buildings = staticData.GetBuildings();
|
||||||
|
_objectives = staticData.GetObjectives();
|
||||||
|
|
||||||
|
List<int> freeObjectiveIndexs = Enumerable.Range(0, _objectives.Count).ToList();
|
||||||
|
for (int i = 0; i < nbPlayer; i++)
|
||||||
|
{
|
||||||
|
PlayerZone zone = new PlayerZone()
|
||||||
|
{
|
||||||
|
Objectives = GetRandomObjectives(nbPlayer switch
|
||||||
|
{
|
||||||
|
2 => 4,
|
||||||
|
3 => 3,
|
||||||
|
4 => 2,
|
||||||
|
_ => throw new MatchConfigException("Mauvais nombre de joueurs lors des objectifs")
|
||||||
|
}, freeObjectiveIndexs)
|
||||||
|
};
|
||||||
|
zone.AddRessources(Enums.ResourceType.Piece, 3);
|
||||||
|
_playersZones.Add(i, zone);
|
||||||
|
}
|
||||||
|
|
||||||
|
_maxWorkerPerPlayer = nbPlayer switch
|
||||||
|
{
|
||||||
|
2 => 5,
|
||||||
|
3 => 4,
|
||||||
|
4 => 3,
|
||||||
|
_ => throw new MatchConfigException("Mauvais nombre de joueurs lors Workers")
|
||||||
|
};
|
||||||
|
|
||||||
|
_maxBuidingPerPlayer = nbPlayer switch
|
||||||
|
{
|
||||||
|
2 => 7,
|
||||||
|
3 => 6,
|
||||||
|
4 => 6,
|
||||||
|
_ => throw new MatchConfigException("Mauvais nombre de joueurs lors building")
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<Objective> GetRandomObjectives(int number, List<int> freeIndex)
|
||||||
|
{
|
||||||
|
List<Objective> result = new List<Objective>();
|
||||||
|
for (int i = 0; i < number; i++)
|
||||||
|
{
|
||||||
|
#pragma warning disable CA5394
|
||||||
|
int randomIndex = freeIndex[_random.Next(freeIndex.Count)];
|
||||||
|
#pragma warning restore CA5394
|
||||||
|
freeIndex.RemoveAt(randomIndex);
|
||||||
|
result.Add(_objectives.ElementAt(randomIndex));
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
16
src/LittleTown.Core/PlayerZone/Objective.cs
Normal file
16
src/LittleTown.Core/PlayerZone/Objective.cs
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
namespace LittleTown.Core;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Représente une carte objectif dans le jeu, les objectif sont des conditions qui une fois remplie accordent des points au joueur
|
||||||
|
/// </summary>
|
||||||
|
public class Objective
|
||||||
|
{
|
||||||
|
/// <summary> la condition de l'objectif sous forme de formule </summary>
|
||||||
|
public string Formula { get; init; } = string.Empty;
|
||||||
|
|
||||||
|
/// <summary> le nombre de points que procure cet objectif </summary>
|
||||||
|
public int Points { get; init; }
|
||||||
|
|
||||||
|
/// <summary> indique si l'objectif a deja été atteint ou non, un objectif ne peut etre atteint qu'une fois </summary>
|
||||||
|
public bool Filled { get; init; }
|
||||||
|
}
|
||||||
31
src/LittleTown.Core/PlayerZone/PlayerZone.cs
Normal file
31
src/LittleTown.Core/PlayerZone/PlayerZone.cs
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
using LittleTown.Core.Enums;
|
||||||
|
|
||||||
|
namespace LittleTown.Core;
|
||||||
|
/// <summary> Représente les données propre à un joueur </summary>
|
||||||
|
public class PlayerZone
|
||||||
|
{
|
||||||
|
/// <summary> Les ressources que possede le joueur </summary>
|
||||||
|
public IDictionary<ResourceType, int> Ressources { get; init; } = new Dictionary<ResourceType, int>();
|
||||||
|
|
||||||
|
/// <summary> La liste des objectifs que le joueur possede/// </summary>
|
||||||
|
public IReadOnlyCollection<Objective> Objectives { get; init; } = new List<Objective>();
|
||||||
|
|
||||||
|
/// <summary> Le marqueur de score pendant le match </summary>
|
||||||
|
public int ScoreMarker { get; init; }
|
||||||
|
|
||||||
|
/// <summary> Permet d'ajouter d'une type de ressources au stock du joueur </summary>
|
||||||
|
/// <param name="res">le type de ressources</param>
|
||||||
|
/// <param name="qte">la quantité non nulle non négative</param>
|
||||||
|
public void AddRessources(ResourceType res, int qte)
|
||||||
|
{
|
||||||
|
ArgumentOutOfRangeException.ThrowIfLessThan(1, qte);
|
||||||
|
if (Ressources.ContainsKey(res))
|
||||||
|
{
|
||||||
|
Ressources[res] += qte;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Ressources.Add(res, qte);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,4 +13,9 @@ public interface IStaticDataGetter
|
|||||||
/// <summary> Recupérer la liste des batiments et leurs données statiques </summary>
|
/// <summary> Recupérer la liste des batiments et leurs données statiques </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public ICollection<Building> GetBuildings();
|
public ICollection<Building> GetBuildings();
|
||||||
|
|
||||||
|
/// <summary> Récupérer la liste des objectifs du jeu </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public ICollection<Objective> GetObjectives();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
using LittleTown.Core.Enums;
|
|
||||||
|
|
||||||
namespace LittleTown.Core.ValueTypes;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// ValueType définissant la zone d'un joueur, elle contient ses ressoruces, ses ouviers disponibles
|
|
||||||
/// </summary>
|
|
||||||
public class PlayerZone
|
|
||||||
{
|
|
||||||
/// <summary> Les ressources dans la zone du joueur </summary>
|
|
||||||
public IReadOnlyDictionary<ResourceType, int> Ressources { get; init; } = new Dictionary<ResourceType, int>();
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user