Merge branch 'master' of https://codefirst.iut.uca.fr/git/nicolas.barbosa/mastermind
continuous-integration/drone/push Build is passing Details

master
Céleste BARBOSA 12 months ago
commit 21a492162b

@ -1,11 +1,31 @@
# mastermind [![Drone](https://codefirst.iut.uca.fr/api/badges/nicolas.barbosa/mastermind/status.svg)](https://codefirst.iut.uca.fr/nicolas.barbosa/mastermind)
SAE2.01 - Développement d'une application [![Sonar](https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=celestebarbosa-mastermind&metric=alert_status&token=849a6b4d77bc19046c81e8fc8f6be8ec0b8c5f3a)](https://codefirst.iut.uca.fr/sonar/dashboard?id=celestebarbosa-mastermind)
R2.02 - Développement d'applications avec IHM
R2.03 - Qualité de développement
Mastermind en C#, MAUI, et .net [![Bugs](https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=celestebarbosa-mastermind&metric=bugs&token=849a6b4d77bc19046c81e8fc8f6be8ec0b8c5f3a)](https://codefirst.iut.uca.fr/sonar/dashboard?id=celestebarbosa-mastermind)
[![Fiabilité](https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=celestebarbosa-mastermind&metric=reliability_rating&token=849a6b4d77bc19046c81e8fc8f6be8ec0b8c5f3a)](https://codefirst.iut.uca.fr/sonar/dashboard?id=celestebarbosa-mastermind)
BARBOSA Céleste [![Vulnérabilités](https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=celestebarbosa-mastermind&metric=vulnerabilities&token=849a6b4d77bc19046c81e8fc8f6be8ec0b8c5f3a)](https://codefirst.iut.uca.fr/sonar/dashboard?id=celestebarbosa-mastermind)
PRADY Pauline [![Securité](https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=celestebarbosa-mastermind&metric=security_rating&token=849a6b4d77bc19046c81e8fc8f6be8ec0b8c5f3a)](https://codefirst.iut.uca.fr/sonar/dashboard?id=celestebarbosa-mastermind)
TURPIN-ETIENNE Camille
[![Risques](https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=celestebarbosa-mastermind&metric=security_hotspots&token=849a6b4d77bc19046c81e8fc8f6be8ec0b8c5f3a)](https://codefirst.iut.uca.fr/sonar/dashboard?id=celestebarbosa-mastermind)
[![Dette technique](https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=celestebarbosa-mastermind&metric=sqale_index&token=849a6b4d77bc19046c81e8fc8f6be8ec0b8c5f3a)](https://codefirst.iut.uca.fr/sonar/dashboard?id=celestebarbosa-mastermind)
[![Code Smells](https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=celestebarbosa-mastermind&metric=code_smells&token=849a6b4d77bc19046c81e8fc8f6be8ec0b8c5f3a)](https://codefirst.iut.uca.fr/sonar/dashboard?id=celestebarbosa-mastermind)
[![Maintenabilité](https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=celestebarbosa-mastermind&metric=sqale_rating&token=849a6b4d77bc19046c81e8fc8f6be8ec0b8c5f3a)](https://codefirst.iut.uca.fr/sonar/dashboard?id=celestebarbosa-mastermind)
[![Tests](https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=celestebarbosa-mastermind&metric=coverage&token=849a6b4d77bc19046c81e8fc8f6be8ec0b8c5f3a)](https://codefirst.iut.uca.fr/sonar/dashboard?id=celestebarbosa-mastermind)
[![Lignes dupliquées (%)](https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=celestebarbosa-mastermind&metric=duplicated_lines_density&token=849a6b4d77bc19046c81e8fc8f6be8ec0b8c5f3a)](https://codefirst.iut.uca.fr/sonar/dashboard?id=celestebarbosa-mastermind)
[![Nombre de lignes](https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=celestebarbosa-mastermind&metric=ncloc&token=849a6b4d77bc19046c81e8fc8f6be8ec0b8c5f3a)](https://codefirst.iut.uca.fr/sonar/dashboard?id=celestebarbosa-mastermind)
---
# Mastermind - Projet IHM
**Céleste BARBOSA**\
**Pauline PRADY**\
**Camille TURPIN-ETIENNE**\
---
## Réalisation d'un jeu vidéo en .NET, C# & MAUI

@ -3,8 +3,14 @@ using CoreLibrary;
namespace ConsoleApp namespace ConsoleApp
{ {
/// <summary>
/// Fournit des gestionnaires d'événements les événements liés au déroulement de la partie.
/// </summary>
public class Evenements public class Evenements
{ {
/// <summary>
/// Gestionnaire d'événement pour l'ajout d'un joueur.
/// </summary>
public static string? DemanderJoueur(Object? sender, DemanderJoueurEventArgs e) public static string? DemanderJoueur(Object? sender, DemanderJoueurEventArgs e)
{ {
Console.WriteLine($"Joueur {e.Numero}"); Console.WriteLine($"Joueur {e.Numero}");
@ -18,6 +24,9 @@ namespace ConsoleApp
} }
/// <summary>
/// Gestionnaire d'événement pour le début de la partie.
/// </summary>
public static void CommencerLaPartie(Object? sender, DebutPartieEventArgs e) public static void CommencerLaPartie(Object? sender, DebutPartieEventArgs e)
{ {
Utils.DessinerSeparateur(); Utils.DessinerSeparateur();
@ -25,7 +34,9 @@ namespace ConsoleApp
Console.WriteLine("La partie commence, bonne chance à tous !\n"); Console.WriteLine("La partie commence, bonne chance à tous !\n");
} }
/// <summary>
/// Gestionnaire d'événement pour le début d'un nouveau tour.
/// </summary>
public static void NouveauTour(Object? sender, NouveauTourEventArgs e) public static void NouveauTour(Object? sender, NouveauTourEventArgs e)
{ {
Utils.DessinerSeparateur(); Utils.DessinerSeparateur();
@ -38,6 +49,9 @@ namespace ConsoleApp
} }
/// <summary>
/// Gestionnaire d'événement pour la demande d'ajout d'un jeton.
/// </summary>
public static Jeton? DemanderJeton(Object? sender, DemanderJetonEventArgs e) public static Jeton? DemanderJeton(Object? sender, DemanderJetonEventArgs e)
{ {
Console.TreatControlCAsInput = true; Console.TreatControlCAsInput = true;
@ -83,16 +97,25 @@ namespace ConsoleApp
return new Jeton(couleurs[indice]); return new Jeton(couleurs[indice]);
} }
/// <summary>
/// Gestionnaire d'événement pour l'ajout d'un jeton.
/// </summary>
public static void AjouterJeton(Object? sender, AjouterJetonEventArgs e) public static void AjouterJeton(Object? sender, AjouterJetonEventArgs e)
{ {
Utils.DessinerPion(e.Jeton.Couleur); Utils.DessinerPion(e.Jeton.Couleur);
} }
/// <summary>
/// Gestionnaire d'événement pour la suppression du dernier jeton ajouté.
/// </summary>
public static void SupprimerDernierJeton(Object? sender, SupprimerDernierJetonEventArgs e) public static void SupprimerDernierJeton(Object? sender, SupprimerDernierJetonEventArgs e)
{ {
Console.Write("\b\b\b \b\b\b\b\b\b"); Console.Write("\b\b\b \b\b\b\b\b\b");
} }
/// <summary>
/// Gestionnaire d'événement pour l'ajout d'un code.
/// </summary>
public static void AjouterCode(Object? sender, AjouterCodeEventArgs e) public static void AjouterCode(Object? sender, AjouterCodeEventArgs e)
{ {
Console.WriteLine(); Console.WriteLine();
@ -100,6 +123,9 @@ namespace ConsoleApp
Utils.DessinerSeparateur(); Utils.DessinerSeparateur();
} }
/// <summary>
/// Gestionnaire d'événement pour la fin de la partie.
/// </summary>
public static void PartieTerminee(Object? sender, PartieTermineeEventArgs e) public static void PartieTerminee(Object? sender, PartieTermineeEventArgs e)
{ {
Joueur[] gagnants = e.Gagnants.ToArray(); Joueur[] gagnants = e.Gagnants.ToArray();

@ -1,9 +1,20 @@
 
namespace CoreLibrary.Events namespace CoreLibrary.Events
{ {
/// <summary>
/// Représente les arguments d'événement pour l'événement de l'ajout d'un code.
/// </summary>
public class AjouterCodeEventArgs : EventArgs public class AjouterCodeEventArgs : EventArgs
{ {
/// <summary>
/// Obtient le code ajouté.
/// </summary>
public Code Code { get; private set; } public Code Code { get; private set; }
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="AjouterCodeEventArgs"/> avec le code spécifié.
/// </summary>
/// <param name="code">Le code à ajouter.</param>
public AjouterCodeEventArgs(Code code) public AjouterCodeEventArgs(Code code)
{ {
Code = code; Code = code;

@ -2,9 +2,20 @@
namespace CoreLibrary.Events namespace CoreLibrary.Events
{ {
/// <summary>
/// Représente les arguments d'événement pour l'événement d'ajout d'un jeton.
/// </summary>
public class AjouterJetonEventArgs : EventArgs public class AjouterJetonEventArgs : EventArgs
{ {
/// <summary>
/// Obtient le jeton ajouté.
/// </summary>
public Jeton Jeton { get; private set; } public Jeton Jeton { get; private set; }
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="AjouterJetonEventArgs"/> avec le jeton spécifié.
/// </summary>
/// <param name="jeton">Le jeton à ajouter.</param>
public AjouterJetonEventArgs(Jeton jeton) public AjouterJetonEventArgs(Jeton jeton)
{ {
Jeton = jeton; Jeton = jeton;

@ -1,9 +1,19 @@
namespace CoreLibrary.Events namespace CoreLibrary.Events
{ {
/// <summary>
/// Représente les arguments d'événement pour l'événement d'ajout d'un joueur.
/// </summary>
public class AjouterJoueursEventArgs : EventArgs public class AjouterJoueursEventArgs : EventArgs
{ {
/// <summary>
/// Obtient le joueur ajouté.
/// </summary>
public Joueur Joueur { get; private set; } public Joueur Joueur { get; private set; }
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="AjouterJoueursEventArgs"/> avec le joueur spécifié.
/// </summary>
/// <param name="joueur">Le joueur à ajouter.</param>
public AjouterJoueursEventArgs(Joueur joueur) public AjouterJoueursEventArgs(Joueur joueur)
{ {
Joueur = joueur; Joueur = joueur;

@ -1,5 +1,8 @@
namespace CoreLibrary.Events namespace CoreLibrary.Events
{ {
/// <summary>
/// Représente les arguments d'événement pour le début d'une partie.
/// </summary>
public class DebutPartieEventArgs : EventArgs public class DebutPartieEventArgs : EventArgs
{ {
} }

@ -1,6 +1,9 @@
 
namespace CoreLibrary.Events namespace CoreLibrary.Events
{ {
/// <summary>
/// Représente les arguments d'événement pour la demande d'ajout d'un jeton.
/// </summary>
public class DemanderJetonEventArgs : EventArgs public class DemanderJetonEventArgs : EventArgs
{ {
} }

@ -1,9 +1,20 @@
namespace CoreLibrary.Events namespace CoreLibrary.Events
{ {
/// <summary>
/// Représente les arguments d'événement pour la demande d'ajout d'un joueur.
/// </summary>
public class DemanderJoueurEventArgs : EventArgs public class DemanderJoueurEventArgs : EventArgs
{ {
/// <summary>
/// Obtient le numéro du joueur à ajouter.
/// </summary>
public int Numero { get; private set; } public int Numero { get; private set; }
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="DemanderJoueurEventArgs"/> avec le numéro du joueur spécifié.
/// </summary>
/// <param name="numero">Le numéro du joueur à ajouter.</param>
public DemanderJoueurEventArgs(int numero) public DemanderJoueurEventArgs(int numero)
{ {
Numero = numero; Numero = numero;

@ -2,13 +2,38 @@
namespace CoreLibrary.Events namespace CoreLibrary.Events
{ {
/// <summary>
/// Représente les arguments d'événement pour le début d'un nouveau tour.
/// </summary>
public class NouveauTourEventArgs : EventArgs public class NouveauTourEventArgs : EventArgs
{ {
/// <summary>
/// Obtient le joueur dont c'est le tour.
/// </summary>
public Joueur Joueur { get; private set; } public Joueur Joueur { get; private set; }
/// <summary>
/// Obtient le numéro du tour.
/// </summary>
public int Tour { get; private set; } public int Tour { get; private set; }
/// <summary>
/// Obtient la grille du joueur actuelle.
/// </summary>
public IEnumerable<IEnumerable<Jeton?>> Grille { get; private set; } public IEnumerable<IEnumerable<Jeton?>> Grille { get; private set; }
/// <summary>
/// Obtient les indicateurs de la grille de jeu.
/// </summary>
public IEnumerable<IEnumerable<Indicateur>> Indicateurs { get; private set; } public IEnumerable<IEnumerable<Indicateur>> Indicateurs { get; private set; }
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="NouveauTourEventArgs"/> avec les informations spécifiées.
/// </summary>
/// <param name="joueur">Le joueur dont c'est le tour.</param>
/// <param name="tour">Le numéro du tour.</param>
/// <param name="grille">La grille du joueur actuelle.</param>
/// <param name="indicateurs">Les indicateurs de la grille de jeu.</param>
public NouveauTourEventArgs(Joueur joueur, int tour, IEnumerable<IEnumerable<Jeton?>> grille, IEnumerable<IEnumerable<Indicateur>> indicateurs) public NouveauTourEventArgs(Joueur joueur, int tour, IEnumerable<IEnumerable<Jeton?>> grille, IEnumerable<IEnumerable<Indicateur>> indicateurs)
{ {
Joueur = joueur; Joueur = joueur;

@ -6,11 +6,26 @@ using System.Threading.Tasks;
namespace CoreLibrary.Events namespace CoreLibrary.Events
{ {
/// <summary>
/// Représente les arguments d'événement pour la fin d'une partie.
/// </summary>
public class PartieTermineeEventArgs : EventArgs public class PartieTermineeEventArgs : EventArgs
{ {
/// <summary>
/// Obtient les joueurs gagnants de la partie.
/// </summary>
public IEnumerable<Joueur> Gagnants { get; private set; } public IEnumerable<Joueur> Gagnants { get; private set; }
/// <summary>
/// Obtient les joueurs perdants de la partie.
/// </summary>
public IEnumerable<Joueur> Perdants { get; private set; } public IEnumerable<Joueur> Perdants { get; private set; }
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="PartieTermineeEventArgs"/> avec les gagnants et les perdants spécifiés.
/// </summary>
/// <param name="gagnants">Les joueurs gagnants de la partie.</param>
/// <param name="perdants">Les joueurs perdants de la partie.</param>
public PartieTermineeEventArgs(IEnumerable<Joueur> gagnants, IEnumerable<Joueur> perdants) public PartieTermineeEventArgs(IEnumerable<Joueur> gagnants, IEnumerable<Joueur> perdants)
{ {
Gagnants = gagnants; Gagnants = gagnants;

@ -1,5 +1,8 @@
namespace CoreLibrary.Events namespace CoreLibrary.Events
{ {
/// <summary>
/// Représente les arguments d'événement pour le passage de la main au joueur suivant.
/// </summary>
public class PasserMainEventArgs : EventArgs public class PasserMainEventArgs : EventArgs
{ {
} }

@ -1,5 +1,8 @@
namespace CoreLibrary.Events namespace CoreLibrary.Events
{ {
/// <summary>
/// Représente les arguments d'événement pour la suppression du dernier jeton ajouté.
/// </summary>
public class SupprimerDernierJetonEventArgs : EventArgs public class SupprimerDernierJetonEventArgs : EventArgs
{ {
} }

@ -2,26 +2,54 @@
namespace CoreLibrary namespace CoreLibrary
{ {
/// <summary>
/// Implémente les règles du jeu.
/// </summary>
public class ReglesClassiques : IRegles public class ReglesClassiques : IRegles
{ {
private int nbJoueurs = 0; private int nbJoueurs = 0;
private int? joueurCourant; private int? joueurCourant;
private readonly Joueur[] joueurs; private readonly Joueur[] joueurs;
/// <summary>
/// Obtient le nom des règles.
/// </summary>
public string Nom { get => "Règles classiques"; } public string Nom { get => "Règles classiques"; }
/// <summary>
/// Obtient le nombre maximum de tours.
/// </summary>
public int TourMaximum { get => 12; } public int TourMaximum { get => 12; }
/// <summary>
/// Obtient la taille maximale d'un code.
/// </summary>
public int TailleCodeMaximum { get => 4; } public int TailleCodeMaximum { get => 4; }
/// <summary>
/// Obtient le nombre de joueurs actuels dans le jeu.
/// </summary>
public int NbJoueurs { get => nbJoueurs; } public int NbJoueurs { get => nbJoueurs; }
/// <summary>
/// Obtient le nombre maximum de joueurs possible pour le jeu.
/// </summary>
public int NbJoueursMaximum { get => 2; } public int NbJoueursMaximum { get => 2; }
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="ReglesClassiques"/> en initialisant un tableau de joueurs avec la taille maximale de joueurs autorisée.
/// </summary>
public ReglesClassiques() public ReglesClassiques()
{ {
joueurs = new Joueur[NbJoueursMaximum]; joueurs = new Joueur[NbJoueursMaximum];
} }
/// <summary>
/// Ajoute un joueur avec le nom spécifié.
/// </summary>
/// <param name="nom">Le nom du joueur à ajouter.</param>
/// <returns>Le joueur ajouté.</returns>
public Joueur AjouterJoueur(string nom) public Joueur AjouterJoueur(string nom)
{ {
Joueur joueur = new Joueur(nom, new Plateau(TailleCodeMaximum, TourMaximum)); Joueur joueur = new Joueur(nom, new Plateau(TailleCodeMaximum, TourMaximum));
@ -29,6 +57,12 @@ namespace CoreLibrary
return joueur; return joueur;
} }
/// <summary>
/// Obtient le joueur dont c'est actuellement le tour.
/// </summary>
/// <returns>Le joueur actuel.</returns>
/// <exception cref="PartieNonCommenceeException">Levée lorsqu'il n'y a pas de joueur courant.</exception>
public Joueur JoueurCourant() public Joueur JoueurCourant()
{ {
if (!joueurCourant.HasValue) if (!joueurCourant.HasValue)
@ -37,6 +71,10 @@ namespace CoreLibrary
return joueurs[joueurCourant.Value]; return joueurs[joueurCourant.Value];
} }
/// <summary>
/// Passe la main au joueur suivant.
/// </summary>
/// <exception cref="PartieNonCommenceeException">Levée lorsqu'il n'y a pas de joueur courant.</exception>
public void PasserLaMain() public void PasserLaMain()
{ {
if (!joueurCourant.HasValue) if (!joueurCourant.HasValue)
@ -52,19 +90,29 @@ namespace CoreLibrary
} }
/// <summary>
/// Génère un nouveau code.
/// </summary>
/// <returns>Le code généré</returns>
public Code GenererCode() public Code GenererCode()
{ {
return new Code(TailleCodeMaximum); return new Code(TailleCodeMaximum);
} }
/// <summary>
/// Initialise le premier joueur à jouer.
/// </summary>
public void CommencerLaPartie() public void CommencerLaPartie()
{ {
joueurCourant = 0; joueurCourant = 0;
} }
/// <summary>
/// Vérifie si la partie est terminée.
/// </summary>
/// <returns>True si la partie est terminée, sinon False.</returns>
public bool EstTerminee() public bool EstTerminee()
{ {
if (!joueurCourant.HasValue || joueurCourant != 0) if (!joueurCourant.HasValue || joueurCourant != 0)
@ -82,7 +130,10 @@ namespace CoreLibrary
return false; return false;
} }
/// <summary>
/// Obtient les joueurs gagnants de la partie.
/// </summary>
/// <returns>La liste des joueurs gagnants.</returns>
public IEnumerable<Joueur> Gagnants() public IEnumerable<Joueur> Gagnants()
{ {
Joueur[] gagnants = []; Joueur[] gagnants = [];
@ -97,6 +148,10 @@ namespace CoreLibrary
return gagnants; return gagnants;
} }
/// <summary>
/// Obtient les joueurs perdants de la partie.
/// </summary>
/// <returns>La liste des joueurs perdants.</returns>
public IEnumerable<Joueur> Perdants() public IEnumerable<Joueur> Perdants()
{ {
Joueur[] perdants = []; Joueur[] perdants = [];

Loading…
Cancel
Save