-
Notifications
You must be signed in to change notification settings - Fork 0
/
Game.ocl
79 lines (62 loc) · 2.28 KB
/
Game.ocl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import 'Game.ecore'
package game
context Jeu
inv warningSeverity: false
inv withMessage('Explicit message in game ' + self.name + ' (withMessage)'): false
inv errorSeverity: null
/* Taille disponible dans le 'sac' de l'explorateur toujours >=0 */
context Explorateur
inv tailleDispoPos:
self.tailleDispo >= 0
/* Le nom d'une Personne doit commencer par une majuscule.
* Il doit être compose d'au moins deux caractères. */
context Personne
inv validName('Invalid name: ' + self.name):
self.name.matches('[A-Z][A-Za-z0-9_]+')
/* Deux personnes doivent nécessairement avoir deux noms différents */
context Personne
inv uniqueName('Not unique name: ' + self.name):
Personne.allInstances()->forAll(p1,p2 | p1 <> p2 implies p1.name <> p2.name)
/* Deux lieux doivent nécessairement avoir deux noms différents */
context Lieu
inv uniqueName('Not unique name: ' + self.name):
Lieu.allInstances()->forAll(l1,l2 | l1 <> l2 implies l1.name <> l2.name)
/* Il n'y a qu'un Lieu de nature Start */
context Lieu
inv uniqueStart('Not unique start: ' + self.name):
Lieu.allInstances()
->select(e|e.nature=Nature::depart)
->size() = 1
/* Un lieu commence par une majuscule et a au moins deux caractères.*/
context Lieu
inv validName('Invalid name: ' + self.name):
self.name.matches('[A-Z][A-Za-z0-9_]+')
/* Deux chemins doivent nécessairement avoir deux noms différents */
context Chemin
inv uniqueName('Not unique name: ' + self.name):
Chemin.allInstances()->forAll(c1,c2 | c1 <> c2 implies c1.name <> c2.name)
/* Un chemin ne peut pas être reflexive */
context Chemin
inv CheminNotReflexive:
self.pred <> self.succ
/* Un chemin commence par une minuscule et a au moins deux caractères.*/
context Chemin
inv validName('Invalid name: ' + self.name):
self.name.matches('[a-z][A-Za-z0-9_]+')
/* Quantitê d'objet positive */
context Objet
inv qtePositive:
self.qte > 0
/* Taille d'Objet positive */
context Objet
inv taillePositive:
self.taille > 0
/* Un objet commence par une minuscule et a au moins deux caractères.*/
context Objet
inv validName('Invalid name: ' + self.name):
self.name.matches('[a-z][A-Za-z0-9_]+')
/* Une condition commence par une minuscule et a au moins deux caractères.*/
context Condition
inv validName('Invalid name: ' + self.name):
self.name.matches('[a-z][A-Za-z0-9_]+')
endpackage