Fin du classement et application maui 100%
continuous-integration/drone/push Build is failing Details

master
Céleste BARBOSA 11 months ago
parent 4fc193ce37
commit 15e83989a7

@ -2,9 +2,13 @@
{ {
public interface IRegles public interface IRegles
{ {
int Indice { get; }
string Nom { get; } string Nom { get; }
string Description { get; }
int NbJoueurs { get; } int NbJoueurs { get; }
int NbTour { get; } int NbTour { get; }
int TailleCode { get; } int TailleCode { get; }
bool Equals(object? obj);
int GetHashCode();
} }
} }

@ -5,20 +5,13 @@ namespace CoreLibrary.Regles
[DataContract] [DataContract]
public class ReglesClassiques : IRegles public class ReglesClassiques : IRegles
{ {
public int Indice => 1;
public string Nom => "Règles classiques"; public string Nom => "Règles classiques";
public string Description => "Le but du jeu est de découvrir la combinaison. On génère aléatoirement deux combinaisons de 4 couleurs (six couleurs au total : jaune, bleu, rouge, vert, blanc et noir), une combinaison pour chaque joueur. Deux joueurs se battent pour trouver la combinaison en premier, il y a douze tours. Le premier joueur à trouver la combinaison à gagner, chaque joueur a le même nombre de coups à réaliser. Donc si le joueur un à trouvé la solution au bout de huit coups, le joueur deux doit finir son huitième coup. Si le joueur deux trouve la combinaison, les deux joueurs sont à égalité. Sinon, le joueur un gagne. Pour trouver la combinaison, les joueurs disposent de quatre indicateurs. Ces indicateurs sont quatre ronds qui représentent les quatre couleurs sélectionnées par le joueur. Un rond noir signifie quune couleur est à la bonne place, un rond blanc correspond à une mauvaise place et s'il ny a pas dindicateur aucune des couleurs nest présentent dans la combinaison.";
public int NbJoueurs => 2; public int NbJoueurs => 2;
public int NbTour => 12; public int NbTour => 12;
public int TailleCode => 4; public int TailleCode => 4;
public override bool Equals(object? obj) => obj == null ? false : obj is ReglesClassiques;
public override bool Equals(object? obj) public override int GetHashCode() => Nom.GetHashCode();
{
if (obj == null || obj is not ReglesClassiques) return false;
return true;
}
public override int GetHashCode()
{
return HashCode.Combine(Nom, NbJoueurs, NbTour, TailleCode);
}
} }
} }

@ -5,20 +5,13 @@ namespace CoreLibrary.Regles
[DataContract] [DataContract]
public class ReglesDifficiles : IRegles public class ReglesDifficiles : IRegles
{ {
public string Nom => "Règles difficile"; public int Indice => 2;
public string Nom => "Règles difficiles";
public string Description => "Le but du jeu est de découvrir la combinaison. On génère aléatoirement deux combinaisons de 6 couleurs (six couleurs au total : jaune, bleu, rouge, vert, blanc et noir), une combinaison pour chaque joueur. Deux joueurs se battent pour trouver la combinaison en premier, il y a douze tours. Le premier joueur à trouver la combinaison à gagner, chaque joueur a le même nombre de coups à réaliser. Donc si le joueur un à trouvé la solution au bout de huit coups, le joueur deux doit finir son huitième coup. Si le joueur deux trouve la combinaison, les deux joueurs sont à égalité. Sinon, le joueur un gagne. Pour trouver la combinaison, les joueurs disposent de quatre indicateurs. Ces indicateurs sont quatre ronds qui représentent les 6 couleurs sélectionnées par le joueur. Un rond noir signifie quune couleur est à la bonne place, un rond blanc correspond à une mauvaise place et s'il ny a pas dindicateur aucune des couleurs nest présentent dans la combinaison.";
public int NbJoueurs => 2; public int NbJoueurs => 2;
public int NbTour => 12; public int NbTour => 12;
public int TailleCode => 6; public int TailleCode => 6;
public override bool Equals(object? obj) => obj == null ? false : obj is ReglesDifficiles;
public override bool Equals(object? obj) public override int GetHashCode() => Nom.GetHashCode();
{
if (obj == null || obj is not ReglesDifficiles) return false;
return true;
}
public override int GetHashCode()
{
return HashCode.Combine(Nom, NbJoueurs, NbTour, TailleCode);
}
} }
} }

@ -0,0 +1,125 @@
[
{
"Nom": "Céleste",
"statistiques": [
{
"Key": {
"Item1": {
"__type": "ReglesClassiques:#CoreLibrary.Regles"
},
"Item2": 0
},
"Value": 2
},
{
"Key": {
"Item1": {
"__type": "ReglesClassiques:#CoreLibrary.Regles"
},
"Item2": 1
},
"Value": 1
},
{
"Key": {
"Item1": {
"__type": "ReglesClassiques:#CoreLibrary.Regles"
},
"Item2": 2
},
"Value": 0
},
{
"Key": {
"Item1": {
"__type": "ReglesClassiques:#CoreLibrary.Regles"
},
"Item2": 3
},
"Value": 5
}
]
},
{
"Nom": "Pauline",
"statistiques": [
{
"Key": {
"Item1": {
"__type": "ReglesClassiques:#CoreLibrary.Regles"
},
"Item2": 0
},
"Value": 1
},
{
"Key": {
"Item1": {
"__type": "ReglesClassiques:#CoreLibrary.Regles"
},
"Item2": 1
},
"Value": 5
},
{
"Key": {
"Item1": {
"__type": "ReglesClassiques:#CoreLibrary.Regles"
},
"Item2": 2
},
"Value": 2
},
{
"Key": {
"Item1": {
"__type": "ReglesClassiques:#CoreLibrary.Regles"
},
"Item2": 3
},
"Value": 10
}
]
},
{
"Nom": "Camille",
"statistiques": [
{
"Key": {
"Item1": {
"__type": "ReglesClassiques:#CoreLibrary.Regles"
},
"Item2": 0
},
"Value": 3
},
{
"Key": {
"Item1": {
"__type": "ReglesClassiques:#CoreLibrary.Regles"
},
"Item2": 1
},
"Value": 5
},
{
"Key": {
"Item1": {
"__type": "ReglesClassiques:#CoreLibrary.Regles"
},
"Item2": 2
},
"Value": 6
},
{
"Key": {
"Item1": {
"__type": "ReglesClassiques:#CoreLibrary.Regles"
},
"Item2": 3
},
"Value": 50
}
]
}
]

File diff suppressed because it is too large Load Diff

@ -130,6 +130,9 @@
<MauiXaml Update="Vues\JetonVue.xaml"> <MauiXaml Update="Vues\JetonVue.xaml">
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
</MauiXaml> </MauiXaml>
<MauiXaml Update="Vues\ModeVue.xaml">
<Generator>MSBuild:Compile</Generator>
</MauiXaml>
<MauiXaml Update="Vues\PartieCommenceeVue.xaml"> <MauiXaml Update="Vues\PartieCommenceeVue.xaml">
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
</MauiXaml> </MauiXaml>

@ -14,39 +14,51 @@
<Image Grid.Row="1" Source="star.png" WidthRequest="100" HorizontalOptions="Start" VerticalOptions="Center" Margin="0"/> <Image Grid.Row="1" Source="star.png" WidthRequest="100" HorizontalOptions="Start" VerticalOptions="Center" Margin="0"/>
</FlexLayout> </FlexLayout>
<Grid RowDefinitions="*" ColumnDefinitions="*,*"> <Grid RowDefinitions="*" ColumnDefinitions="*, 2*, *" Padding="50">
<Button x:Name="ReglesClassiques" Text="Régles Classiques" Style="{StaticResource ButtonClassementRegle}" Clicked="QuandBoutonPresse"/> <Button x:Name="DiminuerRegles" Text="&lt;" Clicked="ChangerReglesPresse" VerticalOptions="Center" HorizontalOptions="Center"/>
<Button Grid.Column="1" x:Name="ReglesDifficiles" Text="Régles Difficiles" Style="{StaticResource ButtonClassementRegle}" Clicked="QuandBoutonPresse"/> <Label Grid.Column="1" x:Name="ReglesDifficiles" Text="{Binding Regles.Nom}" FontSize="Large" VerticalOptions="Center" HorizontalOptions="Center"/>
<Button x:Name="AugmenterRegles" Grid.Column="2" Text="&gt;" Clicked="ChangerReglesPresse" VerticalOptions="Center" HorizontalOptions="Center"/>
</Grid> </Grid>
<ScrollView Orientation="Horizontal">
<VerticalStackLayout>
<Border Margin="20" StrokeThickness="2" StrokeShape="RoundRectangle 10"> <Border Margin="20" StrokeThickness="2" StrokeShape="RoundRectangle 10">
<Grid ColumnDefinitions="*, *, *, *, *, *, *" ColumnSpacing="10" > <StackLayout
<Button Margin="5" Grid.Column="0" Text="Place" Style="{StaticResource ButtonClassement}" VerticalOptions="Center" HorizontalOptions="Center" Clicked="QuandBoutonPresse"/> Orientation="Horizontal"
<Button x:Name="Nom" Margin="5" Grid.Column="1" Text="Nom" Style="{StaticResource ButtonClassement}" VerticalOptions="Center" HorizontalOptions="Center" Clicked="QuandBoutonPresse"/> BindableLayout.ItemsSource="{Binding Titres}">
<Button x:Name="CoupMoyen" Margin="5" Grid.Column="3" Text="Coup moyen" Style="{StaticResource ButtonClassement}" VerticalOptions="Center" HorizontalOptions="Center" Clicked="QuandBoutonPresse"/>
<Button x:Name="Gagnee" Margin="5" Grid.Column="4" Text="Partie gagnée" Style="{StaticResource ButtonClassement}" VerticalOptions="Center" HorizontalOptions="Center" Clicked="QuandBoutonPresse"/> <BindableLayout.ItemTemplate>
<Button x:Name="Perdue" Margin="5" Grid.Column="5" Text="Partie perdue" Style="{StaticResource ButtonClassement}" VerticalOptions="Center" HorizontalOptions="Center" Clicked="QuandBoutonPresse"/> <DataTemplate>
<Button x:Name="Egalite" Margin="5" Grid.Column="6" Text="Partie égalité" Style="{StaticResource ButtonClassement}" VerticalOptions="Center" HorizontalOptions="Center" Clicked="QuandBoutonPresse"/> <Label Text="{Binding .}" FontSize="Medium" Margin="0, 20" WidthRequest="250" HorizontalTextAlignment="Center">
</Grid> <Label.GestureRecognizers>
<TapGestureRecognizer Tapped="StatistiquePressee"/>
</Label.GestureRecognizers>
</Label>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
</Border> </Border>
<StackLayout BindableLayout.ItemsSource="{Binding Enfants}"> <StackLayout BindableLayout.ItemsSource="{Binding Enfants}">
<BindableLayout.ItemTemplate> <BindableLayout.ItemTemplate>
<DataTemplate> <DataTemplate>
<Border Margin="20, 0" StrokeThickness="2" StrokeShape="RoundRectangle 10" Padding="0,20"> <Border Margin="20, 0" StrokeThickness="2" StrokeShape="RoundRectangle 10" Padding="0,20">
<Grid ColumnDefinitions="*, *, *, *, *, *, *"> <StackLayout
<Label Grid.Column="0" Text="{Binding Place}" VerticalOptions="Center" HorizontalOptions="Center" Style="{StaticResource TexteFrame}" /> Orientation="Horizontal"
<Label Grid.Column="1" Text="{Binding Joueur}" VerticalOptions="Center" HorizontalOptions="Center" Style="{StaticResource TexteFrame}" /> BindableLayout.ItemsSource="{Binding Objets}">
<Label Grid.Column="3" Text="{Binding NbCoupMoyen}" VerticalOptions="Center" HorizontalOptions="Center" Style="{StaticResource TexteFrame}" />
<Label Grid.Column="4" Text="{Binding PartieGagnee}" VerticalOptions="Center" HorizontalOptions="Center" Style="{StaticResource TexteFrame}" /> <BindableLayout.ItemTemplate>
<Label Grid.Column="5" Text="{Binding PartiePerdue}" VerticalOptions="Center" HorizontalOptions="Center" Style="{StaticResource TexteFrame}" /> <DataTemplate>
<Label Grid.Column="6" Text="{Binding PartieEgalite}" VerticalOptions="Center" HorizontalOptions="Center" Style="{StaticResource TexteFrame}" /> <Label Text="{Binding .}" FontSize="Micro" WidthRequest="250" HorizontalTextAlignment="Center"/>
</Grid> </DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
</Border> </Border>
</DataTemplate> </DataTemplate>
</BindableLayout.ItemTemplate> </BindableLayout.ItemTemplate>
</StackLayout> </StackLayout>
</VerticalStackLayout> </VerticalStackLayout>
</ScrollView> </ScrollView>
</VerticalStackLayout>
</ScrollView>
</ContentPage> </ContentPage>

@ -10,14 +10,13 @@ namespace MauiSpark.Pages
{ {
private readonly Classement classement; private readonly Classement classement;
private int PartieJouee => PartieGagnee + PartieEgalite + PartiePerdue;
public Joueur Joueur { get; set; } public Joueur Joueur { get; set; }
public int Place => classement.Enfants.ToList().IndexOf(this) + 1; public int Place => classement.Enfants.ToList().IndexOf(this) + 1;
public int NbCoupMoyen => PartieJouee > 0 ? Joueur.Statistique(classement.Regles, Statistique.CoupJoue) / PartieJouee : Joueur.Statistique(classement.Regles, Statistique.CoupJoue); public IEnumerable<int> Statistiques => Enum.GetValues<Statistique>()
public int PartieGagnee => Joueur.Statistique(classement.Regles, Statistique.PartieGagnee); .Select(statistique => Joueur.Statistique(classement.Regles, statistique));
public int PartiePerdue => Joueur.Statistique(classement.Regles, Statistique.PartiePerdue);
public int PartieEgalite => Joueur.Statistique(classement.Regles, Statistique.PartieEgalite); public IEnumerable<string> Objets => new List<string>([$"{Place}", Joueur.Nom])
.Concat(Statistiques.Select(statistique => $"{statistique}"));
public Enfant(Joueur joueur, Classement classement) public Enfant(Joueur joueur, Classement classement)
{ {
@ -30,7 +29,7 @@ namespace MauiSpark.Pages
if (obj == null || obj is not Enfant) if (obj == null || obj is not Enfant)
return false; return false;
return ((Enfant)obj).Joueur.Equals(Joueur); return Joueur == ((Enfant)obj).Joueur;
} }
public override int GetHashCode() => Joueur.GetHashCode(); public override int GetHashCode() => Joueur.GetHashCode();
@ -38,41 +37,29 @@ namespace MauiSpark.Pages
partial class Classement : INotifyPropertyChanged partial class Classement : INotifyPropertyChanged
{ {
public event PropertyChangedEventHandler? PropertyChanged; public event PropertyChangedEventHandler? PropertyChanged;
public void QuandProprieteChangee([CallerMemberName] string? nomPropriete = null) public void QuandProprieteChangee([CallerMemberName] string? propriete = null) =>
{ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propriete));
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nomPropriete));
} private int indiceRegles = 0;
public IRegles Regles => ClassementPage.ToutesRegles.ElementAt(indiceRegles);
private static Dictionary<string, IComparer<Enfant>> Tris => new Dictionary<string, IComparer<Enfant>> { private Statistique statistique = Enum.GetValues<Statistique>().First();
{ "Nom", Comparer<Enfant>.Create((enfant1, enfant2) => string.Compare(enfant1.Joueur.Nom, enfant2.Joueur.Nom)) }, public Statistique Statistique
{ "CoupMoyen", Comparer<Enfant>.Create((enfant1, enfant2) => enfant2.NbCoupMoyen - enfant1.NbCoupMoyen) },
{ "Gagnee", Comparer<Enfant>.Create((enfant1, enfant2) => enfant2.PartieGagnee - enfant1.PartieGagnee) },
{ "Perdue", Comparer<Enfant>.Create((enfant1, enfant2) => enfant2.PartiePerdue - enfant1.PartiePerdue) },
{ "Egalite", Comparer<Enfant>.Create((enfant1, enfant2) => enfant2.PartieEgalite - enfant1.PartieEgalite) },
};
private string typeTri = "CoupMoyen";
public string TypeTri {
get
{ {
return typeTri; get => statistique;
}
set set
{ {
typeTri = value; statistique = value;
QuandProprieteChangee(nameof(Enfants)); QuandProprieteChangee(nameof(Enfants));
} }
} }
private bool inverser = false; private bool inverser = true;
public bool Inverser public bool Inverser {
{ get => inverser;
get
{
return inverser;
}
set set
{ {
inverser = value; inverser = value;
@ -80,28 +67,41 @@ namespace MauiSpark.Pages
} }
} }
private IRegles regles = new ReglesClassiques(); public IEnumerable<string> Titres => new List<string>(["Place", "Nom"]).Concat(
public IRegles Regles Enum.GetValues<Statistique>().Select(
{ statistique => string.Concat((Enum.GetName(typeof(Statistique), statistique) ?? "").Select(
get (lettre, indice) => indice > 0 && char.IsUpper(lettre) ? $" {lettre}" : $"{lettre}")
{ )
return regles; )
} );
set
public IEnumerable<Enfant> Enfants => Inverser ?
MauiProgram.Manageur.Joueurs
.OrderBy(joueur => joueur.Statistique(Regles, Statistique))
.Select(joueur => new Enfant(joueur, this)).Reverse() :
MauiProgram.Manageur.Joueurs
.OrderBy(joueur => joueur.Statistique(Regles, Statistique))
.Select(joueur => new Enfant(joueur, this));
public void IncrementerRegles(int valeur)
{ {
regles = value; if ((indiceRegles += valeur) < 0)
indiceRegles = ClassementPage.ToutesRegles.Count() - 1;
else if (indiceRegles >= ClassementPage.ToutesRegles.Count())
indiceRegles = 0;
QuandProprieteChangee(nameof(Regles));
QuandProprieteChangee(nameof(Enfants)); QuandProprieteChangee(nameof(Enfants));
} }
} }
public IComparer<Enfant> Tri => Tris.GetValueOrDefault(TypeTri) ?? Tris["CoupMoyen"];
public IEnumerable<Enfant> Enfants => Inverser ?
MauiProgram.Manageur.Joueurs.Select(joueur => new Enfant(joueur, this)).Order(Tri).Reverse() :
MauiProgram.Manageur.Joueurs.Select(joueur => new Enfant(joueur, this)).Order(Tri);
}
public partial class ClassementPage : ContentPage public partial class ClassementPage : ContentPage
{ {
public static IEnumerable<IRegles> ToutesRegles => typeof(IRegles).Assembly.GetTypes()
.Where(type => typeof(IRegles).IsAssignableFrom(type) && type.IsClass)
.Select(type => (Activator.CreateInstance(type) as IRegles)!)
.OrderBy(regles => regles.Indice);
public ClassementPage() public ClassementPage()
{ {
InitializeComponent(); InitializeComponent();
@ -111,29 +111,27 @@ namespace MauiSpark.Pages
BindingContext = new Classement(); BindingContext = new Classement();
} }
private void QuandBoutonPresse(object sender, EventArgs e) public void ChangerReglesPresse(object sender, EventArgs e)
{ {
Classement classement = (Classement)BindingContext; ((Classement)BindingContext).IncrementerRegles(sender == DiminuerRegles ? -1 : 1);
if (sender == ReglesClassiques)
{
classement.Regles = new ReglesClassiques();
return;
} }
if (sender == ReglesDifficiles) public void StatistiquePressee(object sender, EventArgs e)
{ {
classement.Regles = new ReglesDifficiles(); if (sender is not Label || !Enum.IsDefined(typeof(Statistique), ((Label)sender).Text.Replace(" ", "")))
return; return;
}
if (classement.TypeTri == nameof(sender)) { Statistique statistique = Enum.Parse<Statistique>(((Label)sender).Text.Replace(" ", ""));
Classement classement = (Classement)BindingContext;
if (classement.Statistique == statistique)
{
classement.Inverser = !classement.Inverser; classement.Inverser = !classement.Inverser;
return; return;
} }
classement.Inverser = false; classement.Inverser = true;
classement.TypeTri = nameof(sender); classement.Statistique = statistique;
} }
} }
} }

@ -5,21 +5,17 @@
xmlns:vues="clr-namespace:MauiSpark.Vues" xmlns:vues="clr-namespace:MauiSpark.Vues"
Title="ModePage"> Title="ModePage">
<Grid <ScrollView>
ColumnDefinitions="*" <StackLayout>
RowDefinitions="*, *,*">
<vues:TitreVue Texte="mode de jeu"/> <vues:TitreVue Texte="mode de jeu"/>
<Button <StackLayout BindableLayout.ItemsSource="{Binding .}">
x:Name="ReglesClassiques" <BindableLayout.ItemTemplate>
Grid.Row="1" <DataTemplate>
Text="Règles classiques" <vues:ModeVue Regles="{Binding .}"/>
Clicked="QuandReglesPresse"/> </DataTemplate>
<Button </BindableLayout.ItemTemplate>
x:Name="ReglesDifficiles" </StackLayout>
Grid.Row="2" </StackLayout>
Text="Règles difficiles" </ScrollView>
Clicked="QuandReglesPresse"/>
</Grid>
</ContentPage> </ContentPage>

@ -1,4 +1,3 @@
using CoreLibrary;
using CoreLibrary.Regles; using CoreLibrary.Regles;
namespace MauiSpark.Pages; namespace MauiSpark.Pages;
@ -9,24 +8,11 @@ public partial class ModePage : ContentPage
{ {
NavigationPage.SetHasNavigationBar(this, false); NavigationPage.SetHasNavigationBar(this, false);
InitializeComponent(); BindingContext = typeof(IRegles).Assembly.GetTypes()
} .Where(type => typeof(IRegles).IsAssignableFrom(type) && type.IsClass)
.Select(type => (Activator.CreateInstance(type) as IRegles)!)
private void QuandReglesPresse(Object sender, EventArgs e) .OrderBy(regles => regles.Indice);
{
Partie partie;
if (sender.Equals(ReglesClassiques)) InitializeComponent();
partie = MauiProgram.Manageur.NouvellePartie(new ReglesClassiques());
else if (sender.Equals(ReglesDifficiles))
partie = MauiProgram.Manageur.NouvellePartie(new ReglesDifficiles());
else
return;
partie.PartieDemanderJoueur += new ConnexionPage().QuandDemanderNom;
partie.PartiePartieTerminee += new VictoirePage().QuandPartieTerminee;
partie.PartieNouveauTour += new PlateauPage().QuandNouveauTour;
partie.Jouer();
} }
} }

@ -18,7 +18,7 @@
<StackLayout BindableLayout.ItemsSource="{Binding .}"> <StackLayout BindableLayout.ItemsSource="{Binding .}">
<BindableLayout.ItemTemplate> <BindableLayout.ItemTemplate>
<DataTemplate> <DataTemplate>
<vues:ReglesVue Titre="{Binding Titre}" Description="{Binding Description}" Margin="20"/> <vues:ReglesVue Titre="{Binding Nom}" Description="{Binding Description}" Margin="20"/>
</DataTemplate> </DataTemplate>
</BindableLayout.ItemTemplate> </BindableLayout.ItemTemplate>
</StackLayout> </StackLayout>

@ -1,32 +1,17 @@
namespace MauiSpark.Pages; using CoreLibrary.Regles;
internal class Regles namespace MauiSpark.Pages;
{
public string Titre { get; init; } = "";
public string Description { get; init; } = "";
}
public partial class ReglesPage : ContentPage public partial class ReglesPage : ContentPage
{ {
private static readonly Regles reglesClassiques = new Regles()
{
Titre = "Règles classiques",
Description = "Le but du jeu est de découvrir la combinaison. On génère aléatoirement deux combinaisons de 4 couleurs (six couleurs au total : jaune, bleu, rouge, vert, blanc et noir), une combinaison pour chaque joueur. Deux joueurs se battent pour trouver la combinaison en premier, il y a douze tours. Le premier joueur à trouver la combinaison à gagner, chaque joueur a le même nombre de coups à réaliser. Donc si le joueur un à trouvé la solution au bout de huit coups, le joueur deux doit finir son huitième coup. Si le joueur deux trouve la combinaison, les deux joueurs sont à égalité. Sinon, le joueur un gagne. Pour trouver la combinaison, les joueurs disposent de quatre indicateurs. Ces indicateurs sont quatre ronds qui représentent les quatre couleurs sélectionnées par le joueur. Un rond noir signifie quune couleur est à la bonne place, un rond blanc correspond à une mauvaise place et s'il ny a pas dindicateur aucune des couleurs nest présentent dans la combinaison."
};
private static readonly Regles reglesDifficiles = new Regles()
{
Titre = "Règles difficiles",
Description = "Le but du jeu est de découvrir la combinaison. On génère aléatoirement deux combinaisons de 6 couleurs (six couleurs au total : jaune, bleu, rouge, vert, blanc et noir), une combinaison pour chaque joueur. Deux joueurs se battent pour trouver la combinaison en premier, il y a douze tours. Le premier joueur à trouver la combinaison à gagner, chaque joueur a le même nombre de coups à réaliser. Donc si le joueur un à trouvé la solution au bout de huit coups, le joueur deux doit finir son huitième coup. Si le joueur deux trouve la combinaison, les deux joueurs sont à égalité. Sinon, le joueur un gagne. Pour trouver la combinaison, les joueurs disposent de quatre indicateurs. Ces indicateurs sont quatre ronds qui représentent les 6 couleurs sélectionnées par le joueur. Un rond noir signifie quune couleur est à la bonne place, un rond blanc correspond à une mauvaise place et s'il ny a pas dindicateur aucune des couleurs nest présentent dans la combinaison."
};
public ReglesPage() public ReglesPage()
{ {
NavigationPage.SetHasNavigationBar(this, false); NavigationPage.SetHasNavigationBar(this, false);
BindingContext = (Regles[])[ BindingContext = typeof(IRegles).Assembly.GetTypes()
reglesClassiques,reglesDifficiles .Where(type => typeof(IRegles).IsAssignableFrom(type) && type.IsClass)
]; .Select(type => (Activator.CreateInstance(type) as IRegles)!)
.OrderBy(regles => regles.Indice);
InitializeComponent(); InitializeComponent();
} }

@ -20,18 +20,12 @@
<Setter Property="WidthRequest" Value="300"/> <Setter Property="WidthRequest" Value="300"/>
</Style> </Style>
<Style x:Key="ButtonClassement" TargetType="Button"> <Style x:Key="ButtonClassement" TargetType="Button">
<Setter Property="BorderColor" Value="{AppThemeBinding Light={StaticResource FondSecondaireClair}, Dark={StaticResource FondSecondaireSombre}}"/> <Setter Property="BorderColor" Value="{AppThemeBinding Light={StaticResource FondSecondaireClair}, Dark={StaticResource FondSecondaireSombre}}"/>
<Setter Property="WidthRequest" Value="150"/> <Setter Property="WidthRequest" Value="150"/>
<Setter Property="FontSize" Value="20"/> <Setter Property="FontSize" Value="20"/>
</Style> </Style>
<Style x:Key="ButtonClassementRegle" TargetType="Button">
<Setter Property="FontSize" Value="24"/>
<Setter Property="Padding" Value="10, 5"/>
</Style>
<Style TargetType="Frame"> <Style TargetType="Frame">
<Setter Property="BorderColor" Value="Black"/> <Setter Property="BorderColor" Value="Black"/>
</Style> </Style>

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8" ?>
<ContentView xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MauiSpark.Vues.ModeVue"
x:Name="modeVue">
<Button
Text="{Binding Regles.Nom, Source={x:Reference modeVue}}"
Clicked="QuandReglesPresse"
Margin="0, 50"/>
</ContentView>

@ -0,0 +1,32 @@
using CoreLibrary;
using CoreLibrary.Regles;
using MauiSpark.Pages;
namespace MauiSpark.Vues;
public partial class ModeVue : ContentView
{
public static readonly BindableProperty ReglesProperty = BindableProperty.Create(nameof(Regles), typeof(IRegles), typeof(ModeVue), null);
public IRegles Regles
{
get => (IRegles)GetValue(ReglesProperty);
set => SetValue(ReglesProperty, value);
}
public ModeVue()
{
InitializeComponent();
}
private void QuandReglesPresse(Object sender, EventArgs e)
{
Partie partie = MauiProgram.Manageur.NouvellePartie(Regles);
partie.PartieDemanderJoueur += new ConnexionPage().QuandDemanderNom;
partie.PartiePartieTerminee += new VictoirePage().QuandPartieTerminee;
partie.PartieNouveauTour += new PlateauPage().QuandNouveauTour;
partie.Jouer();
}
}
Loading…
Cancel
Save