1. Deux instances de la classe Donjon ne peuvent avoir le même identifiant id
context Donjon
inv: allInstances()−>forAll(d1, d2 | d1 <> d2 implies d1.id <> d2.id)
2. Deux joueurs dans un même donjon ne peuvent partager la même couleur
context Donjon
inv: joueurs−>forAll(j1, j2 | j1 <> j2 implies j1.couleur <> j2.couleur)
3. On ne peut pas appeler la méthode commencer() si le donjon est déjà commencé
context Donjon::commencer()
pre: not commence
4. Après l’appel de la méthode commencer(), tous les joueurs se trouvent sur la case entrée
context Donjon::commencer()
post: joueurs−>forAll(case = entree)
5. La méthode Donjon::placerCase(case, voisine) permet de placer une nouvelle case dans le donjon. Le paramètre case représente la nouvelle case à placer. Le paramètre voisine représente la case déjà posée à coté de laquelle on souhaite poser la nouvelle case. Lorsque l’on appelle la méthode Donjon::placerCase(case, voisine), case et voisine ne peuvent pas être la même instance, voisine doit se trouver dans les cases du donjon mais case ne doit pas déjà s’y trouver
context Donjon::placerCase(case: Case, voisine: Case)
pre: case <> voisine and cases−>includes(voisine) and cases−>excludes(case)
6. Lorsque l’on appelle la méthode Donjon::placerCase(case, voisine), voisine ne peut avoir plus de 3 voisines
context Donjon::placerCase(case: Case, voisine: Case)
pre: voisine . voisins−>size() < 4
7. Après l’appel de la méthode Donjon::placerCase(case, voisine), case doit se trouver dans les cases du donjon et le nombre de cases dans le donjon doit avoir été incrémenté par rapport à avant l’appel.
context Donjon::placerCase(case: Case, voisine: Case)
post: cases−>includes(case) and cases−>size() = cases@pre−>size() + 1
8. Lorsqu’on veut appeller la méthode Joueur::deplacer(case), la case vers laquelle on veut déplacer le joueur doit être voisine de la case actuelle du joueur
context Joueur::deplacer(case: Case)
pre: self .case. voisins−>includes(case)