idées pour .features Mastermind

17 vues
Accéder directement au premier message non lu

Bruno Orsier

non lue,
24 avr. 2012, 11:07:1424/04/2012
à CARA Coding Dojo
Salut à tous, comme promis voici un essai que j'avais fait avec des
collègues pour décrire le comportement du jeu de mastermind. Nous
avions 3 fichiers .feature, et plus une série de tests unitaires pour
vérifier la fonction d'évaluation proprement dite (basé sur le Kata
Mastermind d'Emmanuel Gaillot).

Bruno

Feature: Debut du jeu
Afin de pouvoir debuter le jeu
En tant que joueur
Je veux choisir les options du jeu

Scenario: demarrage avec options par defaut
Given le joueur demarre un nouveau jeu
Then le plateau de jeu affiche le niveau 3
And le plateau de jeu affiche le nombre total de joueurs 1
And le plateau de jeu affiche le nom de joueur Joueur1
And le plateau de jeu affiche le nombre de tentatives restantes 5
And le plateau de jeu affiche les couleurs disponibles RBV

Scenario Outline: Choix d'une option
Given le joueur demarre un nouveau jeu
When le joueur choisit un niveau <niveau> entre 1 et 5
Then le plateau de jeu affiche le niveau <niveau>
And le plateau de jeu affiche le nombre de tentatives restantes
<tentatives max>
And le plateau de jeu affiche les couleurs disponibles <Couleurs
disponibles>

Examples:
| niveau | taille secret | Couleurs disponibles | tentatives max |
| 1 | 2 | RB | 3 |
| 2 | 3 | RB | 5 |
| 3 | 3 | RBV | 5 |
| 4 | 4 | RBV | 5 |
| 5 | 4 | RBVJ | 6 |


Feature: Deroulement du jeu
Afin de pouvoir jouer
En tant que joueur
Je veux proposer des combinaisons et
voir les nombres de couleurs bien placees et mal placees

Scenario: Premiere proposition
Given un plateau de jeu initialise avec le secret RVVJ et le niveau 5
And le nombre de tentatives restantes est 6
When le joueur propose BBBB
Then le nombre de bien places est de 0
And le nombre de mal places est de 0
And le nombre de tentatives restantes est 5

@ignore
Scenario: Proposition suivante
Given le nombre de tentatives restantes est 5
And un plateau de jeu qui masque le secret RBVJ
And un plateau de jeu qui affiche le niveau 5
When le joueur compose les couleurs RBVJ
Then le plateau de jeu affiche le nombre de bien places 4
And le plateau de jeu affiche le nombre de mal places 0
And le plateau de jeu affiche le nombre de tentatives restantes 4

Feature: Fin du jeu
Afin de pouvoir terminer le jeu
En tant que joueur
Je veux savoir si j'ai gagné ou perdu

@ignore
Scenario: jeu gagnant
Given un plateau de jeu qui masque le secret RRV
And un plateau de jeu qui affiche le niveau 3
And un nombre de tentatives precedentes de 1
When le joueur compose les couleurs RRV
Then le plateau de jeu affiche gagne

@ignore
Scenario: jeu perdant
Given un plateau de jeu qui masque le secret RRV
And un plateau de jeu qui affiche le niveau 3
And un nombre de tentatives precedentes de 4
When le joueur compose les couleurs RRB
Then le plateau de jeu affiche perdu

Sébastien Nicouleaud

non lue,
10 mai 2012, 07:53:2810/05/2012
à cara...@googlegroups.com
Salut,

Du coup, je ne suis pas sûr de comprendre, vous voulez qu'on parte de ces features mardi prochain ?
Ou c'est juste une base de discussion ?

Bref, qu'est-ce que je dois préparer niveau ruby ?

Seb



--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes CARA Coding Dojo.
Pour envoyer un message à ce groupe, adressez un e-mail à cara...@googlegroups.com.
Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse cara-dojo+...@googlegroups.com.
Pour plus d'options, consultez la page de ce groupe : http://groups.google.com/group/cara-dojo?hl=fr


Rémy Sanlaville

non lue,
10 mai 2012, 08:24:4810/05/2012
à cara...@googlegroups.com
Salut Sébastien,

C'est à décider tous ensemble.

De mon côté, ce que j'ai compris/retenu le fait d'avoir souligner une nouvelle fois la difficulté
d'écrire les features et que cela est assez impactant pour tout le reste du fait que cela pilote
le reste du développement.
L'idée pour moi, est de repartir sur l'écriture des  features. On écrit un scenario à la fois et lorsque
tout le monde est d'accord sur le scenario on déroule tout le cycle BDD-TDD-Code avec l'environnement
ruby pour ce scenario. Une fois terminer, on recommence avec une nouveau scenario...
Du coup, ce serait utile d'avoir comme la dernière fois, l'environnement Ruby déjà prêt sur un poste.

Ce que nous a proposé Bruno, peut nous servir/guider mais ce n'est pas une obligation pour moi.

Qu'en pensez-vous ? Souhaitez-vous faire autre chose ?

Rémy


2012/5/10 Sébastien Nicouleaud <sebastien....@gmail.com>

Sébastien Nicouleaud

non lue,
10 mai 2012, 08:45:0010/05/2012
à cara...@googlegroups.com
Ok, moi ça me va très bien.

MILLET LUC

non lue,
17 mai 2012, 13:16:4617/05/2012
à cara...@googlegroups.com

Bonjour à tous,

 

Suite au dernier dojo sur Cucumber, et les discussions sur les features, j’ai essayé de définir les features en partant d’une vision PO.

 

Je suis parti de la définition du mastermind de Wikipedia, ce qui évite toute référence à la technique.

 

J’ai aussi essayé de respecter la contrainte dont a parlé Rémy : un concept par feature.

 

J’ai fait 2 étapes :

1.       Transformer la définition de wikipedia en features

2.       Ne garder que les features essentielles à la mécanique du Mastermind (simulation d’un dialogue PO / équipe développeur)

 

Je suis intéressé par vos retours sur l’approche, le découpage en features, etc.

 

Luc

 

Le résultat final :

Les features :

Feature 09 : Initialiser le code secret

                En tant que contrôleur

                Afin de permettre de trouver un code secret

                Je définit en interne un code secret

 

Feature 11 : Indiquer le nombre d’éléments de la bonne couleur et bien placés entre la proposition et le code secret

                En tant que contrôleur

                Afin de permettre de savoir si sa proposition a des éléments de bonne couleur et bien placés par rapport au code secret

                J’indique le nombre d’éléments de bonnes couleurs et bien placés

                               

Feature 12 : Indiquer le nombre d’éléments de la bonne couleur et mal placés entre la proposition et le code secret

                En tant que contrôleur

                Afin de permettre de savoir si sa proposition a des éléments de bonne couleur et mal placés par rapport au code secret

                J’indique le nombre d’éléments de bonnes couleurs et mal placés

 

Feature 13 : Définir un tour de jeu

                En tant que tour de jeu

                Afin de donner des informations sur la ressemblance entre la proposition et le code secret

                J’accepte une proposition

Puis je laisse le contrôleur indiquer la ressemblance entre la proposition et le code secret

 

Feature 22 : Accepter une proposition

                En tant que jeu

                Afin de permettre de comparer une proposition au code secret

                J’accepte la valeur de cette proposition pour permettre ultérieurement son traitement par le jeu

 

Feature 23 : Finir la partie en trouvant le code secret

                En tant que partie

                Afin de déterminer si je me termine à la fin du tour de jeu

                Je vérifie que la proposition est identique au code secret

 

Les scenarii :

Scenario 01 (feature 09) : initialiser le code secret

                Given le code secret SECRET

                When le jeu commence

                Then SECRET a la valeur « RVBJR »

 

Scenario 02 (feature 11) : tester que la valeur retournée est 2 quand le secret est égal à « RVBJR » et la proposition égale à « RRRRR »

                Given le code secret SECRET a pour valeur « RVBJR »

                Given la proposition PROPOSITION a pour valeur « RRRRR »

                When le test demande le nombre de valeurs bien placées

                Then la valeur retournée est 2

 

Scenario 03 (feature 11) : : tester que la valeur retournée est 1 quand le secret est égal à « RVBJR » et la proposition égale à « RRVVV»

                Given le code secret SECRET a pour valeur « RVBJR »

                Given la proposition PROPOSITION a pour valeur « RRVVV »

                When le test demande le nombre de valeurs bien placées

                Then la valeur retournée est 1

 

Scenario 04 (feature 12) : tester que la valeur retournée est 0 quand le secret est égal à « RVBJR » et la proposition égale à « RRRRR »

                Given le code secret SECRET a pour valeur « RVBJR »

                Given la proposition PROPOSITION a pour valeur « RRRRR »

                When le test demande le nombre de valeurs mal placées

                Then la valeur retournée est 0

 

Scenario 05 (feature 12) : tester que la valeur retournée est 1 quand le secret est égal à « RVBJR » et la proposition égale à « RRVVV»

                Given le code secret SECRET a pour valeur « RVBJR »

                Given la proposition PROPOSITION a pour valeur « RRVVV »

                When le test demande le nombre de valeurs mal placées

                Then la valeur retournée est 1

 

Scenario 06 (feature 13) : tester que le jeu affiche « Bien placés : 2  Mal placés : 0 » quand le secret est égal à « RVBJR » et la proposition égale à « RRRRR »

                Given le code secret SECRET a pour valeur « RVBJR »

                When la proposition PROPOSITION acceptée a pour valeur « RRRRR »

                Then le jeu affiche « Bien placés : 2  Mal placés : 0 »

 

Scenario 07 (feature 13) : tester que le jeu affiche « Bien placés : 1  Mal placés : 1 » quand le secret est égal à « RVBJR » et la proposition égale à « RRVVV»

                Given le code secret SECRET a pour valeur « RVBJR »

When la proposition PROPOSITION acceptée a pour valeur « RRVVV »

                Then le jeu affiche « Bien placés : 1  Mal placés : 1 »

 

Scenario 08 (feature 22) : tester que la valeur retournée est « RRVVV»  quand la proposition à accepter est égale à « RRVVV»

Given la proposition à accepter a pour valeur « RRVVV »

When la proposition est acceptée

Then la proposition PROPOSITION est égale à « RRVVV»

 

Scenario 09 (feature 23) : tester que la partie se termine quand la proposition est identique au code secret

                Given le code secret SECRET a pour valeur « RVBJR »

                Given la proposition PROPOSITION a pour valeur « RVBJR »

                When le test demande à tester si c’est la fin du jeu

                Then la valeur retournée est Vrai

 

Scenario 09 (feature 23) : tester que la partie se termine quand la proposition est identique au code secret

                Given le code secret SECRET a pour valeur « RVBJR »

                Given la proposition PROPOSITION a pour valeur « RRVVV»

                When le test demande à tester si c’est la fin du jeu

                Then la valeur retournée est Faux

 

Note 1 : le test de fin de jeu peut se faire en comparant la taille du mot de passe et le nombre de valeurs bien placées.

Note 2 : dans cette première itération, la notion de perdu n’est pas utile pour tester la mécanique.

 

Le détail des étapes :

 

Step 1 : transformation de la définition wikipedia en features => correspond au back-log du PO

PO : « voilà ce que j’attend du projet mastermind »

 

Définition wikipedia (retrait de la description de la tactique du joueur qui cherche la solution) :

·         Présentation

1.       Il se présente généralement sous la forme d'un plateau perforé de 10 rangées de quatre trous pouvant accueillir des pions de couleurs.

2.       Le nombre de pions de couleurs différentes est de 8 et les huit couleurs sont généralement : rouge ; jaune ; vert ; bleu ; orange ; blanc ; violet ; fuchsia.

3.       Il y a également des pions blancs et rouges (ou noirs) utilisés pour donner des indications à chaque étape du jeu.

4.       Il existe de nombreuses variantes suivant le nombre de couleurs, de rangées ou de trous.

·         Principe

1.       Un joueur commence par placer son choix de pions sans qu'ils soient vus de l'autre joueur à l'arrière d'un cache qui les masquera à la vue de celui-ci jusqu'à la fin de la manche.

2.       Le joueur qui n'a pas sélectionné les pions doit trouver quels sont les quatre pions, c'est-à-dire leurs couleurs et positions.

3.       Pour cela, à chaque tour :

a.        le joueur doit se servir de pions pour remplir une rangée selon l'idée qu'il se fait des pions dissimulés.

b.      Une fois les pions placés, l'autre joueur indique :

a.       le nombre de pions de la bonne couleur bien placés en utilisant le même nombre de pions rouges ;

b.      le nombre de pions de la bonne couleur, mais mal placés, avec les pions blancs.

4.       Le joueur gagne cette manche s'il donne la bonne combinaison de pions sur la dernière rangée ou avant.

5.       Dans tous les cas (de fin de manche), c'est au tour (du joueur qui a cherché le code secret) de choisir les pions à découvrir.

·         Variantes

1.      Selon le niveau des joueurs, un même jeu peut être rendu plus difficile en autorisant plusieurs pions de la même couleur, voire en autorisant l'absence d'un pion ou de plusieurs.

 

Traduction en features :

 

Feature 01 : Définition figée de la taille du code secret (présentation ligne 1)

                En tant que tableau de jeu

                Afin de définir la taille du code secret

                Je suis constitué de rangées de 4 éléments (trous)

 

Feature 02 : Définition figée du nombre de coups maximal pour trouver le code secret (présentation ligne 1)

                En tant que tableau de jeu

                Afin de limiter le nombre d’essais pour trouver le code secret

                Je limite mon nombre de rangées à 10

 

Feature 03 : Définition du nombre de valeurs possibles d’un élément (pion) du code secret (présentation ligne 2)

                En tant qu’élément du code secret

                Afin de définir le nombre de valeurs possibles que je peux prendre

                Je limite à 8 possibilités la valeur que je peux prendre

                Et les couleurs possibles sont  rouge ; jaune ; vert ; bleu ; orange ; blanc ; violet ; fuchsia

 

Feature 04 : Définition des valeurs possibles d’un élément (pion) du code secret (présentation ligne 2)

                En tant qu’élément du code secret

                Afin de définir les valeurs possibles que je peux prendre

                Je limite les couleurs possibles que je peux prendre à :  rouge, jaune, vert, bleu, orange, blanc, violet, fuchsia

 

Feature 05 : présentation du marquage du nombre de bonnes couleurs bien placées (présentation ligne 3)

                En tant que tableau de jeu

                Afin de donner au joueur des indications la ressemblance entre sa proposition et le code secret

                Je contient un marqueur pouvant indiquer le nombre de bonnes couleurs bien placées par le nombre de pions rouges

 

Feature 06 : présentation du marquage du nombre de bonnes couleurs mal placées (présentation ligne 3)

                En tant que tableau de jeu

                Afin de donner au joueur des indications la ressemblance entre sa proposition et le code secret

                Je contient un marqueur pouvant indiquer le nombre de bonnes couleurs mal placées par le nombre de pions blancs

 

Feature 07 : Contrôle des informations retournées par le marqueur (feature définie implicitement, à la limite de la feature technique)

                En tant que marqueur

                Afin de contrôler la cohérence des indications retournées au joueur

                Je vérifie que le total des pions rouges et des pions blancs ne dépasse pas la taille du code secret

 

Feature 08 : Option : paramétrer la difficulté du jeu (présentation ligne 4)

                En tant que tableau de  jeu

                Afin de changer la difficulté du jeu

                Je peux redéfinir les nombres de couleurs, de rangées ou d’éléments du code secret

                               Note : Feature à redécouper seulement quand cette option est à prendre en compte

 

Feature 09 : Initialiser le code secret (principe ligne 1)

                En tant que contrôleur (joueur qui définit le code secret et qui contrôle sa correspondance avec la proposition du joueur)

                Afin de permettre au joueur de trouver un code secret

                Je définit, en le cachant, un code secret respectant les règles du jeu

 

Feature 10 : Faire une proposition (Principe ligne 2)

                En tant que joueur

                Afin de trouver le code secret

                Je fais une proposition de 4 éléments ayant les couleurs possibles du code secret

 

Feature 11 : Indiquer au joueur le nombre d’éléments de la bonne couleur et bien placés entre sa proposition et le code secret (principe ligne 3ba)

                En tant que contrôleur

                Afin de permettre au joueur de savoir si sa proposition a des éléments de bonne couleur et bien placés

                J’indique dans le marqueur le nombre d’éléments de bonnes couleurs et bien placés par le même nombre de pions rouges

                               

Feature 12 : Indiquer au joueur le nombre d’éléments de la bonne couleur et mal placés entre sa proposition et le code secret (principe ligne 3bb)

                En tant que contrôleur

                Afin de permettre au joueur de savoir si sa proposition a des éléments de bonne couleur et mal placés

                J’indique dans le marqueur le nombre d’éléments de bonnes couleurs et mal placés par le même nombre de pions blancs

 

Note : les features 11 et 12 (règles du jeu) sont différentes des features 5 et 6 (présentation du résultat)

 

Feature 13 : Définir un tour de jeu (principe 3)

                En tant que règle du jeu

                Afin de permettre au joueur de jouer

                Je laisse d’abord le joueur faire une proposition,

Puis je laisse le contrôleur indiquer la ressemblance entre la proposition et le code secret

Puis arrêter les tours de jeu si la manche est terminée

 

Feature 14 : Gagner une manche de jeu (principe ligne 4)

                En tant que joueur

                Afin de gagner une manche de jeu

                Je fais une proposition identique au code secret (chaque élément est de la bonne couleur à la bonne place)

                Et au bout de 10 propositions ou moins

 

Feature 15 : Perdre une manche de jeu (feature définie implicitement à partir de principe ligne 4)

                En tant que joueur

                Afin de perdre une manche de jeu

                Je fais une proposition différente du code secret alors que je suis à ma 10ième proposition

 

Feature 16 : Définir une fin de manche (feature définie implicitement à partir des features 14 et 15)

                En tant que manche

                Afin de savoir quand je suis terminée

                Je teste si le joueur a gagné ou perdu

                Et si le joueur a gagné ou perdu, je m’arrête

 

Feature 17 : Définir le nombre de propositions par rangée (feature définie implicitement)

                En tant que règle du jeu

                Afin de limiter le nombre d’essais pour trouver le code secret

                Je n’autorise qu’une proposition par rangée

 

Feature 18 : Garder les propositions précédentes et leurs marqueurs toujours visibles (feature définie implicitement)

                En tant que règle du jeu

                Afin de permettre au joueur de s’aider de ses propositions précédentes pour trouver le code secret

                Je laisse toujours visible les propositions précédentes et leurs marqueurs associés

 

Feature 19 : Définir une nouvelle manche (Principe ligne 5)

                En tant que règle du jeu

                Afin de permettre au contrôleur de jouer

Le joueur devient contrôleur

Et le contrôleur devient le joueur

Et quel que soit le résultat de la manche précédente (gagnée ou perdue)

               

Feature 20 :  Option : définir des variantes de règles du jeu (Variantes ligne 1)

                En tant que règle du jeu

                Afin de changer la difficulté du jeu

Je peux autoriser plusieurs pions de la même couleur, voire autoriser l'absence d'un pion ou de plusieurs.     

                                               Note : Feature à redécouper seulement quand cette option est à prendre en compte

 

Feature 21 : Définir les combinaisons autorisées du code secret (feature définie implicitement par contraposée de Variantes ligne 1)

                En tant que règle du jeu

                Afin que le joueur puisse trouver le code secret du contrôleur

                Je limite les combinaisons du code secret tel que chaque couleur ne peut y être qu’une fois

                Et je limite les combinaisons du code secret tel que tous les éléments du code secret a une couleur

 

Step 2 : Discussion de l’équipe de réalisation avec le PO

Equipe :

Ok, c’est un chouette back-log de production, mais on ne peut pas faire tout cela dans un sprint.

De plus, on  a une contrainte technique : le premier sprint sera en mode texte

Quel est le minimum demandé ?

 

PO :       Je veux vérifier au minimum la mécanique du jeu, et donc qu’il y ait :

Un code secret à trouver

Des tours de jeux, tel que :

A une proposition donnée, le programme indique le nombre de pions de bonnes couleurs bien placés et mal placés

Que le jeu s’arrête quand la proposition est identique au code secret

 

Equipe :

                Voici donc les features qui disparaissent pour ce minimum :

                               Feature 01 : Définition figée de la taille du code secret (présentation ligne 1)

                                               Note : la taille du code secret sera définie lors de la feature 09

Feature 02 : Définition figée du nombre de coups maximal pour trouver le code secret (présentation ligne 1)

                                               Note : le jeu s’arrête quand la proposition est identique au code secret

                                Feature 03 : Définition du nombre de valeurs possibles d’un élément (pion) du code secret (présentation ligne 2)

                                               Note : cette feature n’est pas nécessaire pour tester la mécanique :  la valeur de chaque élément de la proposition est testé avec chaque élément du code secret     

Feature 04 : Définition des valeurs possibles d’un élément (pion) du code secret (présentation ligne 2)

                Note : cette feature n’est pas nécessaire pour tester la mécanique :  la valeur de chaque élément de la proposition est testé avec chaque élément du code secret

Feature 05 : présentation du marquage du nombre de bonnes couleurs bien placées (présentation ligne 3)

                                                Note : l’apparence du marquage n’est pas essentiel. Peut être reporté

Feature 06 : présentation du marquage du nombre de bonnes couleurs mal placées (présentation ligne 3)

                                                Note : l’apparence du marquage n’est pas essentiel. Peut être reporté

Feature 07 : Contrôle des informations retournées par le marqueur (feature définie implicitement)

                                                Note : ce contrôle peut être reporté dans un premier temps

Feature 08 : Option : paramétrer la difficulté du jeu (présentation ligne 4)

                Note : c’est une option

Feature 10 : Faire une proposition (Principe ligne 2)

                                               Note : la saisie proprement dite de la proposition n’est pas essentielle pour tester la mécanique, du moment qu’une proposition est fournie aux features 11 et 12.

Feature 14 : Gagner une manche de jeu (principe ligne 4)

                                               Note : remplacée par la feature 22, définie ci-dessous

Feature 15 : Perdre une manche de jeu (feature définie implicitement à partir de principe ligne 4)

                Note : la notion de perdu pas nécessaire dans un premier temps.

Feature 16 : Définir une fin de manche (feature définie implicitement à partir des features 14 et 15)

                                               Note : remplacée par la feature 22, définie ci-dessous

Feature 17 : Définir le nombre de propositions par rangée (feature définie implicitement)

                Note : il n’y a plus de notion de rangée

Feature 18 : Garder les propositions précédentes et leurs marqueurs toujours visibles (feature définie implicitement)

                                               Note : dans une première version « textuelle », est gérée par défaut par l’affichage, donc pas à gérer explicitement dans le programme

Feature 19 : Définir une nouvelle manche (Principe ligne 5)

                                               Note : remplacée par la feature 22, définie ci-dessous. De plus, le programme est toujours le contrôleur

                                Feature 20 :  Option : définir des variantes de règles du jeu (Variantes ligne 1)

                Note : c’est une option

Feature 21 : Définir les combinaisons autorisées du code secret (feature définie implicitement par contraposée de Variantes ligne 1)          

                Note : ce contrôle n’est pas nécessaire dans une première version

 

                Les features simplifiées à ajouter, pour ce minimum :

                               Feature 22 : Accepter une proposition

                                               En tant que règle du jeu

                                               Afin de déterminer si la proposition est identique au code secret

                                               Et afin d’indiquer le nombre d’éléments de la bonne couleur bien placés et mal placés de la proposition

                                               J’accepte la valeur d’une proposition pour l’utiliser avec les autres features qui en ont besoin

 

Feature 23 : Finir la partie en trouvant le code secret (remplace feature 14, 16 et 19)

                                               En tant que partie

                                               Afin de déterminer si je me termine

                                               Je vérifie que la proposition est identique au code secret

 

Il reste donc les features suivantes :

Feature 09 : Initialiser le code secret (principe ligne 1)

Feature 11 : Indiquer au joueur le nombre d’éléments de la bonne couleur et bien placés entre sa proposition et le code secret (principe ligne 3ba)

Feature 12 : Indiquer au joueur le nombre d’éléments de la bonne couleur et mal placés entre sa proposition et le code secret (principe ligne 3bb)

Feature 13 : Définir un tour de jeu (principe 3)

Feature 22 : Accepter une proposition

Feature 23 : Finir la partie en trouvant le code secret (remplace feature 14, 16 et 19)

 

Le refactoring des définitions des features est donné en début de mail, ainsi que les scenarii correspondant au features.

 

 

De : cara...@googlegroups.com [mailto:cara...@googlegroups.com] De la part de Sébastien Nicouleaud
Envoyé : jeudi 10 mai 2012 14:45
À : cara...@googlegroups.com
Objet : Re: idées pour .features Mastermind

Répondre à tous
Répondre à l'auteur
Transférer
0 nouveau message