@startuml Geometry Dash - Diagramme de cas d'utilisation

left to right direction

actor Joueur as Joueur

rectangle "Menu principal" {
  usecase "Accéder à la sélection des niveaux" as SelectionNiveau
  usecase "Accéder à l'éditeur de niveau" as EditeurNiveau
  usecase "Importer un niveau" as ImporterNiveau
  usecase "Quitter le jeu" as QuitterJeu
}

rectangle "Sélection des niveaux" {
  usecase "Parcourir les niveaux disponibles (passer au niveau suivant ou précédent)" as ParcourirNiveaux
  usecase "Afficher les statistiques d'un niveau (nombre d'essais, nombre de sauts et progression record)" as AfficherDetailsNiveau
  usecase "Commencer un niveau" as CommencerNiveau
}

rectangle "Pendant un niveau" {
  usecase "Appuyer sur la barre d'espace" as Sauter
  usecase "Voir la progression dans le niveau" as VoirProgression
  usecase "Mettre le jeu en pause" as MettrePause
}

rectangle "Menu Pause" {
  usecase "Continuer" as Continuer
  usecase "Revenir au menu principal" as RevenirMenuPrincipal
  usecase "Régler le volume de la musique" as ReglerVolumeMusique
  usecase "Voir le nombre d'essais, nombre de sauts et progression record" as StatistiquesNiveau
}

rectangle "Création de niveaux" {
  usecase "Créer un nouveau niveau" as CreerNouveauNiveau
  usecase "Modifier un niveau existante" as ModifierNiveau
  usecase "Tester un niveau" as TesterNiveau
  usecase "Exporter un niveau" as ExporterNiveau
}

Joueur --> SelectionNiveau : <<extends>>
Joueur --> EditeurNiveau : <<extends>>
Joueur --> ImporterNiveau : <<extends>>
Joueur --> QuitterJeu : <<extends>>

SelectionNiveau --> AfficherDetailsNiveau : <<include>>
SelectionNiveau --> ParcourirNiveaux : <<extends>>
SelectionNiveau --> CommencerNiveau : <<extends>>

CommencerNiveau --> Sauter : <<extends>>
CommencerNiveau --> VoirProgression : <<include>>
CommencerNiveau --> MettrePause : <<extends>>

MettrePause --> Continuer : <<extends>>
MettrePause --> RevenirMenuPrincipal : <<extends>>
MettrePause --> ReglerVolumeMusique : <<extends>>
MettrePause --> StatistiquesNiveau : <<include>>

EditeurNiveau --> CreerNouveauNiveau : <<extends>>
EditeurNiveau --> ModifierNiveau : <<extends>>

CreerNouveauNiveau --> TesterNiveau  : <<extends>>
ModifierNiveau --> TesterNiveau : <<extends>>

CreerNouveauNiveau --> ExporterNiveau  : <<extends>>
ModifierNiveau --> ExporterNiveau  : <<extends>>

@enduml
