diff --git a/projet.use b/projet.use
index 35c1cfc..9bab485 100644
--- a/projet.use
+++ b/projet.use
@@ -84,7 +84,7 @@ class Flotte
operations
ajouterBateau(bateau: Bateau)
constraints
- -- Contraintes qui vérifient que les bateaux sont de la bonne taille
+ -- Contraintes qui vérifient le nombre de bateaux par type
inv torpilleur: bateaux->select(b: Bateau | b.type = TypeBateau::Torpilleur)->size() = 1
inv contre_torpilleur: bateaux->select(b: Bateau | b.type = TypeBateau::Contre_Torpilleur)->size() = 2
inv croiseur: bateaux->select(b: Bateau | b.type = TypeBateau::Croiseur)->size() = 1
@@ -94,6 +94,8 @@ end
class Coup
attributes
type: TypeCoup
+constraints
+ inv unicite: joueur.coups.isUnique(c: Coup | c.case = case)
end
class Plateau
@@ -111,7 +113,7 @@ operations
getEtat(): TypeCase
constraints
-- Contrainte qui vérifie qu'il n'y a pas deux cases au même endroit
- inv unicite: plateau.cases->select(c: Case | c.x = x and c.y = y)->size() = 1
+ inv unicite: plateau.cases->isUnique(c: Case | c.x = x and c.y = y)
-- Contrainte qui vérifie que le plateau est de bonne dimensions
inv dimensions: x <= 10 and x > 0 and y > 0 and y <= 10
end
@@ -121,14 +123,23 @@ attributes
type: TypeBateau
longueur: Integer
etat: EtatBateau
+ x1: Integer
+ y1: Integer
+ x2: Integer
+ y2: Integer
constraints
-- Contraintes qui vérifient que les bateaux sont de la bonne taille
- inv torpilleur: type = TypeBateau::Torpilleur implies longueur = 2
- inv contre_torpilleur: type = TypeBateau::Contre_Torpilleur implies longueur = 3
- inv croiseur: type = TypeBateau::Croiseur implies longueur = 4
- inv porte_avions: type = TypeBateau::Porte_Avions implies longueur = 5
+ inv torpilleur1: type = TypeBateau::Torpilleur implies longueur = 2 and cases->size() = 2
+ inv contre_torpilleur1: type = TypeBateau::Contre_Torpilleur implies longueur = 3 and cases->size() = 3
+ inv croiseur1: type = TypeBateau::Croiseur implies longueur = 4 and cases->size() = 4
+ inv porte_avions1: type = TypeBateau::Porte_Avions implies longueur = 5 and cases->size() = 2
-- Contrainte qui dit que si toutes les cases d'un bateau sont touchées alors le bateau est coulé
inv coule: cases->forAll(c: Case | c.type = TypeCase::Touche) implies etat = EtatBateau::Coule
+ -- Contrainte qui vérifie que le bateau est soit horizontal soit vertical
+ inv orientation: x1 = x2 or y1 = y2
+ -- Contraintes qui vérifient que les cases du bateau correspondent bien aux coordonnées
+ inv horizontal: y1 = y2 implies cases.forAll(c: Case | c.y = y1 and c.x >= x1 and c.x <= x2)
+ inv vertical: x1 = x2 implies cases.forAll(c: Case | c.x = x1 and c.y >= y1 and c.y <= y2)
end
association Utilise between
@@ -147,8 +158,8 @@ Jeu[1] role jeu2
end
association Tire between
-Joueur[*] role joueur
-Coup[1] role coups
+Joueur[1] role joueur
+Coup[0..100] role coups
end
association Appartient between
diff --git a/projet_default.clt b/projet_default.clt
index d4b9b25..44b7a0b 100644
--- a/projet_default.clt
+++ b/projet_default.clt
@@ -103,19 +103,6 @@
Bateau
Repartit
-
- bateau
-
- -4.0
- -6.0
- Repartit::WayPoint::1
- 8
- 8
- TOP
-
- false
-
@@ -130,6 +117,19 @@
false
+
+ bateau
+
+ -4.0
+ -6.0
+ Repartit::WayPoint::1
+ 8
+ 8
+ TOP
+
+ false
+
@@ -146,6 +146,19 @@
false
+
+ cases
+
+ 8.0
+ 6.0
+ Repartit::WayPoint::0
+ 8
+ 8
+ TOP
+
+ false
+
@@ -160,19 +173,6 @@
false
-
- cases
-
- 8.0
- 6.0
- Repartit::WayPoint::0
- 8
- 8
- TOP
-
- false
-
Plateau
Compose
-
- plateau
-
- -17.0
- -5.0
- Compose::WayPoint::1
- 8
- 8
- TOP
-
- false
-
@@ -234,6 +221,19 @@
false
+
+ plateau
+
+ -17.0
+ -5.0
+ Compose::WayPoint::1
+ 8
+ 8
+ TOP
+
+ false
+
@@ -311,19 +311,6 @@
Coup
Etat
-
- coup
-
- 46.0
- -14.0
- Etat::WayPoint::1
- 8
- 8
- TOP
-
- false
-
@@ -338,6 +325,19 @@
false
+
+ coup
+
+ 46.0
+ -14.0
+ Etat::WayPoint::1
+ 8
+ 8
+ TOP
+
+ false
+
@@ -456,6 +456,19 @@
false
+
+ joueur
+
+ 8.0
+ 7.0
+ Appartient::WayPoint::0
+ 8
+ 8
+ TOP
+
+ false
+
@@ -470,19 +483,6 @@
false
-
- joueur
-
- 8.0
- 7.0
- Appartient::WayPoint::0
- 8
- 8
- TOP
-
- false
-
Bateau
Appartient2
+
+ bateaux
+
+ 1.0
+ 22.0
+ Appartient2::WayPoint::1
+ 8
+ 8
+ TOP
+
+ false
+
@@ -738,19 +751,6 @@
false
-
- bateaux
-
- 1.0
- 22.0
- Appartient2::WayPoint::1
- 8
- 8
- TOP
-
- false
-
@@ -767,6 +767,19 @@
false
+
+ flotte
+
+ 9.0
+ 30.0
+ Appartient2::WayPoint::0
+ 8
+ 8
+ TOP
+
+ false
+
@@ -781,19 +794,6 @@
false
-
- flotte
-
- 9.0
- 30.0
- Appartient2::WayPoint::0
- 8
- 8
- TOP
-
- false
-
false
-
- joueur1
-
- 62.0
- -25.0
- Joue1::WayPoint::0
- 8
- 8
- TOP
-
- false
-
@@ -898,6 +885,19 @@
false
+
+ joueur1
+
+ 62.0
+ -25.0
+ Joue1::WayPoint::0
+ 8
+ 8
+ TOP
+
+ false
+
Coup
Tire
-
- coups
-
- -19.0
- -6.0
- Tire::WayPoint::1
- 8
- 8
- TOP
-
- false
-
@@ -957,6 +944,19 @@
false
+
+ coups
+
+ -19.0
+ -6.0
+ Tire::WayPoint::1
+ 8
+ 8
+ TOP
+
+ false
+
@@ -973,19 +973,6 @@
false
-
- joueur
-
- 47.0
- 9.0
- Tire::WayPoint::0
- 8
- 8
- TOP
-
- false
-
@@ -1000,6 +987,19 @@
false
+
+ joueur
+
+ 47.0
+ 9.0
+ Tire::WayPoint::0
+ 8
+ 8
+ TOP
+
+ false
+