Reprise d'une partie commencée fonctionne
continuous-integration/drone/push Build is failing Details

master
Céleste BARBOSA 11 months ago
parent 10dae20440
commit 0ad1456f7a

@ -1,14 +1,12 @@
using CoreLibrary.Joueurs;
namespace CoreLibrary.Evenements
namespace CoreLibrary.Evenements
{
public class JoueurSeConnecterEventArgs : EventArgs
{
public Joueur JoueurConnecte { get; private init; }
public string Nom { get; private init; }
public JoueurSeConnecterEventArgs(Joueur joueurConnecte)
public JoueurSeConnecterEventArgs(string nom)
{
JoueurConnecte = joueurConnecte;
Nom = nom;
}
}
}

@ -6,11 +6,11 @@ namespace CoreLibrary.Evenements
public class PartieNouveauTourEventArgs : EventArgs
{
public int Tour { get; private init; }
public Joueur Joueur { get; private init; }
public string Joueur { get; private init; }
public Plateau Plateau { get; private init; }
public Code Code { get; private init; }
public PartieNouveauTourEventArgs(int tour, Joueur joueur, Plateau plateau, Code code)
public PartieNouveauTourEventArgs(int tour, string joueur, Plateau plateau, Code code)
{
Tour = tour;
Joueur = joueur;

@ -4,10 +4,10 @@ namespace CoreLibrary.Evenements
{
public class PartiePartieTermineeEventArgs : EventArgs
{
public IReadOnlyList<Joueur> Gagnants { get; private init; }
public IReadOnlyList<Joueur> Perdants { get; private init; }
public IReadOnlyList<string> Gagnants { get; private init; }
public IReadOnlyList<string> Perdants { get; private init; }
public PartiePartieTermineeEventArgs(IReadOnlyList<Joueur> gagnants, IReadOnlyList<Joueur> perdants)
public PartiePartieTermineeEventArgs(IReadOnlyList<string> gagnants, IReadOnlyList<string> perdants)
{
Gagnants = gagnants;
Perdants = perdants;

@ -1,12 +1,10 @@
using CoreLibrary.Joueurs;
namespace CoreLibrary.Evenements
namespace CoreLibrary.Evenements
{
public class PartiePasserLaMainEventArgs
{
public Joueur Joueur { get; private init; }
public string Joueur { get; private init; }
public PartiePasserLaMainEventArgs(Joueur joueur)
public PartiePasserLaMainEventArgs(string joueur)
{
Joueur = joueur;
}

@ -13,7 +13,7 @@ namespace CoreLibrary.Joueurs
{
public event EventHandler<JoueurSeConnecterEventArgs>? JoueurSeConnecter;
private void QuandJoueurSeConnecter() => JoueurSeConnecter?.Invoke(this, new JoueurSeConnecterEventArgs(this));
private void QuandJoueurSeConnecter() => JoueurSeConnecter?.Invoke(this, new JoueurSeConnecterEventArgs(Nom));
[DataMember]
private Dictionary<(IRegles, Statistique), int> statistiques = new Dictionary<(IRegles, Statistique), int>();

@ -2,6 +2,7 @@
using CoreLibrary.Joueurs;
using CoreLibrary.Regles;
using CoreLibrary.Statistiques;
using System.Text.RegularExpressions;
namespace CoreLibrary.Manageurs
{
@ -13,7 +14,7 @@ namespace CoreLibrary.Manageurs
public IReadOnlyList<Joueur> Joueurs => joueurs;
public IReadOnlyList<Partie> Parties => parties;
public IReadOnlyList<Partie> PartiesNonTerminees => parties.Where(partie => !partie.Termine).ToList();
public IReadOnlyList<Partie> PartiesNonTerminees => parties.Where(partie => !partie.Termine).Reverse().ToList();
public Manageur(IPersistance persistance)
{
@ -29,37 +30,59 @@ namespace CoreLibrary.Manageurs
persistance.Enregistrer(parties.ToArray());
}
public Partie ChargerPartie(Partie partie)
{
parties.Remove(partie);
Partie nouvellePartie = new Partie(partie);
parties.Add(nouvellePartie);
EcouterPartie(nouvellePartie);
return nouvellePartie;
}
public Partie NouvellePartie(IRegles regles)
{
Partie partie = new Partie(regles);
parties.Add(partie);
partie.PartiePasserLaMain += (sender, e) => e.Joueur.IncrementerStatistique(partie.Regles, Statistique.CoupJoue);
EcouterPartie(partie);
return partie;
}
private void EcouterPartie(Partie partie)
{
partie.PartieDemanderJoueur += (sender, e) => Sauvegarder();
partie.PartieDebutPartie += (sender, e) => Sauvegarder();
partie.PartieNouveauTour += (sender, e) => Sauvegarder();
partie.PartiePasserLaMain += (sender, e) =>
{
DemanderJoueur(e.Joueur).IncrementerStatistique(partie.Regles, Statistique.CoupJoue);
Sauvegarder();
};
partie.PartiePartieTerminee += (sender, e) =>
{
if (e.Gagnants.Count == 1)
{
e.Gagnants[0].IncrementerStatistique(regles, Statistique.PartieGagnee);
DemanderJoueur(e.Gagnants[0]).IncrementerStatistique(partie.Regles, Statistique.PartieGagnee);
}
else
{
foreach (Joueur gagnant in e.Gagnants)
gagnant.IncrementerStatistique(regles, Statistique.PartieEgalite);
foreach (string gagnant in e.Gagnants)
DemanderJoueur(gagnant).IncrementerStatistique(partie.Regles, Statistique.PartieEgalite);
}
foreach (Joueur perdant in e.Perdants)
foreach (string perdant in e.Perdants)
{
perdant.IncrementerStatistique(regles, Statistique.PartiePerdue);
DemanderJoueur(perdant).IncrementerStatistique(partie.Regles, Statistique.PartiePerdue);
}
Sauvegarder();
};
return partie;
}
public Joueur DemanderJoueur(string nom)

@ -19,18 +19,18 @@ namespace CoreLibrary
private void QuandPartieDemanderJoueur(Joueur joueurDemande) => PartieDemanderJoueur?.Invoke(this, new PartieDemanderJoueurEventArgs(joueurs.Count + 1, joueurDemande));
private void QuandPartieDebutPartie() => PartieDebutPartie?.Invoke(this, new PartieDebutPartieEventArgs());
private void QuandPartieNouveauTour() => PartieNouveauTour?.Invoke(this, new PartieNouveauTourEventArgs(plateaux.ElementAt(courant).Taille + 1, joueurs.ElementAt(courant), plateaux.ElementAt(courant), new Code(Regles.TailleCode)));
private void QuandPartieNouveauTour() => PartieNouveauTour?.Invoke(this, new PartieNouveauTourEventArgs(Tour, joueurs.ElementAt(courant), plateaux.ElementAt(courant), new Code(Regles.TailleCode)));
private void QuandPartiePasserLaMain() => PartiePasserLaMain?.Invoke(this, new PartiePasserLaMainEventArgs(joueurs.ElementAt(courant)));
private void QuandPartiePartieTerminee(IReadOnlyList<Joueur> gagnants, IReadOnlyList<Joueur> perdants) => PartiePartieTerminee?.Invoke(this, new PartiePartieTermineeEventArgs(gagnants, perdants));
private void QuandPartiePartieTerminee(IReadOnlyList<string> gagnants, IReadOnlyList<string> perdants) => PartiePartieTerminee?.Invoke(this, new PartiePartieTermineeEventArgs(gagnants, perdants));
[DataMember]
private readonly List<Joueur> joueurs = new List<Joueur>();
private readonly List<string> joueurs = new List<string>();
[DataMember]
private readonly List<Plateau> plateaux = new List<Plateau>();
[DataMember]
private int courant = 0;
public IReadOnlyList<Joueur> Joueurs => joueurs;
public IReadOnlyList<string> Joueurs => joueurs;
[DataMember]
public bool Termine { get; private set; } = false;
[DataMember]
@ -44,6 +44,21 @@ namespace CoreLibrary
Regles = regles;
}
public Partie(Partie partie)
{
joueurs = partie.joueurs;
plateaux = partie.plateaux;
courant = partie.courant;
Tour = partie.Tour;
Regles = partie.Regles;
partie.PartieDemanderJoueur = null;
partie.PartieDebutPartie = null;
partie.PartieNouveauTour = null;
partie.PartiePasserLaMain = null;
partie.PartiePartieTerminee = null;
}
public void Jouer()
{
if (joueurs.Count != Regles.NbJoueurs)
@ -62,7 +77,7 @@ namespace CoreLibrary
private void JoueurConnecte(object? sender, JoueurSeConnecterEventArgs e)
{
joueurs.Add(e.JoueurConnecte);
joueurs.Add(e.Nom);
plateaux.Add(new Plateau(Regles.TailleCode, Regles.NbTour));
if (joueurs.Count < Regles.NbJoueurs)
@ -77,7 +92,8 @@ namespace CoreLibrary
private void DebutPartie()
{
Tour = 1;
if (Tour == 0)
++Tour;
foreach (Plateau plateau in plateaux)
{
@ -120,8 +136,8 @@ namespace CoreLibrary
{
Termine = true;
List<Joueur> gagnants = new List<Joueur>();
List<Joueur> perdants = new List<Joueur>();
List<string> gagnants = new List<string>();
List<string> perdants = new List<string>();
for (int i = 0; i < joueurs.Count; ++i)
{
@ -133,14 +149,5 @@ namespace CoreLibrary
QuandPartiePartieTerminee(gagnants, perdants);
}
public void ReinitialiserEcouteEvenements()
{
PartieDemanderJoueur = null;
PartieDebutPartie = null;
PartieNouveauTour = null;
PartiePasserLaMain = null;
PartiePartieTerminee = null;
}
}
}

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

@ -0,0 +1,619 @@
[
{
"Regles": {
"__type": "ReglesClassiques:#CoreLibrary.Regles"
},
"Termine": false,
"Tour": 0,
"courant": 0,
"joueurs": [ ],
"plateaux": [ ]
},
{
"Regles": {
"__type": "ReglesClassiques:#CoreLibrary.Regles"
},
"Termine": false,
"Tour": 2,
"courant": 1,
"joueurs": [
"Céleste",
"Pauline"
],
"plateaux": [
{
"TailleMax": 12,
"TailleMaxCode": 4,
"Victoire": false,
"codeSecret": {
"Jetons": [
{
"Couleur": 0
},
{
"Couleur": 3
},
{
"Couleur": 3
},
{
"Couleur": 5
}
],
"TailleMax": 4
},
"codes": [
{
"Jetons": [
{
"Couleur": 3
},
{
"Couleur": 3
},
{
"Couleur": 3
},
{
"Couleur": 3
}
],
"TailleMax": 4
},
{
"Jetons": [
{
"Couleur": 1
},
{
"Couleur": 1
},
{
"Couleur": 1
},
{
"Couleur": 1
}
],
"TailleMax": 4
}
],
"indicateurs": [
[
0,
0
],
[ ]
]
},
{
"TailleMax": 12,
"TailleMaxCode": 4,
"Victoire": false,
"codeSecret": {
"Jetons": [
{
"Couleur": 0
},
{
"Couleur": 0
},
{
"Couleur": 2
},
{
"Couleur": 2
}
],
"TailleMax": 4
},
"codes": [
{
"Jetons": [
{
"Couleur": 2
},
{
"Couleur": 2
},
{
"Couleur": 2
},
{
"Couleur": 2
}
],
"TailleMax": 4
}
],
"indicateurs": [
[
0,
0
]
]
}
]
},
{
"Regles": {
"__type": "ReglesClassiques:#CoreLibrary.Regles"
},
"Termine": false,
"Tour": 8,
"courant": 1,
"joueurs": [
"Céleste",
"Pauline"
],
"plateaux": [
{
"TailleMax": 12,
"TailleMaxCode": 4,
"Victoire": false,
"codeSecret": {
"Jetons": [
{
"Couleur": 2
},
{
"Couleur": 0
},
{
"Couleur": 2
},
{
"Couleur": 4
}
],
"TailleMax": 4
},
"codes": [
{
"Jetons": [
{
"Couleur": 0
},
{
"Couleur": 0
},
{
"Couleur": 0
},
{
"Couleur": 0
}
],
"TailleMax": 4
},
{
"Jetons": [
{
"Couleur": 1
},
{
"Couleur": 1
},
{
"Couleur": 1
},
{
"Couleur": 1
}
],
"TailleMax": 4
},
{
"Jetons": [
{
"Couleur": 3
},
{
"Couleur": 3
},
{
"Couleur": 3
},
{
"Couleur": 3
}
],
"TailleMax": 4
},
{
"Jetons": [
{
"Couleur": 2
},
{
"Couleur": 2
},
{
"Couleur": 2
},
{
"Couleur": 2
}
],
"TailleMax": 4
},
{
"Jetons": [
{
"Couleur": 4
},
{
"Couleur": 4
},
{
"Couleur": 4
},
{
"Couleur": 4
}
],
"TailleMax": 4
},
{
"Jetons": [
{
"Couleur": 0
},
{
"Couleur": 0
},
{
"Couleur": 0
},
{
"Couleur": 0
}
],
"TailleMax": 4
},
{
"Jetons": [
{
"Couleur": 0
},
{
"Couleur": 0
},
{
"Couleur": 0
},
{
"Couleur": 0
}
],
"TailleMax": 4
},
{
"Jetons": [
{
"Couleur": 3
},
{
"Couleur": 3
},
{
"Couleur": 3
},
{
"Couleur": 3
}
],
"TailleMax": 4
}
],
"indicateurs": [
[
0
],
[ ],
[ ],
[
0,
0
],
[
0
],
[
0
],
[
0
],
[ ]
]
},
{
"TailleMax": 12,
"TailleMaxCode": 4,
"Victoire": false,
"codeSecret": {
"Jetons": [
{
"Couleur": 2
},
{
"Couleur": 2
},
{
"Couleur": 1
},
{
"Couleur": 2
}
],
"TailleMax": 4
},
"codes": [
{
"Jetons": [
{
"Couleur": 4
},
{
"Couleur": 4
},
{
"Couleur": 4
},
{
"Couleur": 4
}
],
"TailleMax": 4
},
{
"Jetons": [
{
"Couleur": 2
},
{
"Couleur": 2
},
{
"Couleur": 2
},
{
"Couleur": 2
}
],
"TailleMax": 4
},
{
"Jetons": [
{
"Couleur": 0
},
{
"Couleur": 0
},
{
"Couleur": 0
},
{
"Couleur": 0
}
],
"TailleMax": 4
},
{
"Jetons": [
{
"Couleur": 1
},
{
"Couleur": 1
},
{
"Couleur": 1
},
{
"Couleur": 1
}
],
"TailleMax": 4
},
{
"Jetons": [
{
"Couleur": 5
},
{
"Couleur": 5
},
{
"Couleur": 5
},
{
"Couleur": 5
}
],
"TailleMax": 4
},
{
"Jetons": [
{
"Couleur": 2
},
{
"Couleur": 2
},
{
"Couleur": 2
},
{
"Couleur": 2
}
],
"TailleMax": 4
},
{
"Jetons": [
{
"Couleur": 4
},
{
"Couleur": 4
},
{
"Couleur": 4
},
{
"Couleur": 4
}
],
"TailleMax": 4
}
],
"indicateurs": [
[ ],
[
0,
0,
0
],
[ ],
[
0
],
[ ],
[
0,
0,
0
],
[ ]
]
}
]
},
{
"Regles": {
"__type": "ReglesClassiques:#CoreLibrary.Regles"
},
"Termine": false,
"Tour": 1,
"courant": 0,
"joueurs": [
"Joueur 1",
"Joueur 2"
],
"plateaux": [
{
"TailleMax": 12,
"TailleMaxCode": 4,
"Victoire": false,
"codeSecret": {
"Jetons": [
{
"Couleur": 2
},
{
"Couleur": 4
},
{
"Couleur": 5
},
{
"Couleur": 2
}
],
"TailleMax": 4
},
"codes": [ ],
"indicateurs": [ ]
},
{
"TailleMax": 12,
"TailleMaxCode": 4,
"Victoire": false,
"codeSecret": {
"Jetons": [
{
"Couleur": 1
},
{
"Couleur": 4
},
{
"Couleur": 2
},
{
"Couleur": 4
}
],
"TailleMax": 4
},
"codes": [ ],
"indicateurs": [ ]
}
]
},
{
"Regles": {
"__type": "ReglesClassiques:#CoreLibrary.Regles"
},
"Termine": false,
"Tour": 1,
"courant": 0,
"joueurs": [
"Céleste",
"Pauline"
],
"plateaux": [
{
"TailleMax": 12,
"TailleMaxCode": 4,
"Victoire": false,
"codeSecret": {
"Jetons": [
{
"Couleur": 3
},
{
"Couleur": 3
},
{
"Couleur": 4
},
{
"Couleur": 3
}
],
"TailleMax": 4
},
"codes": [ ],
"indicateurs": [ ]
},
{
"TailleMax": 12,
"TailleMaxCode": 4,
"Victoire": false,
"codeSecret": {
"Jetons": [
{
"Couleur": 4
},
{
"Couleur": 0
},
{
"Couleur": 3
},
{
"Couleur": 4
}
],
"TailleMax": 4
},
"codes": [ ],
"indicateurs": [ ]
}
]
}
]

@ -8,7 +8,7 @@ namespace MauiSpark.Pages;
internal class Tour
{
public IEnumerable<(IEnumerable<Jeton>, IEnumerable<Indicateur>)> Plateau { get; private init; }
public Joueur Joueur { get; private init; }
public string Joueur { get; private init; }
public string Numero { get; private init; }
public Code Code { get; private init; }

@ -40,21 +40,21 @@ public partial class VictoirePage : ContentPage
Application.Current.MainPage.Navigation.RemovePage(page);
}
IReadOnlyList<Joueur> gagnants = e.Gagnants;
IReadOnlyList<Joueur> perdants = e.Perdants;
IReadOnlyList<string> gagnants = e.Gagnants;
IReadOnlyList<string> perdants = e.Perdants;
if (gagnants.Count == 1)
BindingContext = new Message()
{
Titre = "Victoire",
Texte = $"Le joueur {gagnants.First().Nom} a gagné",
Texte = $"Le joueur {gagnants[0]} a gagné",
Image = "trophy.jpg"
};
else if (gagnants.Count > 1)
BindingContext = new Message()
{
Titre = "Egalité",
Texte = $"Les joueurs {string.Join(' ', gagnants.Select(joueur => joueur.Nom))} ont gagné",
Texte = $"Les joueurs {string.Join(' ', gagnants)} ont gagné",
Image = "egalite.jpg"
};
else

@ -1,8 +1,6 @@
using CoreLibrary;
using CoreLibrary.Joueurs;
using MauiSpark.Pages;
using System.ComponentModel;
using System.Runtime.CompilerServices;
namespace MauiSpark.Vues;
@ -26,7 +24,7 @@ public partial class PartieCommenceeVue : ContentView, INotifyPropertyChanged
get => $"Tour : {(Partie != null ? Partie.Tour : 0)} / {(Partie != null ? Partie.Regles.NbTour : 0)}";
}
public Joueur[] Joueurs
public string[] Joueurs
{
get => Partie != null ? Partie.Joueurs.ToArray() : [];
}
@ -46,11 +44,13 @@ public partial class PartieCommenceeVue : ContentView, INotifyPropertyChanged
if (Partie == null)
return;
Partie.PartieDemanderJoueur += new ConnexionPage().QuandDemanderNom;
Partie.PartieNouveauTour += new PlateauPage().QuandNouveauTour;
Partie.PartiePartieTerminee += new VictoirePage().QuandPartieTerminee;
Partie partie = MauiProgram.Manageur.ChargerPartie(Partie);
Partie.Jouer();
partie.PartieDemanderJoueur += new ConnexionPage().QuandDemanderNom;
partie.PartieNouveauTour += new PlateauPage().QuandNouveauTour;
partie.PartiePartieTerminee += new VictoirePage().QuandPartieTerminee;
partie.Jouer();
}
public PartieCommenceeVue()

Loading…
Cancel
Save