Trivial Pursuit
1. Vue Globale
@startuml [Utilisateur] as U [Administrateur] as A [Lobby] as L [Partie] as P [QuestionsDatabase] as QDB [PartiesDatabase] as PDB [UtilisateursDatabase] as UDB () "Jouer" as itf_jouer () "Connection" as itf_connection () "Valider" as itf_valid () "Administrer" as itf_adm () "Manager" as itf_man () "Vérifier" as itf_enr A -down-( itf_connection A -down-( itf_adm L -left-() itf_adm L -up-() itf_connection L -left-( itf_jouer P -right-() itf_jouer U -down-( itf_connection QDB -up-() itf_valid P -down-( itf_valid PDB -up-() itf_man P -down-( itf_man UDB -up-() itf_enr L -down-( itf_enr @enduml
1.1. Composants
1.1.1. Composant Lobby
Responsabilités du composant
-
Serveur :
-
Permet aux joueurs de se regrouper pour jouer ensemble, ou de quitter un groupe dont ils sont membres.
-
Gère les connexions des utilisateurs au serveur.
-
Gère l’authentification des utilisateurs.
-
-
Fournit des fonctionnalités pour créer, rejoindre, quitter et supprimer une partie.
-
Permet à l’administrateur d’effectuer des actions spécifiques, comme supprimer une partie dont il n’est pas propriétaire.
-
Interfaces fournies
Interface Administrer
@startuml interface Connection { + supprimerPartie(idPartie: String): void + gérerUtilisateur(idJoueur: String, action: String): void } @enduml
context Administrer::supprimerPartie(idPartie: String): void
pre: idPartie.size() > 0
context Administrer::gérerUtilisateur(idJoueur: String, action: String): void
pre: idJoueur.size() > 0 and action.size() > 0
post:
-- Pas de postconditions
Interface Connection
@startuml interface Connection { + seConnecter(identifiant: String, motDePasse: String): void + seDeconnecter(identifiant: String): void } @enduml
Contraintes sur les opérations :
context Connection::seConnecter(identifiant: String, motDePasse: String): void
pre: identifiant.size() > 0 and motDePasse.size() > 0
post:
-- Pas de postconditions
context Connection::seDeconnecter(identifiant: String, motDePasse: String): void
pre: identifiant.size() > 0 and motDePasse.size() > 0
post:
-- Pas de postconditions
1.1.2. Composant Partie
Responsabilités du composant
-
Serveur :
-
Crée tous les objets de jeu : joueurs, cartes et les initialise.
-
Démarre la partie lorsque tous les joueurs sont prêts.
-
Gère le déroulement des tours de la partie.
-
À chaque tour, reçoit les informations essentielles : la nouvelle position du joueur, le paquet de cartes non jouées, la carte jouée…
-
Vérifie si la réponse du joueur est correcte, met à jour le score du joueur.
-
-
Définit le joueur gagnant à la fin de la partie.
-
Interfaces fournies
@startuml interface Jouer { + créerPartie(idPartie: String, idPropriétaire: String): Partie + lancerPartie(idPartie: String): void + gererTour(): void + avancer(identifiant: String): void + répondreQuestion(questionId: String, réponse: String): void + definirJoueurGagnant(): Joueur } @enduml
Contraintes sur les opérations :
context Jouer::créerPartie(idPartie: String, idPropriétaire): Partie
pre: // Le lobby doit contenir entre 2 et 6 joueurs
post: partie.getJoueurs().size() > 1 && partie.getJoueurs().size() < 7
context lancerPartie(idPartie: String) : void
pre: idPartie != null //&& la partie est existante
post:
-- Pas de postconditions
context Jouer::gererTour(): void
pre: // partie en cours
post:
-- Pas de postconditions
context Jouer::avancer(identifiant: String): void
pre: identifiant != null && identifiant == partie.getJoueurs().getId() && partie.getCase(nouvelle_position).isEmpty()
post:
-- Pas de postconditions
context Jouer::distribuerCartes(joueur: Joueur, nombreCartes: Integer): void
pre:
nombreCartes > 0 && partie.getJoueurs().contains(joueur)
post:
-- Pas de postconditions
context Jouer::répondreQuestion(questionId: int, reponse: String): void
pre:
questionId > 0 && reponse != null
post:
-- Pas de postconditions
context Jouer::definirJoueurGagnant(): Joueur
pre:
-- Pas de préconditions
post:
gagnant != null && partie.getJoueurs().contains(gagnant)
1.1.3. Composant UtilisateursDatabase
Responsabilités du composant
-
Serveur :
-
Stocker et gérer les données relatives aux utilisateurs et aux informations d’authentification.
-
Interfaces fournies
@startuml interface Verifier { + créerUtilisateur(idUtilisateur: String, motDePasse: String): void + modifierMotDePasse(idUtilisateur: String, nouveauMotDePasse: String): void + récupérerInformationsJoueur(idUtilisateur: String): Joueur + supprimerJoueur(idUtilisateur: String): void + vérifierAdministrateur(idUtilisateur: String): Boolean } @enduml
Contraintes sur les opérations :
context Verifier::créerUtilisateur(idUtilisateur: String, motDePasse: String): void
pre:
idUtilisateur.size() > 0 and motDePasse.size() > 0
post:
-- Pas de postconditions
context Verifier::modifierMotDePasse(idUtilisateur: String, nouveauMotDePasse: String): void
pre:
idUtilisateur.size() > 0 and nouveauMotDePasse.size() > 0
post:
-- Pas de postconditions
context Verifier::récupérerInformationsJoueur(idUtilisateur: String): Joueur
pre:
idUtilisateur.size() > 0
post:
-- Pas de postconditions
context Verifier::supprimerJoueur(idUtilisateur: String): void
pre:
idUtilisateur.size() > 0
post:
-- Pas de postconditions
context Verifier::vérifierAdministrateur(idUtilisateur: String): Boolean
pre:
idUtilisateur.size() > 0
post:
-- Pas de postconditions
1.1.4. Composant PartiesDatabase
Responsabilités du composant
-
Serveur :
-
Stocker et gérer les données relatives aux parties du jeu, les joueurs présents et leurs scores.
-
Créer de nouvelles parties, les modifier et les supprimer.
-
Interfaces fournies
@startuml interface Manager { + créerPartie(idPartie: String): Boolean + supprimerPartie(idPartie: String): Boolean + récupérerJoueursPartie(idPartie: int): List<Joueur> + récupérerPartie(idPartie: String): Partie + modifierPartie(idPartie: String) } @enduml
Contraintes sur les opérations :
context Manager::créerPartie(idPartie: String): Boolean
pre:
idPartie.size() > 0
post:
-- Pas de postconditions
context Manager::supprimerPartie(idPartie: String): Boolean
pre:
idPartie.size() > 0
post:
-- Pas de postconditions
context Manager::récupérerJoueursPartie(idPartie: int): List<Joueur>
pre:
idPartie > 0
post:
-- Pas de postconditions
context Manager::récupérerPartie(idPartie: String): Partie
pre:
idPartie.size() > 0
post:
-- Pas de postconditions
context Manager::modifierPartie(idPartie: String)
pre:
idPartie.size() > 0
post:
-- Pas de postconditions
1.2. Interactions
@startuml actor Utilisateur as U participant "Lobby" as L database "UtilisateursDatabase" as UDB U -> L: seConnecter(String identifiant, String mdp) activate L L -> UDB: validerIdentifiants(String identifiant, String mdp) activate UDB UDB --> L: Identifiants validés deactivate UDB L -> U: Connexion réussie deactivate L U -> L: seDeconnecter(String identifiant) activate L L -> UDB: déconnecterUtilisateur() activate UDB UDB --> L: Utilisateur déconnecté deactivate UDB L -> U: Déconnexion réussie deactivate L @enduml
@startuml actor Administrateur as A participant "Lobby" as L database "UtilisateursDatabase" as UDB A -> L: supprimerPartie(String nomPartie) activate L L -> UDB: vérifierAdministrateur(String identifiant) activate UDB UDB --> L: Administrateur validé deactivate UDB L -> UDB: supprimerPartie(String nomPartie) activate UDB UDB --> L: Partie supprimée deactivate UDB L -> A: Confirmation de suppression de la partie deactivate L A -> L: gérerUtilisateur(String idUtilisateur, String action) activate L L -> UDB: vérifierAdministrateur(string identifiant) activate UDB UDB --> L: Administrateur validé deactivate UDB L -> UDB: effectuerActionSurUtilisateur(String idUtilisateur, String action) activate UDB UDB --> L: Action réalisée sur l'utilisateur deactivate UDB L -> A: Confirmation de l'action sur l'utilisateur deactivate L @enduml
@startuml actor Joueur as J participant "Partie" as P database "Parties Database" as PDB database "QuestionsDatabase" as QDB J -> P: avancer() activate P P -> PDB: déplacerJoueur(String identifiant) activate PDB PDB --> P: Position mise à jour deactivate PDB P -> J: Confirmation de l'avancement deactivate P J -> P: répondreQuestion(int questionId, String réponseUtilisateur) activate P P -> QDB: récupérerRéponse(int questionId, String réponseUtilisateur) activate QDB QDB --> P: Réponse deactivate QDB P -> J: Résultat : réponseUtilisateur == réponse deactivate P @enduml