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
{
int Indice { get; }
string Nom { get; }
string Description { get; }
int NbJoueurs { get; }
int NbTour { get; }
int TailleCode { get; }
bool Equals(object? obj);
int GetHashCode();
}
}

@ -5,20 +5,13 @@ namespace CoreLibrary.Regles
[DataContract]
public class ReglesClassiques : IRegles
{
public int Indice => 1;
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 NbTour => 12;
public int TailleCode => 4;
public override bool Equals(object? obj)
{
if (obj == null || obj is not ReglesClassiques) return false;
return true;
}
public override int GetHashCode()
{
return HashCode.Combine(Nom, NbJoueurs, NbTour, TailleCode);
}
public override bool Equals(object? obj) => obj == null ? false : obj is ReglesClassiques;
public override int GetHashCode() => Nom.GetHashCode();
}
}

@ -5,20 +5,13 @@ namespace CoreLibrary.Regles
[DataContract]
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 NbTour => 12;
public int TailleCode => 6;
public override bool Equals(object? obj)
{
if (obj == null || obj is not ReglesDifficiles) return false;
return true;
}
public override int GetHashCode()
{
return HashCode.Combine(Nom, NbJoueurs, NbTour, TailleCode);
}
public override bool Equals(object? obj) => obj == null ? false : obj is ReglesDifficiles;
public override int GetHashCode() => Nom.GetHashCode();
}
}

@ -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">
<Generator>MSBuild:Compile</Generator>
</MauiXaml>
<MauiXaml Update="Vues\ModeVue.xaml">
<Generator>MSBuild:Compile</Generator>
</MauiXaml>
<MauiXaml Update="Vues\PartieCommenceeVue.xaml">
<Generator>MSBuild:Compile</Generator>
</MauiXaml>

@ -14,39 +14,51 @@
<Image Grid.Row="1" Source="star.png" WidthRequest="100" HorizontalOptions="Start" VerticalOptions="Center" Margin="0"/>
</FlexLayout>
<Grid RowDefinitions="*" ColumnDefinitions="*,*">
<Button x:Name="ReglesClassiques" Text="Régles Classiques" Style="{StaticResource ButtonClassementRegle}" Clicked="QuandBoutonPresse"/>
<Button Grid.Column="1" x:Name="ReglesDifficiles" Text="Régles Difficiles" Style="{StaticResource ButtonClassementRegle}" Clicked="QuandBoutonPresse"/>
<Grid RowDefinitions="*" ColumnDefinitions="*, 2*, *" Padding="50">
<Button x:Name="DiminuerRegles" Text="&lt;" Clicked="ChangerReglesPresse" VerticalOptions="Center" HorizontalOptions="Center"/>
<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>
<Border Margin="20" StrokeThickness="2" StrokeShape="RoundRectangle 10">
<Grid ColumnDefinitions="*, *, *, *, *, *, *" ColumnSpacing="10" >
<Button Margin="5" Grid.Column="0" Text="Place" Style="{StaticResource ButtonClassement}" VerticalOptions="Center" HorizontalOptions="Center" Clicked="QuandBoutonPresse"/>
<Button x:Name="Nom" Margin="5" Grid.Column="1" Text="Nom" Style="{StaticResource ButtonClassement}" VerticalOptions="Center" HorizontalOptions="Center" Clicked="QuandBoutonPresse"/>
<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"/>
<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>
<ScrollView Orientation="Horizontal">
<VerticalStackLayout>
<Border Margin="20" StrokeThickness="2" StrokeShape="RoundRectangle 10">
<StackLayout
Orientation="Horizontal"
BindableLayout.ItemsSource="{Binding Titres}">
<StackLayout BindableLayout.ItemsSource="{Binding Enfants}">
<BindableLayout.ItemTemplate>
<DataTemplate>
<Border Margin="20, 0" StrokeThickness="2" StrokeShape="RoundRectangle 10" Padding="0,20">
<Grid ColumnDefinitions="*, *, *, *, *, *, *">
<Label Grid.Column="0" Text="{Binding Place}" VerticalOptions="Center" HorizontalOptions="Center" Style="{StaticResource TexteFrame}" />
<Label Grid.Column="1" Text="{Binding Joueur}" VerticalOptions="Center" HorizontalOptions="Center" Style="{StaticResource TexteFrame}" />
<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}" />
<Label Grid.Column="5" Text="{Binding PartiePerdue}" VerticalOptions="Center" HorizontalOptions="Center" Style="{StaticResource TexteFrame}" />
<Label Grid.Column="6" Text="{Binding PartieEgalite}" VerticalOptions="Center" HorizontalOptions="Center" Style="{StaticResource TexteFrame}" />
</Grid>
</Border>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
<BindableLayout.ItemTemplate>
<DataTemplate>
<Label Text="{Binding .}" FontSize="Medium" Margin="0, 20" WidthRequest="250" HorizontalTextAlignment="Center">
<Label.GestureRecognizers>
<TapGestureRecognizer Tapped="StatistiquePressee"/>
</Label.GestureRecognizers>
</Label>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
</Border>
<StackLayout BindableLayout.ItemsSource="{Binding Enfants}">
<BindableLayout.ItemTemplate>
<DataTemplate>
<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>
</ScrollView>
</ContentPage>

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

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

@ -1,4 +1,3 @@
using CoreLibrary;
using CoreLibrary.Regles;
namespace MauiSpark.Pages;
@ -9,24 +8,11 @@ public partial class ModePage : ContentPage
{
NavigationPage.SetHasNavigationBar(this, false);
InitializeComponent();
}
private void QuandReglesPresse(Object sender, EventArgs e)
{
Partie partie;
BindingContext = typeof(IRegles).Assembly.GetTypes()
.Where(type => typeof(IRegles).IsAssignableFrom(type) && type.IsClass)
.Select(type => (Activator.CreateInstance(type) as IRegles)!)
.OrderBy(regles => regles.Indice);
if (sender.Equals(ReglesClassiques))
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();
InitializeComponent();
}
}

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

@ -1,33 +1,18 @@
namespace MauiSpark.Pages;
using CoreLibrary.Regles;
internal class Regles
{
public string Titre { get; init; } = "";
public string Description { get; init; } = "";
}
namespace MauiSpark.Pages;
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()
{
NavigationPage.SetHasNavigationBar(this, false);
BindingContext = (Regles[])[
reglesClassiques,reglesDifficiles
];
InitializeComponent();
BindingContext = typeof(IRegles).Assembly.GetTypes()
.Where(type => typeof(IRegles).IsAssignableFrom(type) && type.IsClass)
.Select(type => (Activator.CreateInstance(type) as IRegles)!)
.OrderBy(regles => regles.Indice);
InitializeComponent();
}
}

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