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 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 class PartieNouveauTourEventArgs : EventArgs
{ {
public int Tour { get; private init; } 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 Plateau Plateau { get; private init; }
public Code Code { 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; Tour = tour;
Joueur = joueur; Joueur = joueur;

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

@ -1,12 +1,10 @@
using CoreLibrary.Joueurs; namespace CoreLibrary.Evenements
namespace CoreLibrary.Evenements
{ {
public class PartiePasserLaMainEventArgs 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; Joueur = joueur;
} }

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

@ -2,6 +2,7 @@
using CoreLibrary.Joueurs; using CoreLibrary.Joueurs;
using CoreLibrary.Regles; using CoreLibrary.Regles;
using CoreLibrary.Statistiques; using CoreLibrary.Statistiques;
using System.Text.RegularExpressions;
namespace CoreLibrary.Manageurs namespace CoreLibrary.Manageurs
{ {
@ -13,7 +14,7 @@ namespace CoreLibrary.Manageurs
public IReadOnlyList<Joueur> Joueurs => joueurs; public IReadOnlyList<Joueur> Joueurs => joueurs;
public IReadOnlyList<Partie> Parties => parties; 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) public Manageur(IPersistance persistance)
{ {
@ -29,37 +30,59 @@ namespace CoreLibrary.Manageurs
persistance.Enregistrer(parties.ToArray()); 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) public Partie NouvellePartie(IRegles regles)
{ {
Partie partie = new Partie(regles); Partie partie = new Partie(regles);
parties.Add(partie); 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.PartieNouveauTour += (sender, e) => Sauvegarder();
partie.PartiePasserLaMain += (sender, e) =>
{
DemanderJoueur(e.Joueur).IncrementerStatistique(partie.Regles, Statistique.CoupJoue);
Sauvegarder();
};
partie.PartiePartieTerminee += (sender, e) => partie.PartiePartieTerminee += (sender, e) =>
{ {
if (e.Gagnants.Count == 1) if (e.Gagnants.Count == 1)
{ {
e.Gagnants[0].IncrementerStatistique(regles, Statistique.PartieGagnee); DemanderJoueur(e.Gagnants[0]).IncrementerStatistique(partie.Regles, Statistique.PartieGagnee);
} }
else else
{ {
foreach (Joueur gagnant in e.Gagnants) foreach (string gagnant in e.Gagnants)
gagnant.IncrementerStatistique(regles, Statistique.PartieEgalite); 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(); Sauvegarder();
}; };
return partie;
} }
public Joueur DemanderJoueur(string nom) 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 QuandPartieDemanderJoueur(Joueur joueurDemande) => PartieDemanderJoueur?.Invoke(this, new PartieDemanderJoueurEventArgs(joueurs.Count + 1, joueurDemande));
private void QuandPartieDebutPartie() => PartieDebutPartie?.Invoke(this, new PartieDebutPartieEventArgs()); 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 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] [DataMember]
private readonly List<Joueur> joueurs = new List<Joueur>(); private readonly List<string> joueurs = new List<string>();
[DataMember] [DataMember]
private readonly List<Plateau> plateaux = new List<Plateau>(); private readonly List<Plateau> plateaux = new List<Plateau>();
[DataMember] [DataMember]
private int courant = 0; private int courant = 0;
public IReadOnlyList<Joueur> Joueurs => joueurs; public IReadOnlyList<string> Joueurs => joueurs;
[DataMember] [DataMember]
public bool Termine { get; private set; } = false; public bool Termine { get; private set; } = false;
[DataMember] [DataMember]
@ -44,6 +44,21 @@ namespace CoreLibrary
Regles = regles; 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() public void Jouer()
{ {
if (joueurs.Count != Regles.NbJoueurs) if (joueurs.Count != Regles.NbJoueurs)
@ -62,7 +77,7 @@ namespace CoreLibrary
private void JoueurConnecte(object? sender, JoueurSeConnecterEventArgs e) private void JoueurConnecte(object? sender, JoueurSeConnecterEventArgs e)
{ {
joueurs.Add(e.JoueurConnecte); joueurs.Add(e.Nom);
plateaux.Add(new Plateau(Regles.TailleCode, Regles.NbTour)); plateaux.Add(new Plateau(Regles.TailleCode, Regles.NbTour));
if (joueurs.Count < Regles.NbJoueurs) if (joueurs.Count < Regles.NbJoueurs)
@ -77,7 +92,8 @@ namespace CoreLibrary
private void DebutPartie() private void DebutPartie()
{ {
Tour = 1; if (Tour == 0)
++Tour;
foreach (Plateau plateau in plateaux) foreach (Plateau plateau in plateaux)
{ {
@ -120,8 +136,8 @@ namespace CoreLibrary
{ {
Termine = true; Termine = true;
List<Joueur> gagnants = new List<Joueur>(); List<string> gagnants = new List<string>();
List<Joueur> perdants = new List<Joueur>(); List<string> perdants = new List<string>();
for (int i = 0; i < joueurs.Count; ++i) for (int i = 0; i < joueurs.Count; ++i)
{ {
@ -133,14 +149,5 @@ namespace CoreLibrary
QuandPartiePartieTerminee(gagnants, perdants); 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 internal class Tour
{ {
public IEnumerable<(IEnumerable<Jeton>, IEnumerable<Indicateur>)> Plateau { get; private init; } 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 string Numero { get; private init; }
public Code Code { get; private init; } public Code Code { get; private init; }

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

@ -1,8 +1,6 @@
using CoreLibrary; using CoreLibrary;
using CoreLibrary.Joueurs;
using MauiSpark.Pages; using MauiSpark.Pages;
using System.ComponentModel; using System.ComponentModel;
using System.Runtime.CompilerServices;
namespace MauiSpark.Vues; 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)}"; 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() : []; get => Partie != null ? Partie.Joueurs.ToArray() : [];
} }
@ -46,11 +44,13 @@ public partial class PartieCommenceeVue : ContentView, INotifyPropertyChanged
if (Partie == null) if (Partie == null)
return; return;
Partie.PartieDemanderJoueur += new ConnexionPage().QuandDemanderNom; Partie partie = MauiProgram.Manageur.ChargerPartie(Partie);
Partie.PartieNouveauTour += new PlateauPage().QuandNouveauTour;
Partie.PartiePartieTerminee += new VictoirePage().QuandPartieTerminee;
Partie.Jouer(); partie.PartieDemanderJoueur += new ConnexionPage().QuandDemanderNom;
partie.PartieNouveauTour += new PlateauPage().QuandNouveauTour;
partie.PartiePartieTerminee += new VictoirePage().QuandPartieTerminee;
partie.Jouer();
} }
public PartieCommenceeVue() public PartieCommenceeVue()

Loading…
Cancel
Save