added placement constraints
This commit is contained in:
parent
064e0aba80
commit
3a641d6d56
2 changed files with 149 additions and 138 deletions
27
projet.use
27
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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue