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 +