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>
<Border Margin="20" StrokeThickness="2" StrokeShape="RoundRectangle 10"> <ScrollView Orientation="Horizontal">
<Grid ColumnDefinitions="*, *, *, *, *, *, *" ColumnSpacing="10" > <VerticalStackLayout>
<Button Margin="5" Grid.Column="0" Text="Place" Style="{StaticResource ButtonClassement}" VerticalOptions="Center" HorizontalOptions="Center" Clicked="QuandBoutonPresse"/> <Border Margin="20" StrokeThickness="2" StrokeShape="RoundRectangle 10">
<Button x:Name="Nom" Margin="5" Grid.Column="1" Text="Nom" Style="{StaticResource ButtonClassement}" VerticalOptions="Center" HorizontalOptions="Center" Clicked="QuandBoutonPresse"/> <StackLayout
<Button x:Name="CoupMoyen" Margin="5" Grid.Column="3" Text="Coup moyen" Style="{StaticResource ButtonClassement}" VerticalOptions="Center" HorizontalOptions="Center" Clicked="QuandBoutonPresse"/> Orientation="Horizontal"
<Button x:Name="Gagnee" Margin="5" Grid.Column="4" Text="Partie gagnée" Style="{StaticResource ButtonClassement}" VerticalOptions="Center" HorizontalOptions="Center" Clicked="QuandBoutonPresse"/> BindableLayout.ItemsSource="{Binding Titres}">
<Button x:Name="Perdue" Margin="5" Grid.Column="5" Text="Partie perdue" Style="{StaticResource ButtonClassement}" VerticalOptions="Center" HorizontalOptions="Center" Clicked="QuandBoutonPresse"/>
<Button x:Name="Egalite" Margin="5" Grid.Column="6" Text="Partie égalité" Style="{StaticResource ButtonClassement}" VerticalOptions="Center" HorizontalOptions="Center" Clicked="QuandBoutonPresse"/>
</Grid>
</Border>
<StackLayout BindableLayout.ItemsSource="{Binding Enfants}"> <BindableLayout.ItemTemplate>
<BindableLayout.ItemTemplate> <DataTemplate>
<DataTemplate> <Label Text="{Binding .}" FontSize="Medium" Margin="0, 20" WidthRequest="250" HorizontalTextAlignment="Center">
<Border Margin="20, 0" StrokeThickness="2" StrokeShape="RoundRectangle 10" Padding="0,20"> <Label.GestureRecognizers>
<Grid ColumnDefinitions="*, *, *, *, *, *, *"> <TapGestureRecognizer Tapped="StatistiquePressee"/>
<Label Grid.Column="0" Text="{Binding Place}" VerticalOptions="Center" HorizontalOptions="Center" Style="{StaticResource TexteFrame}" /> </Label.GestureRecognizers>
<Label Grid.Column="1" Text="{Binding Joueur}" VerticalOptions="Center" HorizontalOptions="Center" Style="{StaticResource TexteFrame}" /> </Label>
<Label Grid.Column="3" Text="{Binding NbCoupMoyen}" VerticalOptions="Center" HorizontalOptions="Center" Style="{StaticResource TexteFrame}" /> </DataTemplate>
<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}" /> </StackLayout>
<Label Grid.Column="6" Text="{Binding PartieEgalite}" VerticalOptions="Center" HorizontalOptions="Center" Style="{StaticResource TexteFrame}" /> </Border>
</Grid>
</Border> <StackLayout BindableLayout.ItemsSource="{Binding Enfants}">
</DataTemplate> <BindableLayout.ItemTemplate>
</BindableLayout.ItemTemplate> <DataTemplate>
</StackLayout> <Border Margin="20, 0" StrokeThickness="2" StrokeShape="RoundRectangle 10" Padding="0,20">
<StackLayout
Orientation="Horizontal"
BindableLayout.ItemsSource="{Binding Objets}">
<BindableLayout.ItemTemplate>
<DataTemplate>
<Label Text="{Binding .}" FontSize="Micro" WidthRequest="250" HorizontalTextAlignment="Center"/>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
</Border>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
</VerticalStackLayout>
</ScrollView>
</VerticalStackLayout> </VerticalStackLayout>
</ScrollView> </ScrollView>
</ContentPage> </ContentPage>

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

@ -4,22 +4,18 @@
x:Class="MauiSpark.Pages.ModePage" x:Class="MauiSpark.Pages.ModePage"
xmlns:vues="clr-namespace:MauiSpark.Vues" xmlns:vues="clr-namespace:MauiSpark.Vues"
Title="ModePage"> Title="ModePage">
<Grid
ColumnDefinitions="*"
RowDefinitions="*, *,*">
<vues:TitreVue Texte="mode de jeu"/> <ScrollView>
<StackLayout>
<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,33 +1,18 @@
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