You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
3.6 KiB
101 lines
3.6 KiB
using CoreLibrary.Exceptions;
|
|
using CoreLibrary.Persistance;
|
|
using CoreLibrary.Evenements;
|
|
using CoreLibrary.Regles;
|
|
using CoreLibrary.Statistiques;
|
|
using System.Runtime.Serialization;
|
|
|
|
namespace CoreLibrary.Joueurs
|
|
{
|
|
/// <summary>
|
|
/// Classe représentant un joueur.
|
|
/// </summary>
|
|
[DataContract]
|
|
[KnownType(typeof(ReglesClassiques))]
|
|
public class Joueur : IEstPersistant
|
|
{
|
|
/// <summary>
|
|
/// Événement déclenché lorsque le joueur se connecte.
|
|
/// </summary>
|
|
public event EventHandler<JoueurSeConnecterEventArgs>? JoueurSeConnecter;
|
|
|
|
private void QuandJoueurSeConnecter() => JoueurSeConnecter?.Invoke(this, new JoueurSeConnecterEventArgs(Nom));
|
|
|
|
/// <summary>
|
|
/// Dictionnaire des statistiques du joueur avec les règles et les statistiques.
|
|
/// </summary>
|
|
[DataMember]
|
|
private Dictionary<(IRegles, Statistique), int> statistiques = new Dictionary<(IRegles, Statistique), int>();
|
|
|
|
/// <summary>
|
|
/// Obtient le nom du joueur.
|
|
/// </summary>
|
|
[DataMember]
|
|
public string Nom { get; private set; } = "";
|
|
|
|
/// <summary>
|
|
/// Indique si le joueur est connecté.
|
|
/// </summary>
|
|
public bool EstConnecte { get; private set; } = false;
|
|
|
|
/// <summary>
|
|
/// Constructeur de joueur.
|
|
/// </summary>
|
|
public Joueur()
|
|
{
|
|
}
|
|
|
|
/// <summary>
|
|
/// Constructeur de joueur avec le nom spécifié.
|
|
/// </summary>
|
|
/// <param name="nom">Le nom du joueur.</param>
|
|
public Joueur(string nom)
|
|
{
|
|
Nom = nom;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Connecte le joueur actuel avec les informations d'un autre joueur.
|
|
/// </summary>
|
|
/// <param name="joueur">Le joueur à partir duquel copier les informations.</param>
|
|
/// <returns>Renvoie le joueur actuel connecté.</returns>
|
|
/// <exception cref="JoueurDejaConnecteException">Lancée si le joueur est déjà connecté.</exception>
|
|
public Joueur SeConnecter(Joueur joueur)
|
|
{
|
|
if (EstConnecte)
|
|
throw new JoueurDejaConnecteException(this);
|
|
|
|
Nom = joueur.Nom;
|
|
statistiques = joueur.statistiques;
|
|
EstConnecte = true;
|
|
|
|
QuandJoueurSeConnecter();
|
|
|
|
return this;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Retourne une représentation sous forme de chaîne de caractères.
|
|
/// </summary>
|
|
/// <returns>Renvoie une chaîne de caractères du nom du joueur.</returns>
|
|
public override string ToString() => Nom;
|
|
|
|
/// <summary>
|
|
/// Obtient la valeur de la statistique spécifiée pour les règles données.
|
|
/// </summary>
|
|
/// <param name="regles">Les règles du jeu.</param>
|
|
/// <param name="statistique">Le type de statistique.</param>
|
|
/// <returns>Renvoie la valeur de la statistique.</returns>
|
|
public int Statistique(IRegles regles, Statistique statistique) =>
|
|
statistiques.GetValueOrDefault((regles, statistique), 0);
|
|
|
|
/// <summary>
|
|
/// Incrémente la valeur de la statistique spécifiée pour les règles données.
|
|
/// </summary>
|
|
/// <param name="regles">Les règles du jeu.</param>
|
|
/// <param name="statistique">Le type de statistique.</param>
|
|
public void IncrementerStatistique(IRegles regles, Statistique statistique) =>
|
|
statistiques[(regles, statistique)] = Statistique(regles, statistique) + 1;
|
|
}
|
|
}
|