added constraints and comments
This commit is contained in:
parent
a4fc5e5fe8
commit
064e0aba80
2 changed files with 483 additions and 334 deletions
81
projet.use
81
projet.use
|
@ -29,11 +29,52 @@ class Jeu
|
|||
operations
|
||||
init(nom1: String,nom2: String)
|
||||
debut()
|
||||
constraints
|
||||
-- Contraintes qui vérifient qu'il y a bien un bateau à un endroit coulé
|
||||
inv coule1: joueur1.plateau.cases.forAll(
|
||||
c1: Case |
|
||||
c1.type = TypeCase::Touche
|
||||
implies joueur2.plateau.cases->select(
|
||||
c2: Case |
|
||||
c2.x = c1.x and c2.y = c1.y)->forAll(
|
||||
c3: Case | c3.type = TypeCase::Bateau
|
||||
)
|
||||
)
|
||||
inv coule2: joueur2.plateau.cases.forAll(
|
||||
c1: Case |
|
||||
c1.type = TypeCase::Touche
|
||||
implies joueur1.plateau.cases->select(
|
||||
c2: Case |
|
||||
c2.x = c1.x and c2.y = c1.y)->forAll(
|
||||
c3: Case | c3.type = TypeCase::Bateau
|
||||
)
|
||||
)
|
||||
-- Contraintes qui vérifient qu'il n'y a pas de bateau à un endroit raté
|
||||
inv rate1: joueur1.plateau.cases.forAll(
|
||||
c1: Case |
|
||||
c1.type = TypeCase::Rate
|
||||
implies joueur2.plateau.cases->select(
|
||||
c2: Case |
|
||||
c2.x = c1.x and c2.y = c1.y)->forAll(
|
||||
c3: Case | c3.type = TypeCase::Vide
|
||||
)
|
||||
)
|
||||
inv rate2: joueur2.plateau.cases.forAll(
|
||||
c1: Case |
|
||||
c1.type = TypeCase::Rate
|
||||
implies joueur1.plateau.cases->select(
|
||||
c2: Case |
|
||||
c2.x = c1.x and c2.y = c1.y)->forAll(
|
||||
c3: Case | c3.type = TypeCase::Vide
|
||||
)
|
||||
)
|
||||
-- Contrainte qui vérifie que les joueurs ont des noms différents
|
||||
inv noms: not(joueur1.nom = joueur2.nom)
|
||||
end
|
||||
|
||||
class Joueur
|
||||
attributes
|
||||
Nom: String
|
||||
nom: String
|
||||
operations
|
||||
tirer(case: String): TypeCoup
|
||||
tirerRobot(): TypeCoup
|
||||
|
@ -43,10 +84,11 @@ class Flotte
|
|||
operations
|
||||
ajouterBateau(bateau: Bateau)
|
||||
constraints
|
||||
inv: bateaux->select(b: Bateau | b.type = TypeBateau::Torpilleur)->size() = 1
|
||||
inv: bateaux->select(b: Bateau | b.type = TypeBateau::Contre_Torpilleur)->size() = 2
|
||||
inv: bateaux->select(b: Bateau | b.type = TypeBateau::Croiseur)->size() = 1
|
||||
inv: bateaux->select(b: Bateau | b.type = TypeBateau::Porte_Avions)->size() = 1
|
||||
-- Contraintes qui vérifient que les bateaux sont de la bonne taille
|
||||
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
|
||||
inv porte_avions: bateaux->select(b: Bateau | b.type = TypeBateau::Porte_Avions)->size() = 1
|
||||
end
|
||||
|
||||
class Coup
|
||||
|
@ -68,20 +110,25 @@ operations
|
|||
changerEtat(nouveauEtat: TypeCase)
|
||||
getEtat(): TypeCase
|
||||
constraints
|
||||
inv: plateau.cases->select(c: Case | c.x = x and c.y = y)->size() = 1
|
||||
inv: x <= 10 and x > 0 and y > 0 and y <= 10
|
||||
-- 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
|
||||
-- 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
|
||||
|
||||
class Bateau
|
||||
attributes
|
||||
type: TypeBateau
|
||||
longueur: Integer
|
||||
Etat: EtatBateau
|
||||
etat: EtatBateau
|
||||
constraints
|
||||
inv: type = TypeBateau::Torpilleur implies longueur = 2
|
||||
inv: type = TypeBateau::Contre_Torpilleur implies longueur = 3
|
||||
inv: type = TypeBateau::Croiseur implies longueur = 4
|
||||
inv: type = TypeBateau::Porte_Avions implies longueur = 5
|
||||
-- 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
|
||||
-- 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
|
||||
end
|
||||
|
||||
association Utilise between
|
||||
|
@ -91,12 +138,12 @@ end
|
|||
|
||||
composition Joue1 between
|
||||
Joueur[1] role joueur1
|
||||
Jeu[1] role jeu2
|
||||
Jeu[1] role jeu1
|
||||
end
|
||||
|
||||
composition Joue2 between
|
||||
Joueur[1] role joueur2
|
||||
Jeu[1] role jeu1
|
||||
Jeu[1] role jeu2
|
||||
end
|
||||
|
||||
association Tire between
|
||||
|
@ -111,7 +158,7 @@ end
|
|||
|
||||
composition Appartient2 between
|
||||
Flotte[1] role flotte
|
||||
Bateau[*] role bateaux
|
||||
Bateau[5] role bateaux
|
||||
end
|
||||
|
||||
composition Compose between
|
||||
|
@ -125,7 +172,7 @@ Coup[1] role coup
|
|||
end
|
||||
|
||||
association Repartit between
|
||||
Case[0..1] role cases
|
||||
Bateau[2..5] role bateau
|
||||
Case[2..5] role cases
|
||||
Bateau[0..1] role bateau
|
||||
end
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue