feat: 🔥 ouiiiii

This commit is contained in:
gdamms 2021-12-01 21:43:02 +01:00
parent d1e70947ce
commit 4d46c51918
7 changed files with 105 additions and 281 deletions

View file

@ -8,5 +8,5 @@ charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.{yaml,yml,toml,html,svelte,xtext,game}]
[*.{yaml,yml,toml,html,svelte,xtext,game,md}]
indent_size = 2

View file

@ -1,10 +0,0 @@
# Choix d'implantations a justifier
### Les chemins
Les chemins sont bi-directionnels.
### Objets et Connaissances
Lorsque le joueur prend un objet (ou une connaissance) en passant par un chemin ou lorsuq'il est dans un lieu, celui-ci est transféré et non dupliqué.

69
docs/rendu1.md Normal file
View file

@ -0,0 +1,69 @@
# Rendu 1 : 2021-12-01
## Xtext
Nous avons choisi de suivre une grammaire proche du JSON, simplement car de nombreux outils de formattages automatiques sont disponibles.
Le fichier `enigme.game` est le modèle "Enigme" de l'énoncé représenté par la grammaire Xtext citée précédemment.
## UML
Le diagramme UML que l'on présente dans le fichier `game.png` n'est pas le diagramme généré par Xtext mais il reprend la même architecture que celle générée par le Xtext (aux quelques retards de mise a jour près).
## TINA
`enigme.net` est une traduction manuelle du modèle "Enigme" et permet via les invariants LTL de vérifier sa finitude.
### Propriétés LTL
- [Propriétés LTL](#propriétés-ltl)
- [Que vérifions-nous ?](#que-vérifions-nous-?)
- [Vérifier les propriétés](#vérifier-les-propriétés)
### Que vérifions-nous ?
On définit d'abord l'état finished comme l'état Succès ou l'état Echec :
```ltl
op finished = Echec \/ Succes;
```
1. L'état `finished` est bien l'état final :
```ltl
[] (finished => dead);
```
2. On arrivera toujours soit dans l'état échec, soit dans l'état succes :
```ltl
[] <> finished ;
```
### Vérifier les propriétés
Comment vérifier la terminaison du processus à partir d'un fichier `.net` et d'un fichier `.ltl`
1. Générer le fichier `.ktz` à partir de tina
```console
tina .\enigme.net .\enigme.ktz
```
2. Vérifier les propriétés à l'aide de selt
```console
selt -p -S enigme.scn enigme.ktz -prelude .\enigme.ltl
```
Le fichier "`enigme.scn`" est généré à partir de cette commande. Je ne sais pas à quoi il sert, car il semble vide, mais il est utile.
## Traduction dans le langage de programmation
Pour la traduction manuelle du modèle `enigme.game` vers notre code java, nous avaons 18 classe (`Action.java` `Chemin.java` `Condition.java` `ConditionBoolean.java` `ConditionConnaissance.java` `ConditionEt.java` `ConditionObjet.java` `ConditionTest.java` `Connaissance.java` `Description.java` `Explorateur.java` `Interaction.java` `Jeu.java` `Lieu.java` `Objet.java` `Personne.java` `Territoire.java` `Transformation.java`) La méthode main se trouve dans la classe `Jeu`
Pour compiler : ```javac *.java```
Pour lancer la partie : ```java Jeu```
Le code n'est pas encore robuste donc il faut jouer dans les règles de l'art :)

View file

@ -1,139 +1,58 @@
@startuml jeu
@startuml game
abstract class Objet
{
' Classes
class Jeu {
}
class Explorateur {
- taille : int
- consomable : Condition
- transmissible : Condition
}
class Connaissance
{
- transmissible : Condition
class Territoire {
}
class Lieu
{
- exploré : bool
class Lieux {
- nom : String
- déposable : Condition
- départ : Condition
- fin : Condition
}
class Jeu{}
class Territoire{}
class Chemin
{
class Chemin {
- ouvert : Condition
- visible : Condition
- obligatoire : Condition
}
class Explorateur{}
class Objet {
- nom : String
- taille : int
- visible : Condition
}
class Personne
{
class Transformation {
- condition : Condition
}
class Connaissance {
- nom : String
- visible : Condition
}
class Personne {
- nom : String
- visible : Condition
- obligatoire : Condition
}
class Depart{}
class Fin{}
interface Cachable
{
- caché : Condition
class Interaction {
- visible : Condition
}
class Interraction
{
- disponible : Condition
}
class Choix{}
class Action
{
- proposable : Condition
- finInterraction : Condition
}
class Description
{
- textes : String
- conditions : Condition
}
class Condition{}
class ConditionOU{}
class ConditionET{}
class Test{}
class TestObjet
{
- nombre : int
- supérieurEgale : bool
}
class TestConnaissance{}
' Links
Condition "1" -down- "0..*" ConditionOU
ConditionOU "1" -down- "1..*" ConditionET
ConditionET "1" -down- "1..*" Test
Test <|-down- TestConnaissance
Test <|-down- TestObjet
TestConnaissance "0..1" -up- "1" Connaissance
TestObjet "0..1" -up- "1" Objet
Cachable <|-down- Connaissance
Cachable <|-down- Objet
Cachable <|-down- Personne
Depart -up-|> Lieu
Fin -up-|> Lieu
Jeu "1" *-- "1" Explorateur
Jeu "1" *-- "1" Territoire
Territoire "1" *-- "1" Depart
Territoire "1" *-- "1" Fin
Territoire "1" *-- "1..*" Lieu
Territoire "1" *-- "0..*" Chemin
Lieu "1" -- "0..*" Chemin
Lieu "1" -- "0..*" Chemin
Lieu "1" -- "0..*" Connaissance
Lieu "0..1" -- "0..*" Objet
Lieu "1" -- "0..*" Personne
Lieu "1" -- "1" Description
Chemin "0..1" -left- "0..*" Connaissance : transmettre
Chemin "0..1" -- "0..*" Objet : transmettre
Chemin "0..1" -- "0..*" Objet : consommer
Chemin "1" -- "1" Description
Explorateur "0..1" -- "0..*" Connaissance
Explorateur "0..1" -- "0..*" Objet
Explorateur "0..1" -- "1" Lieu
Personne "1" -- "1.." Interraction
Objet "1" -- "1" Description
Connaissance "1" -- "1" Description
Interraction "0..1" -- "0..*" Objet
Interraction "0..1" -- "0..*" Connaissance
Interraction "1" -- "1" Choix
Choix "1" -- "1..*" Action
@enduml

154
test.game
View file

@ -1,154 +0,0 @@
{
"Explorateur": {
"taille": 3,
"connaissances": [],
"objets": [
"tentative",
"tentative",
"tentative"
]
},
"Territoire": {
"Lieux": [
{
"nom": "Énigme",
"descriptions": [
{
"nom": "lieu de départ",
"condition": "(true)"
}
],
"deposable": "(false)",
"depart": "(true)",
"fin": "(false)",
"connaissances": [],
"personnes": [
"Sphinx"
],
"objets": []
},
{
"nom": "Succès",
"description": [
{
"nom": "lieu succès",
"condition": "(true)"
}
],
"deposable": "(false)",
"depart": "(false)",
"fin": "(true)",
"connaissances": [],
"personnes": [],
"objets": []
},
{
"nom": "Échec",
"description": [
{
"nom": "lieu échec",
"condition": "(true)"
}
],
"deposable": "(false)",
"depart": "(false)",
"fin": "(true)",
"connaissances": [],
"personnes": [],
"objets": []
}
],
"Chemins": [
{
"lieu_in": "Énigme",
"lieu_out": "Succès",
"ouvert": "(true)",
"visible": "(Réussite==1)",
"obligatoire": "(false)",
"connaissances_gift": [],
"objets_gift": [],
"objets_conso": [],
"descriptions": [
{
"texte": "Le chemin de la victoire !",
"condition": "(true)"
}
]
},
{
"lieu_in": "Énigme",
"lieu_out": "Échec",
"ouvert": "(true)",
"visible": "(tentatives==0)",
"obligatoire": "(false)",
"connaissances": [],
"objets_recus": [],
"objets_conso": [],
"descriptions": [
{
"texte": "Le chemin de la loose !",
"condition": "(true)"
}
]
}
]
},
"Objets": [
{
"nom": "tentative",
"taille": 1,
"visible": "(true)",
"descriptions": [
{
"texte": "permet répondre une question du sphinx",
"condition": "(true)"
}
]
}
],
"Connaissances": [
{
"nom": "Réussite",
"visible": "(true)",
"descriptions": [
{
"nom": "Permet de se casser de là",
"condition": "(true)"
}
]
}
],
"Personnes": [
{
"nom": "Sphinx",
"visible": "(true)",
"obligatoire": "(true)",
"interactions": [
{
"visible": "(true)",
"connaissances": [],
"objets_recus": [],
"actions": [
{
"visible": "(true)",
"connaissances": [
"Réussite"
],
"objets_gift": [],
"objets_conso": []
},
{
"visible": "(true)",
"connaissances": [],
"objets_recus": [],
"objets_conso": [
"tentative"
]
}
]
}
]
}
],
"Transformations": []
}

View file

@ -103,7 +103,7 @@ Interaction:
Action:
'{'
'"Description"' ':' '[' descriptions+=Description (descriptions+=Description)* ']' ','
'"Description"' ':' '[' descriptions+=Description (descriptions+=Description)* ']' ','
'"visible"' ':' visible=Condition ','
'"connaissances"' ':' '[' (connaissances+=Nom (connaissances+=Nom)*)? ']' ','
'"objets_recus"' ':' '[' (objetsRecus+=Nom (objetsRecus+=Nom)*)? ']' ','

View file

@ -103,7 +103,7 @@ Interaction:
Action:
'{'
'"Description"' ':' '[' descriptions+=Description (descriptions+=Description)* ']' ','
'"Description"' ':' '[' descriptions+=Description (descriptions+=Description)* ']' ','
'"visible"' ':' visible=Condition ','
'"connaissances"' ':' '[' (connaissances+=Nom (connaissances+=Nom)*)? ']' ','
'"objets_recus"' ':' '[' (objetsRecus+=Nom (objetsRecus+=Nom)*)? ']' ','