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.
mastermind/Sources/MauiSpark/Pages/VictoirePage.xaml.cs

92 lines
3.0 KiB

using CoreLibrary.Evenements;
using CoreLibrary.Joueurs;
namespace MauiSpark.Pages;
partial class Message
{
public string Titre { get; init; } = "";
public string Texte { get; init; } = "";
public string Image { get; init; } = "";
}
/// <summary>
/// Page affichée lorsque la partie est terminée, montrant le résultat de la partie.
/// </summary>
public partial class VictoirePage : ContentPage
{
/// <summary>
/// Constructeur de la page de victoire.
/// Initialise les paramètres de navigation et les composants de la page.
/// </summary>
public VictoirePage()
{
NavigationPage.SetHasNavigationBar(this, false);
InitializeComponent();
}
/// <summary>
/// Méthode déclenchée lorsque la partie est terminée.
/// Affiche le résultat de la partie en fonction des gagnants et des perdants.
/// </summary>
/// <param name="sender">La classe qui appelle l'événement ; ici Partie.</param>
/// <param name="e">L'instance de l'événement PartiePartieTermineeEventArgs créée par Partie.</param>
public async void QuandPartieTerminee(object? sender, PartiePartieTermineeEventArgs e)
{
if (Application.Current == null || Application.Current.MainPage == null)
return;
if (((NavigationPage)Application.Current.MainPage).CurrentPage != this)
await Application.Current.MainPage.Navigation.PushAsync(this);
IEnumerable<Page> pages = Application.Current.MainPage.Navigation.NavigationStack.Reverse().Skip(1);
foreach (Page page in pages)
{
if (page is AccueilPage)
break;
Application.Current.MainPage.Navigation.RemovePage(page);
}
IReadOnlyList<string> gagnants = e.Gagnants;
IReadOnlyList<string> perdants = e.Perdants;
// Affichage du message en fonction du résultat de la partie
if (gagnants.Count == 1)
BindingContext = new Message()
{
Titre = "Victoire",
Texte = $"Le joueur {gagnants[0]} a gagné",
Image = "victoire.png"
};
else if (gagnants.Count > 1)
BindingContext = new Message()
{
Titre = "Egalité",
Texte = $"Les joueurs {string.Join(", ", gagnants)} ont gagné",
Image = "egalite.png"
};
else
BindingContext = new Message()
{
Titre = "Défaite",
Texte = "Personne n'a trouvé le code...",
Image = "defaite.png"
};
}
/// <summary>
/// Méthode déclenchée lorsque le bouton de retour au menu est pressé.
/// Retourne à la page précédente.
/// </summary>
/// <param name="sender">L'objet qui appelle l'événement ; ici le bouton de retour au menu.</param>
/// <param name="e">L'instance de l'événement EventArgs créée par le système.</param>
public async void QuandMenuPresse(object sender, EventArgs e)
{
await Navigation.PopAsync();
}
}