Nantes Université

Skip to content
Extraits de code Groupes Projets
Valider 5dc4a85b rédigé par YassineDER's avatar YassineDER
Parcourir les fichiers

Merge branch 'main' into yassine

parents 574b2cd9 8d3f7f13
Branches
Aucune étiquette associée trouvée
1 requête de fusion!2Yassine merge dans main
Pipeline #79620 réussi
......@@ -23,4 +23,4 @@ ui:
bundle:
url: https://gitlab.univ-nantes.fr/sunye-g/antora-ui-default/-/jobs/artifacts/master/raw/build/ui-bundle.zip?job=bundle-stable
snapshot: true
supplemental_files: "./antora-custom-theme/supplemental-ui"
\ No newline at end of file
supplemental_files: "./antora-custom-theme/supplemental-ui"
......@@ -16,7 +16,7 @@ asciidoc:
url-repo: https://gitlab.com/antora/antora
url-asciidoc: https://docs.asciidoctor.org/asciidoc/latest
kroki-fetch-diagram: true
kroki-server-url: http://kroki:8000
kroki-server-url: https://kroki.io
icons: font
extensions:
- asciidoctor-kroki
......
@startuml
<<<<<<< HEAD
package "My System" {
interface Web1
interface Cli1
......@@ -32,4 +33,48 @@ Cli1 )-- [MiddlewareClient1]
[Client web 1] --( Web1
[MiddlewareClient1] -up-() Web1
=======
package "Game System" {
interface "Question Interface" as QuestInt
interface "Player Interface" as PlayInt
interface "Game Management Interface" as ManageInt
interface "Dice Interface" as DiceInt
component "Game Board Component" as GameBoard {
[Plateau de Jeu] -- QuestInt
[Plateau de Jeu] -- PlayInt
}
component "Question Categories Component" as QuesCat {
[Catégories de Questions] -- QuestInt
}
component "Question Cards Component" as QuesCards {
[Cartes de Questions] -- QuestInt
}
component "Players Component" as Players {
[Joueurs] -- PlayInt
}
component "Game Management Component" as GameManage {
[Gestion de Partie] -- ManageInt
}
component "Dice and Movement Component" as DiceMove {
[Dés et Mouvement] -- DiceInt
}
QuestInt <-- PlayInt : "Utilise pour poser/recevoir des questions"
QuestInt <-- ManageInt : "Utilise pour gérer les tours/questions"
DiceInt <-- PlayInt : "Utilise pour mouvement des joueurs"
PlayInt <-- ManageInt : "Utilise pour gérer les états des joueurs"
}
[Game Board Component] -- [Question Categories Component]
[Game Board Component] -- [Players Component]
[Players Component] -- [Dice and Movement Component]
[Game Management Component] -- [Game Board Component]
[Game Management Component] -- [Players Component]
[Game Management Component] -- [Question Cards Component]
[Question Cards Component] -- [Question Categories Component]
>>>>>>> main
@enduml
......@@ -19,51 +19,203 @@ include::example$dc-global.puml[]
== Composant A
== Game Board Component (Composant Plateau de Jeu)
[plantuml]
....
@startuml
left to right direction
skinparam packageStyle rectangle
component A as "Component A" {
portin "WebSockets" as cws
portout "HTTP" as sws
component "Game Board Component" as GameBoard {
interface "BoardLayoutInterface" as BoardLayout
interface "SpecialEventInterface" as SpecialEvent
}
....
interface Provided
TIP: Si nécessaire, utilisez le langage OCL pour spécifier les pré et post-conditions des opérations.
interface Required
.Contraintes sur les operations
[source, ocl]
----
context A::operationA(a: String, b: Integer): Boolean
pre: a.size() > 3
post:
-- Pas de postconditions
----
==== Interface B
GameBoard -up- BoardLayout
GameBoard -down- SpecialEvent
sws --() Provided
Required )-- cws
@enduml
....
=== Responsabilités du Composant A
=== Responsabilités du Game Board Component
* Serveur :
. Initialisation du Plateau de Jeu :
* Crée et initialise la représentation du plateau de jeu avec toutes les cases et pions des joueurs.
. Gestion des Connexions au Plateau :
* Gère les connexions des joueurs au plateau de jeu et attribue les pions de manière unique.
. Début de la Partie :
* Lance la partie une fois que tous les joueurs sont prêts et distribue les éléments nécessaires pour débuter, comme les cartes de départ.
. Gestion des Tours
* À chaque tour, gère la réception des choix des joueurs, y compris les cartes jouées et les actions entreprises.
. Distribution des Mises à Jour de Jeu :
* Après chaque tour, envoie aux joueurs les mises à jour nécessaires, telles que de nouvelles cartes et les actions des autres joueurs.
. Détermination du Gagnant :
* À la fin de la partie, évalue les conditions de victoire pour déterminer le gagnant.
.Quelques exemples
* Créé tous les objets relatifs au jeu : les joueurs, les cartes, les merveilles et les initialise.
* Gère les connections au serveur et les pseudos
* Lorsque tous les joueurs sont prêts, lance la partie et distribue au client ce dont il a besoin : Merveille, cartes au tour 1
* À chaque tour, il reçoit la liste suivante : Le paquet de cartes non jouées, la carte jouée/déposée sur la merveille/défossée,
le nombre d'argent à aj outer au joueur
* Une fois que tout le monde a envoyé son jeu, envoie à chaque client : ses nouvelles cartes, les cartes jouées depuis le début de la partie de son voisin de gauche et de droite
* Gère les tours de la partie
* Définit le joueur gagnant
=== Interfaces fournies
==== Interface A
==== BoardInterface
[plantuml]
....
[TIP]
====
Utilisez la notation UML pour spécifier la signature de chaque operation de l'interface.
left to right direction
skinparam packageStyle rectangle
component "Game Board Component" as GameBoard {
interface "BoardLayoutInterface" as BoardLayout
interface "SpecialEventInterface" as SpecialEvent
}
....
.Contraintes sur les operations
[source, ocl]
----
context B::operationA(a: String, b: Integer): Boolean
pre: a.size() > 3
post:
-- Pas de postconditions
----
== Composant A
[note]
====
Description de ses responsabilités et de ses interfaces
====
GameBoard -up- BoardLayout
GameBoard -down- SpecialEvent
....
. initializeGameBoard() : GameBoardState
* Description : Initialise le plateau de jeu pour la nouvelle partie.
* Aucun paramètre.
* Retour : `GameBoardState` - État initial du plateau de jeu.
. connectPlayer(playerId: String[1..1], playerToken: Token[1..1]) : Boolean
* Description : Connecte un joueur au jeu et lui attribue un pion.
* Paramètres : `playerId` - L'identifiant unique du joueur, playerToken - Le pion attribué au joueur.
* Retour : `Boolean` - Succès ou échec de la connexion.
. startGame() : GameStartOutcome
* Description : Démarre la partie une fois tous les joueurs connectés.
* Aucun paramètre.
* Retour : `GameStartOutcome` - Détails sur le démarrage de la partie, y compris l'ordre des joueurs
. receiveTurnActions(actions: List<Action>[1..*]) : TurnOutcome
* Description : Reçoit et traite les actions des joueurs pour un tour.
* Paramètres : actions - Liste des actions entreprises par les joueurs pendant leur tour.
* Retour : `TurnOutcome` - Résultat du traitement des actions du tour.
. endGame() : GameEndOutcome
* Description : Termine la partie et détermine le gagnant.
* Aucun paramètre.
* Retour : GameEndOutcome - Résultat de la partie, y compris le gagnant et les scores finaux.
=== Contraintes OCL pour BoardInterface
[ocl]
----
context BoardInterface::connectPlayer(playerId: String, playerToken: Token): Boolean
pre: -- Le joueur n'est pas déjà connecté.
not GameBoard.allInstances().players->exists(p | p.id = playerId)
post: -- Si la méthode retourne vrai, alors le joueur est ajouté à la liste des joueurs du plateau de jeu avec le pion spécifié.
result = true implies (GameBoard.allInstances().players->any(p | p.id = playerId).token = playerToken)
----
== Question Categories Component (Composant Catégories de Questions)
[plantuml, filename="diagramme-questioncategories", format="png"]
....
left to right direction
skinparam packageStyle rectangle
component "Question Categories Component" as QuestionCategories {
interface "CategoryInterface" as CategoryInt
}
....
QuestionCategories -up- CategoryInt
....
=== Responsabilités du Question Categories Component
* Gestion des Catégories :
** Maintient une liste de catégories de questions disponibles dans le jeu.
* Distribution des Questions :
** Fournit des questions à d'autres composants en fonction de la catégorie demandée.
* Mise à jour des Catégories :
** Permet l'ajout de nouvelles catégories ou la modification des catégories existantes.
=== Interfaces fournies
==== CategoryInterface
. getCategories() : List<Category>
** Description : Récupère une liste de toutes les catégories de questions disponibles.
** Aucun paramètre.
** Retour : `List<Category>` - Liste des catégories de questions.
. getQuestionsByCategory(categoryId: String[1]) : List<Question>
** Description : Récupère les questions pour une catégorie de questions spécifique.
** Paramètres : `categoryId` - L'identifiant unique de la catégorie de questions.
** Retour : `List<Question>` - Liste des questions associées à la catégorie spécifiée.
. addCategory(category: Category) : Boolean
** Description : Ajoute une nouvelle catégorie de questions au système.
** Paramètres : `category` - L'objet catégorie à ajouter.
** Retour : `Boolean` - Indique si la catégorie a été ajoutée avec succès.
. updateCategory(categoryId: String[1], newDetails: Category) : Boolean
** Description : Met à jour les détails d'une catégorie de questions existante.
** Paramètres :
*** `categoryId` - L'identifiant unique de la catégorie à mettre à jour.
*** `newDetails` - Les nouveaux détails de la catégorie.
** Retour : `Boolean` - Succès ou échec de la mise à jour.
=== Contraintes OCL pour CategoryInterface
[ocl]
----
context CategoryInterface::getQuestionsByCategory(categoryId: String): List<Question>
pre: -- La catégorie demandée doit exister.
QuestionCategories.allInstances().categories->exists(c | c.id = categoryId)
post: -- Le résultat doit être une liste de questions qui appartient uniquement à la catégorie spécifiée.
result = QuestionCategories.allInstances().categories->select(c | c.id = categoryId).questions
context CategoryInterface::addCategory(category: Category): Boolean
pre: -- La catégorie ne doit pas déjà exister.
not QuestionCategories.allInstances().categories->exists(c | c.id = category.id)
post: -- Si la méthode retourne vrai, alors la nouvelle catégorie est ajoutée.
result = true implies (QuestionCategories.allInstances().categories->includes(category))
----
[WARNING]
====
......@@ -94,7 +246,7 @@ post:
==== Interface B
[plantuml]
[source,plantuml]
....
interface B {
operationB(a: String, b: Integer): Boolean
......
......@@ -266,32 +266,6 @@ une base de données par le biais de l'API Java Persistence (JPA).
.Cas d'utilisation «{nbsp}Joindre une partie{nbsp}»
include::partial$req-joindre-partie.adoc[]
:freq: {counter:freq}
[id="freq-{freq}"]
=== Fonctionnalité «{nbsp}Rejoindre une partie{nbsp}»
==== Description et priorité
[cols="30s,70n",options="header", frame=sides]
|===
| Id
| FR-{freq}
| Description
| Permet à un joueur de se connecter au Système, choisir une partie et commencer à jouer.
|Priorité
| Haute
|===
==== Description sous la forme d'un cas d'utilisation
--
include::partial$req-joindre-partie.adoc[]
--
:freq: {counter:freq}
[id="freq-{freq}"]
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter