Mise à jour de 'Conception'

master
Camille TURPIN-ETIENNE 11 months ago
parent 2231d86fb2
commit 36ed7228f9

@ -243,62 +243,64 @@ Regles -[dashed]-> Exceptions
### Description de l'architecture
#### La classe Partie
La classe Partie est le point central de notre application, orchestrant les différentes phases du jeu. Partie est une classe, car elle centralise la logique de contrôle du jeu. Une classe permet de regrouper les méthodes et les événements nécessaires pour orchestrer les différentes phases du jeu.
### Description de l'architecture
#### La classe `Partie`
La classe `Partie` est le point central de notre application, orchestrant les différentes phases du jeu. `Partie` est une classe, car elle centralise la logique de contrôle du jeu. Une classe permet de regrouper les méthodes et les événements nécessaires pour orchestrer les différentes phases du jeu.
Afin de jouer une partie facilement, une partie a besoin des règles choisies. Il suffit alors d'écouter les événements et de démarrer la partie.
La classe va alors faire tout le déroulement dune partie grâce aux règles et elle va notifier son avancement au travers des événements. Plusieurs gestionnaires d'événements (EventHandler) sont définis pour différentes actions comme demander un joueur, débuter une partie, ajouter un joueur, commencer un nouveau tour, et cetera.
La classe va alors faire tout le déroulement dune partie grâce aux règles et elle va notifier son avancement au travers des événements. Plusieurs gestionnaires d'événements (EventHandler) sont définis pour différentes actions comme demander un joueur, débuter une partie, ajouter un joueur, commencer un nouveau tour, etc.
Les méthodes, QuandDemanderJoueur, QuandAjouterJoueur, QuandDebutPartie, et cetera, permettent de définir le comportement du jeu à différentes étapes. Ces méthodes sont conçues pour être appelées lors des événements correspondants.
Les méthodes `QuandDemanderJoueur`, `QuandAjouterJoueur`, `QuandDebutPartie`, etc., permettent de définir le comportement du jeu à différentes étapes. Ces méthodes sont conçues pour être appelées lors des événements correspondants.
#### L'interface IRegles
Afin de pouvoir jouer aux différents modes de notre jeu, il existe linterface IRegles. Cette interface nous donne des informations importantes sur la partie.
#### L'interface `IRegles`
Afin de pouvoir jouer aux différents modes de notre jeu, il existe linterface `IRegles`. Cette interface nous donne des informations importantes sur la partie.
Il y a le nom, le nombre de tours maximum, le nombre de joueurs possibles, la taille d'un code. Mais également le joueur actuel, son plateau, et la possibilité de générer un code vide, définissent les paramètres essentiels des règles du jeu.
Enfin, elle permet de connaître l'état de la partie, les gagnants et/ou les perdants.
L'interface IRegles définit donc les propriétés et les méthodes que toute règle de jeu doit implémenter.
L'interface `IRegles` définit donc les propriétés et les méthodes que toute règle de jeu doit implémenter.
#### La classe ReglesClassiques
Elle implémente IRegles. Ainsi, elle permet de jouer à une version classique du Mastermind. Deux joueurs s'affrontent au cours de douze tours pour essayer de trouver en premier le code à quatre couleurs.
#### La classe `ReglesClassiques`
Elle implémente `IRegles`. Ainsi, elle permet de jouer à une version classique du Mastermind. Deux joueurs s'affrontent au cours de douze tours pour essayer de trouver en premier le code à quatre couleurs.
Les attributs nbJoueurs et joueurCourant permettent de suivre l'état de la partie.
Les attributs `nbJoueurs` et `joueurCourant` permettent de suivre l'état de la partie.
#### La classe Joueur
Elle représente un joueur dans le jeu. Joueur est une classe, car elle nous permet d'encapsuler les données propres à chaque joueur et les comportements associés. Cela facilite la gestion de l'état et des actions de chaque joueur de manière isolée.
#### La classe `Joueur`
Elle représente un joueur dans le jeu. `Joueur` est une classe, car elle nous permet d'encapsuler les données propres à chaque joueur et les comportements associés. Cela facilite la gestion de l'état et des actions de chaque joueur de manière isolée.
Un joueur possède un nom et un plateau. À lappel du constructeur, on fournit le nom du joueur et son plateau de jeu associé. Ils ne pourront pas être modifiés.
#### La classe Plateau
Elle gère l'état du plateau de jeu dun joueur. Plateau est une classe, car cest idéale pour encapsuler la logique complexe de manipulation des jetons, de vérification des codes, et de gestion de l'état de la partie pour un joueur.
#### La classe `Plateau`
Elle gère l'état du plateau de jeu dun joueur. `Plateau` est une classe, car cest idéale pour encapsuler la logique complexe de manipulation des jetons, de vérification des codes, et de gestion de l'état de la partie pour un joueur.
À la construction, le plateau a besoin d'une taille pour la grille et de la taille de ses codes. Les propriétés tailleCode, Victoire et Tour indiquent l'état actuel du plateau.
À la construction, le plateau a besoin d'une taille pour la grille et de la taille de ses codes. Les propriétés `tailleCode`, `Victoire` et `Tour` indiquent l'état actuel du plateau.
De plus, il génère un code aléatoire qui lui est personnel et qu'il gardera tout au long de son existence. Il est ensuite possible de lui insérer un code complet qu'il ajoute dans un tableau. Lorsque ce code est inséré, il vérifie si ce dernier est le code secret, et génère les indicateurs de bonne couleur et de bonne place, qu'il ajoute aussi dans un tableau.
Il est possible d'obtenir ces deux tableaux afin de connaître les codes déjà joués et les résultats des tours précédents.
#### La classe Code
#### La classe `Code`
Elle représente une séquence de jetons, qui est le code que les joueurs souhaitent essayer.
Un code possède une taille qui doit être respectée. Il est possible de lui ajouter un jeton ou de supprimer le dernier jeton ajouté. Il est aussi possible d'obtenir un ou tous les jetons et de savoir si le code est complet ou non.
Enfin, lune des méthodes permet de comparer le code entré par le joueur et son code secret, ce qui permet de renvoyer les indicateurs nécessaires au joueur pour trouver son code secret.
#### La structure Jeton
La structure Jeton représente un jeton avec une couleur spécifique. La couleur du jeton est accessible mais pas modifiable.
#### La structure `Jeton`
La structure `Jeton` représente un jeton avec une couleur spécifique. La couleur du jeton est accessible mais pas modifiable.
#### L'énumération Indicateur
Indicateur est une énumération qui possède deux valeurs : BONNE COULEUR et BONNE PLACE. Cest une énumération, car elle représente un ensemble fixe de valeurs possibles.
#### L'énumération `Indicateur`
`Indicateur` est une énumération qui possède deux valeurs : `BONNE_COULEUR` et `BONNE_PLACE`. Cest une énumération, car elle représente un ensemble fixe de valeurs possibles.
Si le code couleur proposé par lun des joueurs, possède un jeton de la bonne couleur, mais à la mauvaise place, un indicateur BONNE COULEUR sera donné. Si le code possède un jeton de la bonne couleur et à la bonne place, un indicateur BONNE PLACE sera donné. Nous avons choisi une énumération pour cette structure, car les énumérations offrent des noms symboliques significatifs, ce qui rend le code plus lisible et moins sujet aux erreurs.
Si le code couleur proposé par lun des joueurs possède un jeton de la bonne couleur, mais à la mauvaise place, un indicateur `BONNE_COULEUR` sera donné. Si le code possède un jeton de la bonne couleur et à la bonne place, un indicateur `BONNE_PLACE` sera donné. Nous avons choisi une énumération pour cette structure, car les énumérations offrent des noms symboliques significatifs, ce qui rend le code plus lisible et moins sujet aux erreurs.
#### L'énumération Couleur
Couleur contient toutes les couleurs possibles que peut prendre un jeton. Cest également une énumération tout comme Indicateur, car elle représente un ensemble fini de couleurs possibles pour les jetons.
#### L'énumération `Couleur`
`Couleur` contient toutes les couleurs possibles que peut prendre un jeton. Cest également une énumération tout comme `Indicateur`, car elle représente un ensemble fini de couleurs possibles pour les jetons.
On y retrouve le rouge, le vert, le bleu, le jaune, le noir et le blanc. Tout comme lénumération Indicateur, nous avons choisi une énumération, car il sagit dune structure simple et que les noms symboliques rendent le code plus lisible et est moins sujet aux erreurs.
On y retrouve le rouge, le vert, le bleu, le jaune, le noir et le blanc. Tout comme lénumération `Indicateur`, nous avons choisi une énumération, car il sagit dune structure simple et que les noms symboliques rendent le code plus lisible et est moins sujet aux erreurs.
### Interaction entre les classes

Loading…
Cancel
Save