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
R2.02 - Développement d'applications avec IHM
R2.03 - Qualité de développement
[![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)
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
PRADY Pauline
TURPIN-ETIENNE Camille
[![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)
[![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)
[![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
{
/// <summary>
/// Fournit des gestionnaires d'événements les événements liés au déroulement de la partie.
/// </summary>
public class Evenements
{
/// <summary>
/// Gestionnaire d'événement pour l'ajout d'un joueur.
/// </summary>
public static string? DemanderJoueur(Object? sender, DemanderJoueurEventArgs e)
{
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)
{
Utils.DessinerSeparateur();
@ -25,7 +34,9 @@ namespace ConsoleApp
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)
{
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)
{
Console.TreatControlCAsInput = true;
@ -83,16 +97,25 @@ namespace ConsoleApp
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)
{
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)
{
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)
{
Console.WriteLine();
@ -100,6 +123,9 @@ namespace ConsoleApp
Utils.DessinerSeparateur();
}
/// <summary>
/// Gestionnaire d'événement pour la fin de la partie.
/// </summary>
public static void PartieTerminee(Object? sender, PartieTermineeEventArgs e)
{
Joueur[] gagnants = e.Gagnants.ToArray();

@ -1,9 +1,20 @@

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
{
/// <summary>
/// Obtient le code ajouté.
/// </summary>
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)
{
Code = code;

@ -2,9 +2,20 @@
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
{
/// <summary>
/// Obtient le jeton ajouté.
/// </summary>
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)
{
Jeton = jeton;

@ -1,9 +1,19 @@
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
{
/// <summary>
/// Obtient le joueur ajouté.
/// </summary>
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)
{
Joueur = joueur;

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

@ -1,6 +1,9 @@

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

@ -1,9 +1,20 @@
namespace CoreLibrary.Events
{
/// <summary>
/// Représente les arguments d'événement pour la demande d'ajout d'un joueur.
/// </summary>
public class DemanderJoueurEventArgs : EventArgs
{
/// <summary>
/// Obtient le numéro du joueur à ajouter.
/// </summary>
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)
{
Numero = numero;

@ -2,13 +2,38 @@
namespace CoreLibrary.Events
{
/// <summary>
/// Représente les arguments d'événement pour le début d'un nouveau tour.
/// </summary>
public class NouveauTourEventArgs : EventArgs
{
/// <summary>
/// Obtient le joueur dont c'est le tour.
/// </summary>
public Joueur Joueur { get; private set; }
/// <summary>
/// Obtient le numéro du tour.
/// </summary>
public int Tour { get; private set; }
/// <summary>
/// Obtient la grille du joueur actuelle.
/// </summary>
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; }
/// <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)
{
Joueur = joueur;

@ -6,11 +6,26 @@ using System.Threading.Tasks;
namespace CoreLibrary.Events
{
/// <summary>
/// Représente les arguments d'événement pour la fin d'une partie.
/// </summary>
public class PartieTermineeEventArgs : EventArgs
{
/// <summary>
/// Obtient les joueurs gagnants de la partie.
/// </summary>
public IEnumerable<Joueur> Gagnants { get; private set; }
/// <summary>
/// Obtient les joueurs perdants de la partie.
/// </summary>
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)
{
Gagnants = gagnants;

@ -1,5 +1,8 @@
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
{
}

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

@ -2,26 +2,54 @@
namespace CoreLibrary
{
/// <summary>
/// Implémente les règles du jeu.
/// </summary>
public class ReglesClassiques : IRegles
{
private int nbJoueurs = 0;
private int? joueurCourant;
private readonly Joueur[] joueurs;
/// <summary>
/// Obtient le nom des règles.
/// </summary>
public string Nom { get => "Règles classiques"; }
/// <summary>
/// Obtient le nombre maximum de tours.
/// </summary>
public int TourMaximum { get => 12; }
/// <summary>
/// Obtient la taille maximale d'un code.
/// </summary>
public int TailleCodeMaximum { get => 4; }
/// <summary>
/// Obtient le nombre de joueurs actuels dans le jeu.
/// </summary>
public int NbJoueurs { get => nbJoueurs; }
/// <summary>
/// Obtient le nombre maximum de joueurs possible pour le jeu.
/// </summary>
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()
{
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)
{
Joueur joueur = new Joueur(nom, new Plateau(TailleCodeMaximum, TourMaximum));
@ -29,6 +57,12 @@ namespace CoreLibrary
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()
{
if (!joueurCourant.HasValue)
@ -37,6 +71,10 @@ namespace CoreLibrary
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()
{
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()
{
return new Code(TailleCodeMaximum);
}
/// <summary>
/// Initialise le premier joueur à jouer.
/// </summary>
public void CommencerLaPartie()
{
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()
{
if (!joueurCourant.HasValue || joueurCourant != 0)
@ -82,7 +130,10 @@ namespace CoreLibrary
return false;
}
/// <summary>
/// Obtient les joueurs gagnants de la partie.
/// </summary>
/// <returns>La liste des joueurs gagnants.</returns>
public IEnumerable<Joueur> Gagnants()
{
Joueur[] gagnants = [];
@ -97,6 +148,10 @@ namespace CoreLibrary
return gagnants;
}
/// <summary>
/// Obtient les joueurs perdants de la partie.
/// </summary>
/// <returns>La liste des joueurs perdants.</returns>
public IEnumerable<Joueur> Perdants()
{
Joueur[] perdants = [];

Loading…
Cancel
Save