Nantes Université

Skip to content
Extraits de code Groupes Projets
Valider 668daabb rédigé par Gerson Sunyé's avatar Gerson Sunyé
Parcourir les fichiers

Correct UC presentation

parent f30bc765
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Pipeline #77124 réussi
Affichage de avec 75 ajouts et 1154 suppressions
site:
title: Projet Trivial Pursuite - Développement
title: Projet Trivial Pursuit - Développement
url: https://naomod.univ-nantes.io/sd/slides/
start_page: trivial-doc::index.adoc
asciidoc:
......
site:
title: Projet Trivial Pursuite - Développement
title: Projet Trivial Pursuit - Développement
url: https://naomod.univ-nantes.io/sd/slides/
start_page: trivial-doc::index.adoc
asciidoc:
......
......@@ -4,7 +4,6 @@
= Spécification des exigences
== Introduction
Ce chapitre décrit les exigences du projet «{project}». Il suit la norme ISO/IEC/IEEE https://ieeexplore.ieee.org/document/8559686[29148-2018].
......@@ -246,14 +245,21 @@ une base de données par le biais de l'API Java Persistence (JPA).
[id="freq-{freq}"]
=== Fonctionnalité «{nbsp}Joindre une partie{nbsp}»
==== Description et priorité
Id:: FR-{freq}
Description:: Cette fonctionnalité permet à un joueur de se connecter au serveur de jeu, pour ensuite participer à une partie.
[cols="30s,70n",options="header", frame=sides]
|===
Priorité:: Haute
| Id
| FR-{freq}
| Description
| Cette fonctionnalité permet à un joueur de se connecter au serveur de jeu, pour ensuite participer à une partie.
|Priorité
| Haute
|===
==== Description sous la forme d'un cas d'utilisation
......@@ -266,15 +272,26 @@ include::partial$req-joindre-partie.adoc[]
==== Description et priorité
Id:: FR-{freq}
Description:: Permet à un joueur de se connecter au Système, choisir une partie et commencer à jouer.
[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
|===
Priorité:: Haute
==== Description sous la forme d'un cas d'utilisation
.Cas d'utilisation «{nbsp}Rejoindre une partie{nbsp}»
==== Description sous la forme d'un cas d'utilisation
--
include::partial$req-joindre-partie.adoc[]
--
:freq: {counter:freq}
[id="freq-{freq}"]
......@@ -282,13 +299,22 @@ include::partial$req-joindre-partie.adoc[]
==== Description et priorité
Id:: FR-{freq}
Description:: Permet à un joueur déjà connecté au Système et affecté à une partie, de jouer à cette partie.
Priorité:: Moyenne
[cols="30s,70n",options="header", frame=sides]
|===
| Id
| FR-{freq}
| Description
| Permet à un joueur déjà connecté au Système et affecté à une partie, de jouer à cette partie.
|Priorité
| Moyenne
|===
==== Description sous la forme d'un cas d'utilisation
.Cas d'utilisation «{nbsp}Jouer un tour{nbsp}»
include::partial$req-jouer-tour.adoc[]
:freq: {counter:freq}
......@@ -297,7 +323,13 @@ include::partial$req-jouer-tour.adoc[]
==== Description et priorité
Id:: FR-{freq}
[cols="30s,70n",options="header", frame=sides]
|===
| Id
| FR-{freq}
|===
==== Description sous la forme d'un cas d'utilisation
......
[sidebar, title="Créer un compte"]
--
[cols="30s,70n",options="header", frame=sides]
|===
| Item | Description
......@@ -91,9 +92,4 @@ Aucun
|
|===
--
\ No newline at end of file
[cols="30s,70n",options="header", frame=sides, id="uc-1"]
[sidebar, title="Cas d'utilisation «{nbsp}Rejoindre une partie{nbsp}»", id="REQ-UC-1"]
--
[cols="30s,70n",options="header", frame=sides, "]
|===
| Item | Description
......@@ -27,7 +28,7 @@
| Condition d'échec
| Le joueur n'arrive pas à joindre une partie
| Acteurs principaux:
| Acteurs principaux
| Le joueur
| Acteurs secondaires
......@@ -36,7 +37,6 @@
| Événement déclencheur
| Le joueur souhaite jouer une partie
| Priorité
| Haute
......@@ -67,10 +67,9 @@ a|
a|
* <<identification, [2a]>> Le joueur n'a pas d'identifiant.
Créer un nouveau compte (Cas d'utilisation 11)
* <<identification, [2b]>> Le joueur a oublié sont mot de passe.
* <<identification, [2b]>> Le joueur a oublié son mot de passe.
Réinitialiser mot de passe (Cas d'utilisation 12)
| Alternatives
a|
......@@ -99,9 +98,4 @@ a|
|
|===
--
\ No newline at end of file
[sidebar, title="Cas d'utilisation «{nbsp}Jouer un tour{nbsp}»"]
--
[cols="30s,70n",options="header", frame=sides]
|===
| Item | Description
......@@ -91,4 +93,5 @@ a|
a|
* Que faire si un des joueurs abandonne une partie en cours{nbsp}?
|===
\ No newline at end of file
|===
--
\ No newline at end of file
[sidebar, title="Réinitialiser mot de passe"]
--
[cols="30s,70n",options="header", frame=sides]
|===
| Item | Description
......@@ -31,7 +32,7 @@
| _à compléter_
| Acteurs secondaires
| _à compléter_
| _à compléter_
| Événement déclencheur
| _à compléter_
......@@ -57,13 +58,10 @@ a|
| Scénario nominal
a|
. _à compléter_
. _à compléter_
. _à compléter_
. _à compléter_
. _à compléter_
. _à compléter_
. Le joueur demande au Système la réinitialisation de son mot de passe
. Le joueur saisi son identifiant
. Le Système envoie une URL unique au joueur
. Le joueur ouvre l'URL et saisi son nouveau mot de passe
| Extensions
a|
......@@ -72,18 +70,15 @@ a|
| Alternatives
a|
. _à compléter_
. _à compléter_
* Alternative à 3{nbsp}: Le joueur n'est pas inscrit, le Système ne fait rien.
| Cas d'utilisation supérieur
| _à compléter_
| Joindre une partie (<<uc-1,UC-1>>, <<uc-1>>)
| Cas d'utilisation subordonnés
| _à compléter_
// _optional, depending on tools, links to sub.use cases_
| Aucun
| Objectif de performance
| _à compléter_
| _à compléter_
| Problèmes ouverts
a|
......@@ -91,7 +86,7 @@ a|
- _à compléter_
| Échéancier
| _à compléter_
| Version 1.1
| Contraintes
| _à compléter_
......@@ -100,9 +95,4 @@ a|
| _à compléter_
|===
--
\ No newline at end of file
== Use Case Initialisation
Use Case Template. Copyright (c) 2004-2005 TechnoSolutions Corporation
*Use Case:* Initialisation
*Id*: UC- 2
*Description* Initialisation et mise en place d'une partie de RISK
*Level:* User Goal
*Primary Actor* Jeu
*Supporting Actors* Joueurs
*Stakeholders and Interests* Pioche Défausse Carte Territoire Continent
*Pre-Conditions*
Au moins 3 joueurs sont présents.
*Post Conditions*
[.underline]#Success end condition#
Le jeu a été correctement mis en place selon les règles de RISK. Chaque territoire est en possession d'un joueur. Chaque territoire supporte une ou plusieurs armées du joueur possédant ce territoire. La pioche est remplie avec toutes les cartes du jeu dans un ordre aléatoire.
[.underline]#Failure end condition#:
Un des joueurs ne place pas une de ses armées lorsque c'est à son tour de le faire. Il bloque l'initialisation.
[.underline]#Minimal Guarantee#
La partie ne peut pas continuer tant que le jeu n'a pas été correctement initialisé.
*Trigger*
Les joueurs sont prêts à jouer.
=== Main Success Scenario
[arabic]
. On distribue à chaque joueur des unités d'armé selon le nombre de joueurs total. 35 unités pour 3 joueurs, 30 pour 4, 25 pour 5 et 20 pour 6.
. L'ordre de jeu des joueurs à l'initialisation et lors des tours qui suivront est déterminé aléatoirement avec un lancé de dé 6. Chaque joueur lance le dé et le joueur ayant le plus grand chiffre commence. Les joueurs jouent ensuite dans le sens des aiguille d'une montre après le premier joueur *Extension 1*.
. Les joueurs posent tour à tour une de leur unité d'armé sur les territoires non occupés par un autre joueur, avec obligation de placer sur un territorie innocupé si possible. *Extension 2*.
. Répéter 3. tant qu'il reste des armées aux joueurs.
. On mélange toutes les cartes du jeu et les met dans la pioche.
=== Extensions
{empty}1. Si il y a une égalité entre les premiers, ces joueurs rejouent jusqu'à ce qu'il y ai un gagnant.
{empty}2. Si le territoire était innocupé par une armée, le joueur qui y pose l'armée se l'approprie.
*Frequency:* Une seule fois
== Use Case Template
=== Revision History +
[cols=",,",options="header",]
|===
|Date |Author |Description of change
|30/12/2019 | Kowalski, Lebouis, | Report en asciidoc des cas d'utilisation fait sur papier
|===
*Use Case:* Connection joueur
*Id*: UC-1
*Description*
Un joueur se connecte au site, il entre son pseudo et indique qu'il est près à jouer.
*Level:* High Level Summary
*Primary Actor*
Joueur courant
*Supporting Actors*
Serveur
*Stakeholders and Interests*
Autres joueurs
*Pre-Conditions*
Il y a moins de 6 joueurs déjà connecté au site +
Pour jouer il faut avoir entré un pseudo
*Post Conditions*
[.underline]#Success end condition#
Le serveur a reçu le message de
[.underline]#Failure end condition#:
Il y a déjà trop de joueurs connectés +
La partie a déjà commencé
[.underline]#Minimal Guarantee#
Seul un joueur ayant validé peu accéder au jeu
*Trigger*
Connection du joueur
=== Main Success Scenario
[arabic]
. Connection du joueur
. Le joueur entre un pseudo
. Le joueur indique qu'il est près à joueur
=== Extensions
3a. Dans l'étape 3, s'il y a déjà 6 joueurs de connectés ou si la partie est déjà en cour
{empty}1. On refuse sa demande
=== Variations
2’. Etape 2, le pseudo de l'utilisateur peut varier
*Frequency:* 2 à 6 par partie
*Assumptions*
---
*Use Case:* Initialisation plateau
*Id*: UC-2
*Description*
Lorsque tous les joueurs sont près, on initialise le plateau
*Level:* High Level Summary
*Primary Actor*
Serveur
*Supporting Actors*
*Stakeholders and Interests*
Joueurs
*Pre-Conditions*
Entre 2 et 6 joueur ont entré un pseudo et validé
*Post Conditions*
[.underline]#Success end condition#
Le plateau est initialisé, les joueurs ont reçu le plateau ainsi que leurs pays et leur mission
[.underline]#Failure end condition#:
[.underline]#Minimal Guarantee#
*Trigger*
Validation de tous les joueurs connectés
=== Main Success Scenario
[arabic]
. Création du plateau
. Création des missions
. Attribution d'une mission à chaque joueur
. Création des cartes territoire
. Attributions des pays de départ à chaque joueur
. Ajout des cartes joker à la pioche
. Attribution des régiments de départ à chaque joueur
=== Extensions
=== Variations
3’. l'attribution des mission se fait de manière aléatoire
5’. l'attribution des territoire se fait de manière aléatoire
*Frequency:* 1 par partie
*Assumptions*
---
*Use Case:* Placement Initial
*Id*: UC-3
*Description*
Chaque joueur pose ses regiments sur ses pays avant le début de la partie
*Level:* High Level Summary
*Primary Actor*
Joueurs
*Supporting Actors*
Serveur
*Stakeholders and Interests*
*Pre-Conditions*
Le joueur a reçu la demande de placer ses régiments ainsi que les régiments à placer
*Post Conditions*
[.underline]#Success end condition#
Tous les joueurs ont placé tous leurs régiments
[.underline]#Failure end condition#:
Un joueur a voulu placer plus de régiments qu'il ne le pouvait, ou bien sur un territoire qu'il ne possédait pas.
[.underline]#Minimal Guarantee#
*Trigger*
Envoie d'une demande de placement initial
=== Main Success Scenario
[arabic]
. Choisir un pays
. Choisir un nombre d'unités à placer
. Envoyer le placement
=== Extensions
1a. A l'étape 1, si le pays n'appartient pas au joueur
{empty}1. On reste à l'étape 1
2a. A l'étape 2, si le joueur n'a pas assez de regiments
{empty}1. On reste à l'étape 2
3a. Après l'étape 3, s'il ne reste plus de régiments au joueur
{empty}1. On indique au serveur que l'on a terminé
3b. Sinon
{empty}1. retour à l'étape 1
=== Variations
1’. Le pays choisit peu changer
5’. Le nombre d'unités à placer peu changer
*Frequency:* 1 par partie
*Assumptions*
---
*Use Case:* Combo
*Id*: UC-4
*Description*
Le joueur entrain de jouer fait un combo
*Level:* Summary
*Primary Actor*
Joueur courant
*Supporting Actors*
Serveur
*Stakeholders and Interests*
*Pre-Conditions*
Le joueur a reçu la demande de faire un combo, et s'il le peu il envoie des cartes au serveur, trois par trois, pour fair des combos
*Post Conditions*
[.underline]#Success end condition#
Le joueur recevra des unités en plus correspondant au combo qu'il a fait
[.underline]#Failure end condition#:
Les cartes proposé ne permet aucun combo possible
Si le joueur a 5 cartes ou plus il est obligé de faire un combo jusqu'à redescendre en dessous de ce nombre
[.underline]#Minimal Guarantee#
*Trigger*
Envoie d'une demande de combo
=== Main Success Scenario
[arabic]
. Choisir la première carte
. Choisir la deuxième carte
. Choisir la troisième carte
. Envoyer les cartes au serveur
=== Extensions
1a. Si le joueur ne veut pas effectuer de combo et n'y est pas forcé
{empty}1. On indique au serveur que l'on a fini de faire des combos
3a. Après l'étape 3, s'il ne reste plus assez de cartes pour faire un combo
{empty}1. On indique au serveur que l'on a terminé
3b. Sinon
{empty}1. retour à l'étape 1
=== Variations
1’. La carte peu changer
2’. La carte peu changer
3’. La carte peu changer
*Frequency:* 1 par tour de jeu
*Assumptions*
---
*Use Case:* Placement regiment
*Id*: UC-5
*Description*
Le joueur entrain de jouer place les régiments de début de tour
*Level:* Summary
*Primary Actor*
Joueur courant
*Supporting Actors*
Serveur
*Stakeholders and Interests*
*Pre-Conditions*
Le joueur a reçu la demande de faire des placements, et tant qu'il lui reste des régiments, il fait des placements de ces régiments sur les pays et les envoi au serveur
*Post Conditions*
[.underline]#Success end condition#
Le joueur n'a plus de régiments à placer
[.underline]#Failure end condition#:
Le pays sélectionné n'est pas au joueur
Le joueur ne peux pas placer autant d'unités
[.underline]#Minimal Guarantee#
*Trigger*
Envoie d'une demande de placement
=== Main Success Scenario
[arabic]
. Selection du pays de destination
. Précision du nombre d'unités à placer
. Envoie du placement
=== Extensions
1a. Si le pays choisit n'appartient pas au joueur
{empty}1. rester à l'étape 1
3a. Après l'étape 3, s'il ne reste plus d'unités
{empty}1. On indique au serveur que l'on a terminé
3b. Sinon
{empty}1. retour à l'étape 1
=== Variations
1’. Le pays peu changer
2’. Le nombre d'unités à placer peu changer
*Frequency:* 1 par tour de jeu
*Assumptions*
---
*Use Case:* Attaque
*Id*: UC-6
*Description*
Le joueur entrain de jouer effectue des attaques
*Level:* Summary
*Primary Actor*
Joueur courant
Joueur défenseur
*Supporting Actors*
Serveur
*Stakeholders and Interests*
*Pre-Conditions*
Le joueur a reçu la demande de faire des attaques, et tant qu'il en a la possibilité, il peu faire des attaques, +
soit sélectionné un pays attaquant, un pays attaqué, et le nombre d'unités allant effectuer l'attaque. +
Le joueur défenseur indique le nombre de défenseurs sur son pays.
Le serveur effectue l'attaque en lançant les dés et en modifiant les pays en fonction du résultat de l'attaque.
*Post Conditions*
[.underline]#Success end condition#
Toutes les attaques souhaité du joueur sont faites
[.underline]#Failure end condition#:
Le pays attaquant n'appartient pas au joueur
Le pays attaqué appartient au joueur ou n'est pas un voisin du pays attaquant
Le nombre d'unité attaquant est supérieur ou égale au nombre de troupes sur le pays attaquant
[.underline]#Minimal Guarantee#
*Trigger*
Envoie d'une demande d'attaque
=== Main Success Scenario
[arabic]
. Sélectionner le pays attaquant
. Sélectionner le pays attaquer
. Indiquer le nombre d'attaquant
. Envoyer l'attaque
. Le défenseur indique le nombre de défenseur
. Le serveur effectue l'attaque
=== Extensions
1a. A l'étape 1, si le joueur ne veux pas effectuer d'attaque
{empty}1. On indique au serveur que l'on a terminé
1b. A l'étape 1, si le pays choisit n'appartient pas au joueur
{empty}1. rester à l'étape 1
2a. A l'étape 2, si le pays choisit appartient au joueur ou n'est pas voisin du pays attaquant
{empty}1. rester à l'étape 2
3a. A l'étape 3, si le nombre d'unités attaquant est supérieur ou égale au nombre d'unités du pays
{empty}1. rester à l'étape 5
5a. A l'étape 5, si le nombre d'unités defense est supérieur au nombre d'unités du pays
{empty}1. rester à l'étape 5
5b. Après l'étape 5, si le pays a été conquis
{empty}1. Le joueur indique le nombre d'unités qu'il vaut déplacer dans le pays conquis
{empty}2. Le joueur recevra une unique carte une fois l'attaque terminé
5c. Sinon
{empty}1. retour à l'étape 1.
6a. Après l'étape 5b, si le joueur vaincu a été éliminé de la partie
{empty}1. On met à jour toutes les missions des joueurs et on vérifie s'il y a un gagnant, dans ce cas, la partie s'arrête.
6b. Sinon
{empty}1. retour à l'étape 1.
=== Variations
1’. Le pays peu changer
2’. Le pays peu changer
3’. Le nombre d'unités attaquant peu changer
5’. Le nombre d'unités défenseur peu changer
5b’. Le nombre d'unités de conquête peu changer
*Frequency:* 1 par tour de jeu
*Assumptions*
---
*Use Case:* Replacement
*Id*: UC-7
*Description*
Le joueur entrain de jouer effectue des replacement
*Level:* Summary
*Primary Actor*
Joueur courant
*Supporting Actors*
Serveur
*Stakeholders and Interests*
*Pre-Conditions*
Le joueur a reçu la demande de faire des replacements, il choisit donc un pays de départ et un pays d'arrivée, voisin du premier, ainsi que le nombre d'unité devant passer de l'un à l'autre. +
une même unité ne peu se déplacer que d'un pays maximum
*Post Conditions*
[.underline]#Success end condition#
Tous les replacements souhaité du joueur sont faits
[.underline]#Failure end condition#:
Le pays de départ ou de destination n'appartiennent pas au joueurs
Les deux pays ne sont pas voisins
Le nombre d'unité à déplacer est supérieur à celui du pays de départ qui n'ont pas encore bougées
[.underline]#Minimal Guarantee#
*Trigger*
Envoie d'une demande de replacement
=== Main Success Scenario
[arabic]
. Sélectionner le pays de départ
. Sélectionner le pays d'arrivé
. Indiquer le nombre d'unités à déplacer
=== Extensions
1a. A l'étape 1, si le joueur ne veux pas effectuer d'attaque
{empty}1. On indique au serveur que l'on a terminé
1b. A l'étape 1, si le pays n'appartient pas au joueur
{empty}1. On reste à l'étape 1
2a. A l'étape 1, si le pays n'appartient pas au joueur ou n'est pas voisin du premier
{empty}1. On reste à l'étape 2
3a. A l'étape 1, si ne nombre d'unité à déplacer n'est pas correcte
{empty}1. On reste à l'étape 3
=== Variations
1’. Le pays peu changer
2’. Le pays peu changer
3’. Le nombre d'unités à déplacer peu changer
*Frequency:* 1 par tour de jeu
*Assumptions*
== Use Case Template
Version 1.20
== Use Case 1: Initialisation du jeu
=== Description
De deux à six joueurs se retrouvent pour jouer à Risk.
L’arbitre prépare et distribue les différentes cartes aux joueurs. L’arbitre définit un ordre de jeu pour les joueurs.
==== Niveau
Stratégique
==== Portée
Système
==== Priorité
Haute
==== Échéance
1e version
=== Acteurs principaux
1. Les joueurs
2. L'arbitre
=== Acteurs de soutien
Aucun pour l’instant.
=== Parties prenantes et intérêts
Aucun pour l’instant.
=== Pré-conditions
- L'arbitre et les joueurs peuvent communiquer entre eux.
- Le paquet de cartes est complet et disponible.
- Le nombre de joueurs est défini, entre deux et six.
=== Post-conditions
==== Condition finale de réussite
- Chaque joueur dispose de ses territoires, d'armées placées sur ses territoires et de sa carte de mission.
context User inv:
(self.carteMission) != null and (self.territories)->notEmpty
and self.territories->forAll(t : Territory | t.units >= 1)
- Les cartes territoires-armées forment une pioche prête.
context Pioche inv:
(self.cards)->notEmpty and self.count(cards)=42
==== Condition finale d’échec
- Les joueurs n’ont pas reçu leurs territoires.
context User inv:
(self.territories)->isEmpty
- Les joueurs n’ont pas placé leurs armées.
context User inv:
(self.soldiersAvailable) != 0
- Le joueurs n’ont pas de mission.
context User inv:
self.cardMission = null
- Un territoire est vide.
context Territory inv:
self.units = 0
==== Garanties minimales
- Aucun joueur n'est déconnecté du serveur
- Pas de retour au lobby
=== Événement déclencheur
Les joueurs se retrouvent et souhaitent conquérir le monde.
=== Scénario nominal
1. On définit le nombre de joueur.
2. L'arbitre distribue les cartes pays et des armées à tous les joueurs équitablement.
3. Les joueurs posent une armée sur chacun de leurs pays (attribués par leurs cartes).
4. L'arbitre donne une mission aléatoire à chaque joueur.
5. Les joueurs placent le reste de leurs armées sur leurs territoires qu'ils occupent actuellement.
6. L'arbitre récupère toutes les cartes pays et les mélange pour en former la pioche.
7. Le joueur désigné par l'arbitre commence.
=== Extensions
* Point 1/
** a - Le nombre de joueur est inclus entre 2 et 6.
* Point 2/
** a - Toutes les cartes sont distribuées même si le nombre de cartes n'est pas divisible par le nombre de joueurs. +
** b - Le nombre d'armées possédées par les joueurs dépend du nombre de joueurs total comme suit : +
[cols="5, 2", options="header"]
|===
| Nombre de joueurs
| Nombre d'armées distribuées à chacun
| 2
| 40
| 3
| 35
| 4
| 30
| 5
| 25
| 6
| 20
|===
=== Fréquence
Une partie dure environ 2 heures.
== Hypothèses
Tous les joueurs peuvent communiquer entre eux et avec l'arbitre.
=== Exigences particulières
Aucune
=== Questions ouvertes
1. Comment l’arbitre choisit l’ordre des joueurs?
2. Comment définir le nombre de joueurs avant l'initialisation de la partie ?
== Use Case 2: Tour de jeu
=== Description
Les joueurs jouent leurs tours alternativement, plusieurs fois dans une partie. Pendant ce tour ils peuvent effectuer plusieurs actions : former une combinaison de cartes, attaquer, déplacer des armées.
==== Niveau
Stratégique
==== Portée
Système
==== Priorité
Haute
==== Échéance
1e version
=== Acteurs principaux
1. Les joueurs
2. L’arbitre
=== Acteurs de soutien
Aucun pour l’instant.
=== Parties prenantes et intérêts
Aucun pour l’instant.
=== Pré-conditions
- Aucun tour d'un autre joueur n'est entamé.
- Le paquet de cartes est disponible.
- Le joueur n’est pas éliminé.
- La partie est en cours.
=== Post-conditions
==== Condition finale de réussite
- Le joueur a reçu sa carte territoire-armée s'il a gagné un combat.
Context User inv:
pre: i = self.hand.size
post: implies(self.wonFight)-> self.hand.size == i+1
- Le joueur a terminé son tour.
Context Game inv:
self.step = 5
- Les conditions finales de réussite des combats sont réunies.
cf use case 3
==== Condition finale d’échec
- Le joueur n’a pas reçu sa carte territoire-armée alors qu'il a gagné un combat.
Context User inv:
pre: i = self.hand.size
post: implies(self.wonFight)-> self.hand.size == self.hand.size
- Le joueur n'a que des territoires vides.
Context User inv:
self.territories->forAll(t : Territory | t.units = 0)
- Le joueur a plus de cinq cartes en main.
Context User inv:
self.size(cards) >5
- Le tour du joueur n'est pas terminé.
Context Game inv:
self.step != 5
==== Garanties minimales
- L'ordre des joueurs reste le même
- Deux joueurs ne jouent pas leur tour en même temps
- Le jeu passe au tour du joueur suivant
=== Événement déclencheur
Le joueur précédent termine son tour, ou alors le joueur est le premier à commencer la partie.
=== Scénario nominal
1. Le joueur reçoit ses renforts en relation avec le nombre de territoires conquis par le joueur. S'il le souhaite il peut proposer une combinaison de 3 cartes pour remporter des armées supplémentaires.
2. Le joueur place tous ses renforts sur le plateau parmi ses territoires.
3. Le joueur effectue autant d'attaque qu'il le souhaite [.big]##(Use Case 3)##, il peut ne pas attaquer pendant sont tour également.
4. Si le joueur a gagné au moins un combat, il pioche une seule carte territoire-armée.
5. Le joueur sélectionne chaque paire de territoires (départ et arrivée) avec lesquels il souhaite faire un échange d'unités ainsi que le nombre d'unités qu'il souhaite déplacer (en prenant soin d'en laisser au moins une dans le territoire de départ).
7. Le prochain joueur joue [.big]##(Use Case 2)##.
=== Extensions
* Point 1/
** a - Le nombre de renforts est défini par l'arbitre en fonction de l'état du plateau à ce moment-là. Le nombre de renforts obtenus par le joueur dépend du nombre de territoires (voire continent(s)) possédés par ce même joueur : +
Ce nombre se définit de la façon suivante : pour x territoires possédés par le joueur, celui-ci reçoit n renforts pour x = 3 * n + a, a pouvant valoir 0 (si n est un multiple de 3). +
Si n est inférieur à 3, le joueur recevra tout de même 3 renforts à placer. +
Si le joueur a conquis complètement un ou plusieurs continents, il peut recevoir des renforts supplémentaires comme indiqué dans le premier tableau suivant.
** b - Le joueur peut proposer une combinaison de cartes, avant d'attaquer, pour recevoir des armées supplémentaires comme indiqué dans le deuxième tableau suivant. +
** c - Si le joueur pose une combinaison de cartes parmi celles ci-dessus, il reçoit des armées supplémentaires en rapport avec i, i étant la ième combinaison proposée dans la partie. +
On retrace ce nombre d'armées supplémentaires en fonction de i dans le troisième tableau ci-dessous. +
** d - Si parmi les 3 cartes territoires-armées impliquées dans la combinaison posée par le joueur, il apparaît au moins un territoire occupé par ce même joueur, celui-ci remporte 2 armées supplémentaires par territoire correpondant. +
[cols="5, 2", options="header"]
|===
| Continent
| Nombre de renforts supplémentaires
| Océanie
| 2
| Amérique du Sud
| 2
| Afrique
| 3
| Europe
| 5
| Amérique du Nord
| 5
| Asie
| 7
|===
[cols="5, 2", options="header"]
|===
| Combinaison de cartes possible
| Nombre d'armées supplémentaires
| 3 fantassins
| 3
| 3 cavaliers
| 5
| 3 canons
| 8
| 1 canon, 1 cavalier, 1 fantassin
| 10
|===
[cols="2, 2", options="header"]
|===
| ième combinaison proposée dans la partie
| Nombre d'armées supplémentaires
| 1ère
| 4
| 2ème
| 6
| 3ème
| 8
| 4ème
| 10
| 5ème
| 12
| 6ème
| 15
| 7ème
| 20
| 8ème
| 25
| (i+1)ème
| (nombre d'armées distribuées précédent) + 5
|===
* Point 3/
** a - Une attaque peut être effectuée avec des armées issus de territoires différents uniquement dans le cas où le pays d'origine attaquant ne possède plus qu'une armée et que le joueur possède un autre pays (que celui d'origine) adjacent au pays attaqué. +
** b - Le joueur doit laisser au moins une armée sur chacun de ses territoires attaquants tant qu'il n'a pas perdu ses attaques. +
* Point 4/
** a - Si il n’y a plus de cartes dans la pioche, l’arbitre intervient pour ramasser les cartes mises de côté et les mélange afin d’en faire une nouvelle pioche. +
* Point 5/
** a - Le joueur doit laisser au moins une armée dans chaque territoire qu'il occupe.
=== Fréquence
Un tour dure environ 3 minutes.
== Hypothèses
=== Exigences particulières
Aucune
=== Questions ouvertes
1. Comment l’arbitre sait le nombre de renforts que le joueur doit obtenir ?
2. Comment l’arbitre sait si le joueur a achevé sa mission ?
== Use Case 3: Attaque
=== Description
Le joueur est en train de jouer son tour, il décide d’attaquer un territoire ennemi.
==== Niveau
Stratégique
==== Portée
Système
==== Priorité
Haute
==== Échéance
1e version
=== Acteurs principaux
1. Les joueurs
2. L’arbitre
=== Acteurs de soutien
Aucun pour l’instant.
=== Parties prenantes et intérêts
Aucun pour l’instant.
=== Pré-conditions
- Le joueur a plus d’un fantassin sur son territoire.
- Le territoire attaqué est un territoire ennemi.
- Les territoires sont voisins.
=== Post-conditions
==== Condition finale de réussite
- Un des deux joueurs est gagnant ou le joueur attaquant bat en retraite.
Context User::attack(t1 : territory, t2 territory, units int)
pre:
post: t1.owner.wonWight or t2.owner.wonFight
- Les armées défenseuses sont toutes mortes si l'attaque est gagnée par l'attaquant.
Context User::attack(t1 : territory, t2 territory, units int)
pre: unitst2 = t2.units and soldiersBefore = t2.owner.soldiersOnMap
post: t1.owner.wonFight implies t2.owner.soldiersOnMap == soldiersBefore - unitst2
- Les armées attaquantes sont replacées sur leur case s'il a perdu ou abandonné.
Context User::attack(t1 : territory, t2 territory, units int)
pre:
post: t1.owner.wonWight or t2.owner.wonFight
- Les armées attaquantes sont placées sur la case du défenseur s'il a gagné.
Context User::attack(t1 : territory, t2 territory, units int)
pre:
post: t1.owner.wonFight implies t2.owner == t1.owner
==== Condition finale d’échec
- Aucun joueur n'est désigné gagnant du combat.
Context User::attack(t1 : territory, t2 territory, units int)
pre:
post: not(t1.owner.wonWight) or not(t2.owner.wonFight)
- Il y a des armées de deux joueurs différents sur le même territoire.
Context Territory::attack(t1 : territory, t2 territory, units int)
pre: t1.owner.asList
post: t1.owner.size() == 2
==== Garanties minimales
- Le tour du joueur est toujours en cours.
=== Événement déclencheur
Le joueur souhaite attaquer.
=== Scénario nominal
1. Le joueur choisit le nombre d'armées qui seront impliquées dans l'attaque dans un nombre limité à 3.
2. Le joueur défenseur dont le territoire est attaqué choisit le nombre d'armées qui serviront à défendre le territoire pendant l'attaque dans une limite de 2 armées.
3. L'arbitre effectue autant de jets de dé que d'armées attaquantes.
4. L'arbitre effectue autant de jets de dé que d'armées défenseuses.
5. On compare les meilleurs scores des dés attaquants et défenseurs.
6. L'attaque est terminée et on enlève du plateau les armées tombées pour la patrie.
=== Extensions
* Point 1/
** a - Le joueur doit laisser au moins une armée sur le territoire d'origine de l'attaque.
** b - Il ne peut y avoir qu'un seul territoire d'origine impliqué dans une attaque. Si ce territoire ne possède plus qu'une seule armée, le joueur attaquant peut décider d'attaquer avec un autre territoire d'origine si celui-ci est également adjacent au territoire attaqué.
* Point 5/
** a - On compare le dé le plus fort de l'attaquant au dé le plus fort du défenseur et le deuxième dé (s'il y a) le plus fort de l'attaquant au deuxième dé (s'il y a) du défenseur. Chaque fois que le dé du défenseur est supérieur ou égal à celui de l'attaquant, l'attaquant perd une armée ; dans le cas contraire, c'est le défenseur qui en perd une.
** b - Le combat continue jusqu'à l'élimination d'une des deux forces impliquées dans l'attaque, ou alors jusqu'à ce que que l'attaquant abandonne le combat.
* Point 6/
** a - En cas d'attaque victorieuse, les troupes attaquantes engagées occupent le territoire attaqué, et le joueur attaquant peut déplacer autant de troupes supplémentaires qu'il le désire du territoire attaquant au territoire attaqué, à la condition d'en laisser au moins une sur chacun de ses territoires ; il n'omettra pas de piocher une carte.
=== Fréquence
Le joueur peut effectuer autant d’attaques qu'il le souhaite par tour de jeu.
== Hypothèses
=== Exigences particulières
Aucune
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter