correction des code smell

master
Céleste BARBOSA 11 months ago
parent 15e83989a7
commit 01e2d8d579

@ -14,7 +14,7 @@ namespace ConsoleApp
[ExcludeFromCodeCoverage] [ExcludeFromCodeCoverage]
public static class Program public static class Program
{ {
public static Manageur Manageur { get; private set; } = new Manageur(new PersistanceJSON()); public static Manageur Manageur { get; private set; } = new Manageur(new PersistanceJson());
public static void Main() public static void Main()
{ {

@ -100,7 +100,7 @@ namespace ConsoleApp
/// <param name="plateau">Le plateau de jeu.</param> /// <param name="plateau">Le plateau de jeu.</param>
public static void DessinerPlateau(Plateau plateau) public static void DessinerPlateau(Plateau plateau)
{ {
(IReadOnlyList<IReadOnlyList<Jeton>> codes, IReadOnlyList<IReadOnlyList<Indicateur>> indicateurs) = plateau.Grille; (IEnumerable<IEnumerable<Jeton>> codes, IEnumerable<IEnumerable<Indicateur>> indicateurs) = plateau.Grille;
int tailleGrille = 2 + plateau.TailleMaxCode * 3; int tailleGrille = 2 + plateau.TailleMaxCode * 3;
@ -109,14 +109,14 @@ namespace ConsoleApp
for (int i = 0; i < plateau.TailleMax; ++i) for (int i = 0; i < plateau.TailleMax; ++i)
{ {
if(i >= codes.Count) if(i >= codes.Count())
{ {
Console.WriteLine($"│{new string(' ', tailleGrille)}│ │{new string(' ', tailleGrille)}│"); Console.WriteLine($"│{new string(' ', tailleGrille)}│ │{new string(' ', tailleGrille)}│");
continue; continue;
} }
IReadOnlyList<Jeton> ligneCodes = codes.ElementAt(i); IEnumerable<Jeton> ligneCodes = codes.ElementAt(i);
IReadOnlyList<Indicateur> ligneIndicateurs = indicateurs.ElementAt(i); IEnumerable<Indicateur> ligneIndicateurs = indicateurs.ElementAt(i);
Console.Write("│"); Console.Write("│");

@ -13,12 +13,12 @@ namespace CoreLibrary.Core
Couleur = couleur; Couleur = couleur;
} }
public override readonly bool Equals(object? objet) public override readonly bool Equals(object? obj)
{ {
if (objet == null || objet is not Jeton) if (obj is not Jeton)
return false; return false;
return Couleur == ((Jeton)objet).Couleur; return Couleur == ((Jeton)obj).Couleur;
} }
public static bool operator ==(Jeton gauche, Jeton droite) => gauche.Equals(droite); public static bool operator ==(Jeton gauche, Jeton droite) => gauche.Equals(droite);

@ -27,8 +27,8 @@ namespace CoreLibrary.Core
public bool Complet => Taille == TailleMax; public bool Complet => Taille == TailleMax;
[DataMember] [DataMember]
public bool Victoire { get; private set; } = false; public bool Victoire { get; private set; } = false;
public (IReadOnlyList<IReadOnlyList<Jeton>>, IReadOnlyList<IReadOnlyList<Indicateur>>) Grille => ( public (IEnumerable<IEnumerable<Jeton>>, IEnumerable<IEnumerable<Indicateur>>) Grille => (
codes.Select(code => code.Jetons).ToList(), codes.Select(code => code.Jetons),
indicateurs indicateurs
); );
@ -70,10 +70,10 @@ namespace CoreLibrary.Core
throw new GrilleCompleteException(); throw new GrilleCompleteException();
codes.Add(code); codes.Add(code);
IReadOnlyList<Indicateur> indicateurs = codeSecret.Comparer(code); IReadOnlyList<Indicateur> indicateursCode = codeSecret.Comparer(code);
this.indicateurs.Add(indicateurs.ToList()); indicateurs.Add(indicateursCode.ToList());
if (!Victoire && indicateurs.Count(indicateur => indicateur == Indicateur.BonnePlace) == TailleMaxCode) if (!Victoire && indicateursCode.Count(indicateur => indicateur == Indicateur.BonnePlace) == TailleMaxCode)
Victoire = true; Victoire = true;
QuandPlateauAjouterCode(); QuandPlateauAjouterCode();

@ -48,8 +48,6 @@ namespace CoreLibrary.Joueurs
public virtual void QuandDemanderJoueurJouer(object? sender, PartieDemanderJoueurJouerEventArgs e) public virtual void QuandDemanderJoueurJouer(object? sender, PartieDemanderJoueurJouerEventArgs e)
{ {
if (e.Nom != Nom)
return;
} }
public override string ToString() => Nom; public override string ToString() => Nom;

@ -5,13 +5,19 @@ namespace CoreLibrary.Joueurs
{ {
public class Robot : Joueur public class Robot : Joueur
{ {
private static int nbRobots = 0; private static int nbRobots;
private List<Code>? codesPossibles; private List<Code>? codesPossibles;
static Robot()
{
nbRobots = 0;
}
public Robot() : public Robot() :
base($"Naps {++nbRobots}") base($"Naps {nbRobots + 1}")
{ {
++nbRobots;
} }
public Robot(string nom) : public Robot(string nom) :
@ -25,18 +31,15 @@ namespace CoreLibrary.Joueurs
return; return;
if (codesPossibles == null) if (codesPossibles == null)
{ codesPossibles = GenererTousCodesPossibles(e.Code.TailleMax);
codesPossibles = new List<Code>();
GenererTousCodesPossibles(e.Code.TailleMax);
}
SupprimerCodesImpossibles(e.Plateau); SupprimerCodesImpossibles(codesPossibles, e.Plateau);
for(int i = 0; i < e.Code.TailleMax; ++i) for(int i = 0; i < e.Code.TailleMax; ++i)
e.Code.AjouterJeton(codesPossibles.ElementAt(0).Jetons[i]); e.Code.AjouterJeton(codesPossibles.ElementAt(0).Jetons[i]);
} }
private void GenererTousCodesPossibles(int tailleCode) private static List<Code> GenererTousCodesPossibles(int tailleCode)
{ {
Couleur[] couleurs = Enum.GetValues<Couleur>(); Couleur[] couleurs = Enum.GetValues<Couleur>();
int nbLignes = (int)Math.Pow(couleurs.Length, tailleCode); int nbLignes = (int)Math.Pow(couleurs.Length, tailleCode);
@ -52,6 +55,7 @@ namespace CoreLibrary.Joueurs
} }
} }
List<Code> codes = new List<Code>();
for (int i = 0; i < jetons.GetLength(0); ++i) for (int i = 0; i < jetons.GetLength(0); ++i)
{ {
Code code = new Code(tailleCode); Code code = new Code(tailleCode);
@ -59,11 +63,13 @@ namespace CoreLibrary.Joueurs
{ {
code.AjouterJeton(jetons[i, j]!.Value); code.AjouterJeton(jetons[i, j]!.Value);
} }
codesPossibles!.Add(code); codes!.Add(code);
} }
return codes;
} }
private bool EstCodePossible(Plateau plateau, Code code) private static bool EstCodePossible(Plateau plateau, Code code)
{ {
for(int i = 0; i < plateau.Taille; ++i) for(int i = 0; i < plateau.Taille; ++i)
{ {
@ -86,21 +92,21 @@ namespace CoreLibrary.Joueurs
return true; return true;
} }
private void SupprimerCodesImpossibles(Plateau plateau) private static void SupprimerCodesImpossibles(List<Code> codes, Plateau plateau)
{ {
if (codesPossibles == null) if (codes == null)
return; return;
List<int> indicesASupprimer = new List<int>(); List<int> indicesASupprimer = new List<int>();
for(int i = codesPossibles.Count - 1; i >= 0; --i) for(int i = codes.Count - 1; i >= 0; --i)
{ {
if(!EstCodePossible(plateau, codesPossibles.ElementAt(i))) if(!EstCodePossible(plateau, codes.ElementAt(i)))
indicesASupprimer.Add(i); indicesASupprimer.Add(i);
} }
foreach (int indice in indicesASupprimer) foreach (int indice in indicesASupprimer)
codesPossibles.RemoveAt(indice); codes.RemoveAt(indice);
} }
} }
} }

@ -13,7 +13,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).Reverse().ToList(); public IEnumerable<Partie> PartiesNonTerminees => parties.Where(partie => !partie.Termine).Reverse();
public Manageur(IPersistance persistance) public Manageur(IPersistance persistance)
{ {

@ -33,8 +33,8 @@ namespace CoreLibrary
[DataMember] [DataMember]
private int courant = 0; private int courant = 0;
public IReadOnlyList<string> Joueurs => joueurs.Keys.ToList(); public IEnumerable<string> Joueurs => joueurs.Keys;
public IReadOnlyList<string> Robots => joueurs.Where(joueur => joueur.Value).Select(joueur => joueur.Key).ToList(); public IEnumerable<string> Robots => joueurs.Where(joueur => joueur.Value).Select(joueur => joueur.Key);
[DataMember] [DataMember]
public bool Termine { get; private set; } = false; public bool Termine { get; private set; } = false;
[DataMember] [DataMember]
@ -155,9 +155,9 @@ namespace CoreLibrary
for (int i = 0; i < joueurs.Count; ++i) for (int i = 0; i < joueurs.Count; ++i)
{ {
if (plateaux.ElementAt(i).Victoire) if (plateaux.ElementAt(i).Victoire)
gagnants.Add(Joueurs[i]); gagnants.Add(Joueurs.ElementAt(i));
else else
perdants.Add(Joueurs[i]); perdants.Add(Joueurs.ElementAt(i));
} }
QuandPartiePartieTerminee(gagnants, perdants); QuandPartiePartieTerminee(gagnants, perdants);

@ -4,13 +4,13 @@ using System.Xml;
namespace CoreLibrary.Persistance namespace CoreLibrary.Persistance
{ {
public class PersistanceJSON : IPersistance public class PersistanceJson : IPersistance
{ {
private readonly string nomDossier = "Fichiers"; private readonly string nomDossier = "Fichiers";
private readonly string nomRacine = "Sources"; private readonly string nomRacine = "Sources";
private readonly string dossier = AppDomain.CurrentDomain.BaseDirectory; private readonly string dossier = AppDomain.CurrentDomain.BaseDirectory;
public PersistanceJSON() public PersistanceJson()
{ {
while (new DirectoryInfo(dossier).Name != nomRacine) while (new DirectoryInfo(dossier).Name != nomRacine)
dossier = Path.GetFullPath(Path.Combine(dossier, @"../")); dossier = Path.GetFullPath(Path.Combine(dossier, @"../"));
@ -26,20 +26,19 @@ namespace CoreLibrary.Persistance
return []; return [];
Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), nomDossier)); Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), nomDossier));
var directory = Directory.GetCurrentDirectory();
if (!File.Exists(fichier)) if (!File.Exists(fichier))
return []; return [];
DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(T[])); DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(T[]));
T[] elements; T[]? elements;
using (FileStream s = File.OpenRead(fichier)) using (FileStream s = File.OpenRead(fichier))
{ {
elements = jsonSerializer.ReadObject(s) as T[]; elements = jsonSerializer.ReadObject(s) as T[];
} }
return elements; return elements != null ? elements : Array.Empty<T>();
} }
public void Enregistrer<T>(T[] elements) where T : IEstPersistant public void Enregistrer<T>(T[] elements) where T : IEstPersistant

@ -11,7 +11,7 @@ namespace CoreLibrary.Regles
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) => obj is ReglesClassiques;
public override int GetHashCode() => Nom.GetHashCode(); public override int GetHashCode() => Nom.GetHashCode();
} }
} }

@ -11,7 +11,7 @@ namespace CoreLibrary.Regles
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) => obj is ReglesDifficiles;
public override int GetHashCode() => Nom.GetHashCode(); public override int GetHashCode() => Nom.GetHashCode();
} }
} }

@ -121,5 +121,19 @@
"Value": 50 "Value": 50
} }
] ]
},
{
"Nom": "a",
"statistiques": [
{
"Key": {
"Item1": {
"__type": "ReglesClassiques:#CoreLibrary.Regles"
},
"Item2": 3
},
"Value": 1
}
]
} }
] ]

@ -2574,5 +2574,135 @@
] ]
} }
] ]
},
{
"Regles": {
"__type": "ReglesClassiques:#CoreLibrary.Regles"
},
"Termine": false,
"Tour": 2,
"courant": 0,
"joueurs": [
{
"Key": "a",
"Value": true
},
{
"Key": "Naps 1",
"Value": false
}
],
"plateaux": [
{
"TailleMax": 12,
"TailleMaxCode": 4,
"Victoire": false,
"codeSecret": {
"Jetons": [
{
"Couleur": 3
},
{
"Couleur": 5
},
{
"Couleur": 1
},
{
"Couleur": 4
}
],
"TailleMax": 4
},
"codes": [
{
"Jetons": [
{
"Couleur": 0
},
{
"Couleur": 0
},
{
"Couleur": 0
},
{
"Couleur": 0
}
],
"TailleMax": 4
}
],
"indicateurs": [
[ ]
]
},
{
"TailleMax": 12,
"TailleMaxCode": 4,
"Victoire": false,
"codeSecret": {
"Jetons": [
{
"Couleur": 0
},
{
"Couleur": 3
},
{
"Couleur": 3
},
{
"Couleur": 2
}
],
"TailleMax": 4
},
"codes": [
{
"Jetons": [
{
"Couleur": 0
},
{
"Couleur": 0
},
{
"Couleur": 0
},
{
"Couleur": 0
}
],
"TailleMax": 4
}
],
"indicateurs": [
[
0
]
]
}
]
},
{
"Regles": {
"__type": "ReglesClassiques:#CoreLibrary.Regles"
},
"Termine": false,
"Tour": 0,
"courant": 0,
"joueurs": [ ],
"plateaux": [ ]
},
{
"Regles": {
"__type": "ReglesClassiques:#CoreLibrary.Regles"
},
"Termine": false,
"Tour": 0,
"courant": 0,
"joueurs": [ ],
"plateaux": [ ]
} }
] ]

@ -6,7 +6,7 @@ namespace MauiSpark
{ {
public static class MauiProgram public static class MauiProgram
{ {
public static Manageur Manageur { get; private set; } = new Manageur(new PersistanceJSON()); public static Manageur Manageur { get; private set; } = new Manageur(new PersistanceJson());
public static MauiApp CreateMauiApp() public static MauiApp CreateMauiApp()
{ {

@ -19,12 +19,12 @@ internal class Tour
Code = e.Code; Code = e.Code;
EstJoueur = e.EstJoueur; EstJoueur = e.EstJoueur;
(IReadOnlyList<IReadOnlyList<Jeton>> jetons, IReadOnlyList < IReadOnlyList < Indicateur >> indicateurs) = e.Plateau.Grille; (IEnumerable<IEnumerable<Jeton>> jetons, IEnumerable<IEnumerable<Indicateur>> indicateurs) = e.Plateau.Grille;
List<(IEnumerable<Jeton>, IEnumerable<Indicateur>)> plateau = new List<(IEnumerable<Jeton>, IEnumerable<Indicateur>)>(); List<(IEnumerable<Jeton>, IEnumerable<Indicateur>)> plateau = new List<(IEnumerable<Jeton>, IEnumerable<Indicateur>)>();
for (int i = 0; i < e.Plateau.TailleMax; ++i) for (int i = 0; i < e.Plateau.TailleMax; ++i)
{ {
if(i >= jetons.Count) if(i >= jetons.Count())
{ {
plateau.Add(([], [])); plateau.Add(([], []));
continue; continue;

Loading…
Cancel
Save