Analyse du domaine

Travail à réaliser

Objectif

Description du jeu Catane sous la forme d’un diagramme de classes conceptuelles et d’actions.

Moyens

Utilisez une approche itérative pour découvrir toutes les classes conceptuelles et les actions du jeu.

Introduction

Modèle du domaine

diagram
Figure 1. Diagramme de classes

Cas d’utilisation

Cas d’utilisation "Création lobby"

Item Description

#

1

Cas d’utilisation

Création du lobby

Alias

LobbyCreation

Objectif contextuel

Un joueur hôte créé un lobby depuis le menu afin que les autres joueurs puissent le rejoindre par la suite.

Portée

Niveau

Primary task

Condition de succès

Le lobby est créé, l’hôte est ajouté à ce lobby et l’id du lobby est présenté à l’hôte

Condition d’échec

Échec de la création, code d’erreur

Acteurs principaux

Lobby manager, lobby, joueur hôte

Acteurs secondaires

Événement déclencheur

Demande de création de lobby par l’hôte

Priorité

High

Fréquence

une fois par partie

Pré-conditions

  • Informations sur le joueur

Post-conditions

  • Le joueur n’est pas connecté dans un autre lobby

Scénario nominal

  1. L’hôte demande la création du lobby

  2. Le lobby est généré

  3. L’hôte est ajouté au lobby créé

  4. L’hôte recoit l’id du lobby

Extensions

Alternatives

Cas d’utilisation supérieur

LobbyManager

Cas d’utilisation subordonnés

GameManagement

Objectif de performance

< 500ms temps de requête, < 2sec temps de connexion

Problèmes ouverts

  • Que se passe-t-il si le lobby crash ?

  • Que se passe t-il si l’hôte se déconnecte du lobby ?

Échéancier

1.0

Contraintes

Annexes

diagram

Cas d’utilisation "Connexion lobby"

Item Description

#

2

Cas d’utilisation

Inscription (et connexion) d’un joueur à un lobby

Alias

LobbyConnection

Objectif contextuel

Un joueur se connecte à un lobby disponible après s’y être inscrit

Portée

Niveau

Primary task

Condition de succès

Connexion réussie, websocket initiée

Condition d’échec

Échec de la connexion, code d’erreur

Acteurs principaux

Lobby manager, lobby, joueur

Acteurs secondaires

Événement déclencheur

Requête de connexion du joueur à un lobby

Priorité

High

Fréquence

nbDeJoueurs/Jour

Pré-conditions

  • Informations sur le lobby

  • Informations sur le joueur

Post-conditions

  • Lobby toujours actif

  • Le lobby n’a pas commencé la partie

  • Le joueur est connecté au lobby

Scénario nominal

  1. Un joueur trouve un lobby

  2. Le jouer envoie une requête d’inscription à un lobby

  3. La requête est acceptée, il reçoit son token

  4. Les infos du player sont transmises au le lobby

  5. Le joueur se connecte

  6. Le websocket entre le joueur et le lobby est initié

Extensions

  1. Il peut y avoir plusieurs lobbys

  2. Le lobby peut être plein le temps de traitement de la requête

  3. La partie peut avoir démarrée le temps de la requête

Alternatives

Cas d’utilisation supérieur

LobbyManager

Cas d’utilisation subordonnés

GameManagement

Objectif de performance

< 500ms temps de requête, < 2sec temps de connexion

Problèmes ouverts

  • Que se passe-t-il si le lobby crash ?

  • Que se passe-t-il si le lobby ne répond pas ?

Échéancier

1.0

Contraintes

Annexes

diagram

Cas d’utilisation "Préparation partie"

Item Description

#

3

Cas d’utilisation

Création des éléments nécessaires au lancement de la partie

Alias

Préparation (de la partie)

Objectif contextuel

Générer le Plateau de jeu, avec ses différents Terrain et Emplacement ainsi que les 3 à 4 Joueur, les Colonie, les Ville, les Route et les Carte du jeu.

Portée

La Game

Niveau

Primary Task

Condition de succès

Ensemble des éléments générés

Condition d’échec

Un ou plusieurs éléments non générés

Acteurs principaux:

La Game

Acteurs secondaires

Les joueurs

Événement déclencheur

Lancement de la partie par l’hote

Priorité

élevé

Fréquence

Une fois par partie

Pré-conditions

  • Avoir 3 ou 4 joueurs dans le lobby

  • Avoir lancé la partie

Post-conditions

  • Avoir tous les éléments du jeu générés

Scénario nominal

  1. Génération du Plateau de jeu

  2. Génération des différents Terrain et Emplacement sur le plateau

  3. Génération des Joueur

  4. Génération des Colonie, des Ville et des Route

  5. Attribution des colonies, villes et routes aux joueurs

  6. Génération des Carte

Extensions

Alternatives

Peut importe l’ordre des événements du moment que les terrains soient générés après le plateau et que l’attribution des colonies, villes et routes se fasse après la création des joueurs

Cas d’utilisation supérieur

Mise en place de la Game

Cas d’utilisation subordonnés

Objectif de performance

Lancement <5sec

Problèmes ouverts

Échéancier

1.0

Contraintes

Annexes

diagram

Cas d’utilisation "Mise en place"

Item Description

#

4

Cas d’utilisation

Première phase de la partie

Alias

Mise en place (de la partie)

Objectif contextuel

Les Joueur placent 2 de leurs Colonie et 2 de leurs Route sur un Emplacement libre du plateau et recoivent les ressources correspondantes aux Terrain avoisinants leurs Colonie

Portée

la Game

Niveau

Summary

Condition de succès

A la fin de cette phase tous les joueurs ont 2 colonies et 2 routes placés sur le plateau et les ressources correspondantes

Condition d’échec

Une des conditions de succès non validée

Acteurs principaux:

Les joueurs

Acteurs secondaires

Aucun

Événement déclencheur

Fin de l’Initialisation

Priorité

élevé

Fréquence

Une fois par partie

Pré-conditions

  • Avoir une partie initialisée avec succès

Post-conditions

  • Chaque joueur a 2 colonies placées sur le plateau

  • Chaque joueur a 2 routes placées sur le plateau

  • Chaque joueur a reçu ses ressources

Scénario nominal

  1. Le premier Joueur place ses 2 Colonie puis 2 de ses Route sur des Emplacement libres du plateau

  2. Même chose pour le second, le troisième et enfin le quatrième Joueur (si il y en a un).

  3. Les Joueur recoivent les ressources correspondantes aux Terrain avoisinats leurs Colonie

Extensions

Alternatives

Cas d’utilisation supérieur

LobbyManager

Cas d’utilisation subordonnés

LobbyConnection

Objectif de performance

Lancement <5sec

Problèmes ouverts

  • Que se passe-t-il si un joueur se déconnecte pendant le lancement ?

  • Que se passe-t-il en cas de crash serveur ?

Échéancier

1.0

Contraintes

Annexes

diagram

Cas d’utilisation "Déroulement tour"

Item Description

#

5

Cas d’utilisation

Déroulement d’un tour

Alias

Tour de jeu

Objectif contextuel

Réalisé dans un ordre précis les différentes Action durant le tour de jeu du joueur. Quand le tour ce termine, on vérifie les points de victoire du joueur actif et s’il n’a pas 10 points de victoire on poursuit la partie avec le joueur suivant de l’ordre définit initialement.

Portée

La partie

Niveau

Primary Task

Condition de succès

Ensemble des éléments générés

Condition d’échec

Erreurs

Acteurs principaux:

Joueur

Acteurs secondaires

Autres joueurs en cas d’échange

Événement déclencheur

Fin de la mise en place si c’est le premier tour ou fin du tour précédent

Priorité

élevé

Fréquence

Autant de fois que nécessaire par partie

Pré-conditions

  • Avoir 3 ou 4 joueurs dans le lobby

  • Avoir lancé la partie

Post-conditions

  • Mise à jour des ressources des joueurs

Scénario nominal

  1. Voir diagramme d’activité correspondant

Extensions

Alternatives

Cas d’utilisation supérieur

Cas d’utilisation subordonnés

Objectif de performance

Temps de requête <500 ms pour rendre les interactions fluides entre le jeu et les joueurs

Problèmes ouverts

Échéancier

1.0

Contraintes

Annexes

diagram

Cas d’utilisation "Partie complète"

Ce cas d’utilisation réuni les différents cas présentés précédement pour obtenir le déroulement d’un partie dans son intégralité. Les étapes représentant les cas d’utilisation précédants sont indiqués en bleu dans le diagramme d’activité.

diagram

Activités

Les activités ont lieu lors du tour d’un joueur X.

X poursuit son tour à la fin de chaque activité hors terminerTour().

lancerDes()

X lance les 2 dés.

On appelera D la somme des valeurs obtenues.

Si D ≠ 7 alors : - les joueurs ayant une colonie/ville avoisinant un terrain dont le jeton vaut D recoivent les ressources du terrain (1 ressource par colonie, 2 par ville) (recevoirRessources()).

Si D = 7 alors : - personne ne gagne de ressources durant ce tour. - tous les joueurs possédant plus de 7 cartes Ressource doivent défausser la moitié de leurs cartes (defausserRessources()), au choix. En cas d’un nombre impair de cartes, on arrondit en faveur du joueur (par exemple, celui qui possède 9 cartes doit en remettre 4 dans la pile). - X déplace le pion Voleurs (deplacerVoleurs()). - X vole au hasard une ressource à un adversaire qui possède une colonie/ville autour du terrain sur lequel se trouve le pion Voleurs (volerRessource()).

deplacerVoleurs()

X déplace le pion Voleurs sur un autre terrain.

volerRessource(Terrain t)

X vole une ressource aléatoire à un adversaire possédant une colonie/ville adjacente au terrain donné.

echangeJoueur(Joueur Y, ? typeRessource, ? typeRessource)

X propose un échange de ressources avec un autre joueur Y. Y peut accepter l’échange (accepterEchange()), le refuser (refuserEchange()) ou bien faire une contre-proposition en demandant un autre type de ressource (contreProposer()).

accepterEchange()

Y accepte l’échange.

refuserEchange()

Y refuse l’échange.

contreProposer(? typeRessource)

Y propose un autre type de ressource. X peut accepter ou refuser cet échange.

echangeBanque(? typeRessource, ? typeRessource)

X effectue un échange avec la banque. Il peut toujours échanger au rapport 4 :1, c’est à dire remettre 4 ressources identiques dans la réserve et prendre une ressource de son choix. Si le joueur dispose d’une colonie avec un port, il peut réaliser un échange plus intéressant. Pour un port de rapport 3 :1, le joueur donne 3 ressources identiques et prend en échange 1 ressource de son choix ; un port spécialisé permet même d’échanger 2 ressources indiquées contre une ressource de son choix.

construireColonie(EmplacementConstruction ec)

X échange les ressources nécessaires pour placer une colonie à un EmplacementConstruction libre.

construireColonieGratuitement(EmplacementConstruction ec)

X place une colonie à un emplacement libre. Cette méthode est appelée lors de la mise en place de la partie.

ameliorerColonieEnVille(Colonie c)

X échange les ressources nécessaires pour placer une ville à la place de la colonie (lui appartenant) donnée en paramêtre.

construireRoute(Emplacement ec)

X échange les ressources nécessaires pour placer une route à un EmplacementRoute libre.

construireRouteGratuitement(EmplacementConstruction ec)

X place une route à un EmplacementRoute libre. Cette méthode est appelée lors de la mise en place de la partie et peut aussi être appelée si le joueur joue une CarteProgres.

acheterCarte()

X échange les ressources nécessaires pour acheter une carte développement aléatoire parmi les cartes restantes.

jouerCarte(Carte c)

X joue une carte développement.

terminerTour()

X termine son tour. Si aucun joueur n’a 10 points de victoire la partie continue. On passe au tour du joueur suivant.

Opérations