amélioration du proto java

This commit is contained in:
Laurent Fainsin 2022-01-16 18:14:57 +01:00
parent bdd0437452
commit 59c1aaf71a
15 changed files with 2748 additions and 2434 deletions

View file

@ -0,0 +1,158 @@
Objets:
- tentative:
taille: 1
visible: true
descriptions:
- Description1:
texte: "permet repondre une question du sphinx"
condition: true
Transformations:
Connaissances:
- Reussite:
visible: true
descriptions:
- Description1:
texte: "Permet de se casser de la"
condition: true
Explorateur:
taille: 3
connaissances:
objets:
- tentative
- tentative
- tentative
Personnes:
- Sphinx:
visible: ! Reussite && tentative > 0
obligatoire: false
interactions:
- Parler:
visible: true
connaissances:
objets_recus:
objets_conso:
actions:
- Reponse_1:
visible: true
fin_interaction: true
connaissances:
- Reussite
objets_recus:
objets_conso:
descriptions:
- Description1:
texte: "la bonne reponse"
condition: true
- Reponse_2:
visible: true
fin_interaction: true
connaissances:
objets_recus:
objets_conso:
- tentative
descriptions:
- Description1:
texte: "la mauvaise reponse"
condition: true
- Combattre:
visible: true
connaissances:
objets_recus:
objets_conso:
actions:
- Action_1:
visible: true
fin_interaction: true
connaissances:
- Reussite
objets_recus:
objets_conso:
descriptions:
- Description1:
texte: "la bonne reponse"
condition: true
- Action_2:
visible: true
fin_interaction: true
connaissances:
objets_recus:
objets_conso:
- tentative
descriptions:
- Description1:
texte: "la mauvaise reponse"
condition: true
Territoire:
Lieux:
- Enigme:
deposable: true
depart: true
fin: false
personnes:
- Sphinx
descriptions:
- Description1:
texte: "lieu de depart"
condition: true
objets:
connaissances:
- Succes:
deposable: false
depart: false
fin: true
personnes:
descriptions:
- Description1:
texte: "lieu succes"
condition: true
objets:
connaissances:
- Echec:
deposable: false
depart: false
fin: true
personnes:
descriptions:
- Description1:
texte: "lieu echec"
condition: true
objets:
connaissances:
Chemins:
- Win:
lieu_in: Enigme
lieu_out: Succes
ouvert: true
visible: Reussite
obligatoire: false
connaissances:
objets_recus:
objets_conso:
descriptions:
- Description1:
texte: "Le chemin de la victoire !"
condition: true
- Loose:
lieu_in: Enigme
lieu_out: Echec
ouvert: true
visible: tentative == 0
obligatoire: false
connaissances:
objets_recus:
objets_conso:
descriptions:
- Description1:
texte: "Le chemin de la loose !"
condition: true

View file

@ -45,4 +45,19 @@ public class Chemin {
} }
return "No desc"; return "No desc";
} }
public Lieu emprunter() {
for (Objet o : this.objetsRecus) {
Jeu.explorateur.objets.add(o);
}
for (Objet o : this.objetsConso) {
Jeu.explorateur.objets.remove(o);
}
for (Connaissance c : this.connaissancesRecus) {
if (!Jeu.explorateur.connaissances.contains(c)) {
Jeu.explorateur.connaissances.add(c);
}
}
return this.lieuOut;
}
} }

View file

@ -16,16 +16,7 @@ public class Explorateur {
@Override @Override
public String toString() { public String toString() {
String txt = "Objets :\n"; return "\tObjets : " + this.objets + "\n\tConnaissances : " + this.connaissances;
for (Objet c : this.objets) {
txt += c + " ";
}
txt += "\n\nConnaissances :\n";
for (Connaissance c : this.connaissances) {
txt += c + " ";
}
txt += "\n===================================================";
return txt;
} }
} }

View file

@ -25,9 +25,20 @@ public class Interaction {
} }
void interragir(BufferedReader reader, Lieu lieu) { void interragir(BufferedReader reader, Lieu lieu) {
boolean arreter_interraction = false;
while (!arreter_interraction) { for (Objet o : this.objetsRecus) {
Jeu.explorateur.objets.add(o);
}
for (Objet o : this.objetsConso) {
Jeu.explorateur.objets.remove(o);
}
for (Connaissance c : this.connaissances) {
if (!Jeu.explorateur.connaissances.contains(c)) {
Jeu.explorateur.connaissances.add(c);
}
}
while (true) {
System.out.println(this); System.out.println(this);
System.out.print("\nChoix : "); System.out.print("\nChoix : ");
@ -37,21 +48,20 @@ public class Interaction {
actions_choix.add(a); actions_choix.add(a);
} }
} }
int choix = 0; int choix = 0;
Action a = null; Action a = null;
try { try {
choix = Integer.parseInt(reader.readLine()); choix = Integer.parseInt(reader.readLine());
a = actions_choix.get(choix); a = actions_choix.get(choix);
} catch (NumberFormatException e) { } catch (Exception e) {
continue; continue;
} catch (IndexOutOfBoundsException e) {
continue;
} catch (IOException e) {
e.printStackTrace();
} }
a.actionner(); a.actionner();
arreter_interraction = a.finInterraction.evaluer(); if (a.finInterraction.evaluer())
break;
} }
} }

View file

@ -12,6 +12,9 @@ public class Jeu {
List<Personne> personnes; List<Personne> personnes;
List<Transformation> transformations; List<Transformation> transformations;
Lieu lieu = null;
Personne personne = null;
public Jeu( public Jeu(
Territoire territoire, Territoire territoire,
List<Objet> objets, List<Objet> objets,
@ -33,7 +36,7 @@ public class Jeu {
void jouer() { void jouer() {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Lieu lieu = null; // on cherche le (premier) lieu de départ
for (Lieu l : territoire.lieux) { for (Lieu l : territoire.lieux) {
if (l.depart.evaluer()) { if (l.depart.evaluer()) {
lieu = l; lieu = l;
@ -41,38 +44,32 @@ public class Jeu {
} }
} }
while (!lieu.fin.evaluer()) { // tant qu'on est pas sur un lieu de fin
boolean recommencer = false; mainloop: while (!lieu.fin.evaluer()) {
clearScreen(); clearScreen();
System.out.println("Lieu : " + lieu + "\n"); System.out.println("Lieu actuel: " + lieu + "\n");
System.out.println(Jeu.explorateur); System.out.println("Explorateur:\n" + Jeu.explorateur + "\n");
System.out.println("-".repeat(50));
for (Personne p : lieu.personnes) { for (Personne p : lieu.personnes) {
if (p.visible.evaluer() && p.obligatoire.evaluer()) { if (p.visible.evaluer() && p.obligatoire.evaluer() || p == personne) {
System.out.println(p + " :"); System.out.println(p + " :");
p.interragir(reader, lieu); p.interragir(reader, lieu);
recommencer = true; personne = null;
break; continue mainloop;
} }
} }
if (recommencer) {
continue;
}
for (Chemin c : territoire.chemins) { for (Chemin c : territoire.chemins) {
if (c.lieuIn == lieu) { if (c.lieuIn == lieu) {
if (c.visible.evaluer() && c.obligatoire.evaluer() && c.ouvert.evaluer()) { if (c.visible.evaluer() && c.obligatoire.evaluer() && c.ouvert.evaluer()) {
lieu = c.lieuOut; lieu = c.lieuOut;
recommencer = true; continue mainloop;
break;
} }
} }
} }
if (recommencer) {
continue;
}
int k = 0; int k = 0;
List<Chemin> chemins_choix = new ArrayList<>(); List<Chemin> chemins_choix = new ArrayList<>();
@ -101,24 +98,14 @@ public class Jeu {
try { try {
System.out.print("\nChoix : "); System.out.print("\nChoix : ");
choix = Integer.parseInt(reader.readLine()); choix = Integer.parseInt(reader.readLine());
if (choix < chemins_choix.size()) { if (choix < chemins_choix.size()) {
lieu = chemins_choix.get(choix).lieuOut; lieu = chemins_choix.get(choix).emprunter();
} else { } else {
Personne p = personnes_choix.get(choix - chemins_choix.size()); personne = personnes_choix.get(choix - chemins_choix.size());
clearScreen();
System.out.println("Lieu : " + lieu + "\n");
System.out.println(Jeu.explorateur);
System.out.println(p + " :");
p.interragir(reader, lieu);
} }
} catch (NumberFormatException e) { } catch (Exception e) {
continue; continue;
} catch (IndexOutOfBoundsException e) {
continue;
} catch (IOException e) {
e.printStackTrace();
} }
} }

View file

@ -19,11 +19,13 @@ public class Objet {
@Override @Override
public String toString() { public String toString() {
String str = null;
for (Description d : this.descriptions) { for (Description d : this.descriptions) {
if (d.condition.evaluer()) { if (d.condition.evaluer()) {
return "(" + this.nom + ": " + d + ")"; str = this.nom + "(" + d + ")";
break;
} }
} }
return "(" + this.nom + ")"; return str;
} }
} }

View file

@ -8,6 +8,7 @@ public class Prototype {
public static void main(String[] args) { public static void main(String[] args) {
// "Objets" // "Objets"
List<Objet> jeu_objets = new ArrayList<>(); List<Objet> jeu_objets = new ArrayList<>();
List<Description> objet_tentative_descriptions = new ArrayList<>(); List<Description> objet_tentative_descriptions = new ArrayList<>();
@ -52,6 +53,7 @@ List<Objet> jeu_objets = new ArrayList<>();
jeu_objets.add(objet_tentative); jeu_objets.add(objet_tentative);
// "Connaissances" // "Connaissances"
List<Connaissance> jeu_connaissances = new ArrayList<>(); List<Connaissance> jeu_connaissances = new ArrayList<>();
List<Description> connaissance_Reussite_descriptions = new ArrayList<>(); List<Description> connaissance_Reussite_descriptions = new ArrayList<>();
@ -95,6 +97,7 @@ List<Connaissance> jeu_connaissances = new ArrayList<>();
jeu_connaissances.add(connaissance_Reussite); jeu_connaissances.add(connaissance_Reussite);
// "Transformations" // "Transformations"
List<Transformation> jeu_transformations = new ArrayList<>(); List<Transformation> jeu_transformations = new ArrayList<>();
@ -144,7 +147,7 @@ List<Personne> jeu_personnes = new ArrayList<>();
List<ConditionTest> personne_obligatoire_Sphinx_1_conditions_TEST_list = new ArrayList<>(); List<ConditionTest> personne_obligatoire_Sphinx_1_conditions_TEST_list = new ArrayList<>();
personne_obligatoire_Sphinx_1_conditions_TEST_list.add( personne_obligatoire_Sphinx_1_conditions_TEST_list.add(
new ConditionBoolean(true) new ConditionBoolean(false)
); );
personne_obligatoire_Sphinx_1_conditions_ET_list.add( personne_obligatoire_Sphinx_1_conditions_ET_list.add(
new ConditionEt(personne_obligatoire_Sphinx_1_conditions_TEST_list) new ConditionEt(personne_obligatoire_Sphinx_1_conditions_TEST_list)
@ -582,7 +585,7 @@ List<Chemin> territoire_chemins = new ArrayList<>();
List<ConditionTest> chemin_obligatoire_Win_1_conditions_TEST_list = new ArrayList<>(); List<ConditionTest> chemin_obligatoire_Win_1_conditions_TEST_list = new ArrayList<>();
chemin_obligatoire_Win_1_conditions_TEST_list.add( chemin_obligatoire_Win_1_conditions_TEST_list.add(
new ConditionBoolean(true) new ConditionBoolean(false)
); );
chemin_obligatoire_Win_1_conditions_ET_list.add( chemin_obligatoire_Win_1_conditions_ET_list.add(
new ConditionEt(chemin_obligatoire_Win_1_conditions_TEST_list) new ConditionEt(chemin_obligatoire_Win_1_conditions_TEST_list)
@ -662,7 +665,7 @@ List<Chemin> territoire_chemins = new ArrayList<>();
List<ConditionTest> chemin_obligatoire_Loose_2_conditions_TEST_list = new ArrayList<>(); List<ConditionTest> chemin_obligatoire_Loose_2_conditions_TEST_list = new ArrayList<>();
chemin_obligatoire_Loose_2_conditions_TEST_list.add( chemin_obligatoire_Loose_2_conditions_TEST_list.add(
new ConditionBoolean(true) new ConditionBoolean(false)
); );
chemin_obligatoire_Loose_2_conditions_ET_list.add( chemin_obligatoire_Loose_2_conditions_ET_list.add(
new ConditionEt(chemin_obligatoire_Loose_2_conditions_TEST_list) new ConditionEt(chemin_obligatoire_Loose_2_conditions_TEST_list)

View file

@ -0,0 +1,53 @@
Objets:
Transformations:
Connaissances:
Explorateur:
taille: 0
connaissances:
objets:
Personnes:
Territoire:
Lieux:
- preWarp:
deposable: true
depart: true
fin: false
personnes:
descriptions:
- Description1:
texte: "preWarp description"
condition: true
objets:
connaissances:
- postWarp:
deposable: false
depart: false
fin: true
personnes:
descriptions:
- Description1:
texte: "postWarp description"
condition: true
objets:
connaissances:
Chemins:
- Warp:
lieu_in: preWarp
lieu_out: postWarp
ouvert: true
visible: true
obligatoire: false
connaissances:
objets_recus:
objets_conso:
descriptions:
- Description1:
texte: "warp description"
condition: true

View file

@ -0,0 +1,91 @@
Objets:
- warpToken:
taille: 1
visible: true
descriptions:
- Description1:
texte: "warpToken description"
condition: true
Transformations:
Connaissances:
Explorateur:
taille: 1
connaissances:
objets:
- warpToken
Personnes:
Territoire:
Lieux:
- preWarp:
deposable: false
depart: true
fin: false
personnes:
descriptions:
- Description1:
texte: "preWarp description"
condition: true
objets:
connaissances:
- postWarp:
deposable: false
depart: false
fin: false
personnes:
descriptions:
- Description1:
texte: "postWarp description"
condition: true
objets:
connaissances:
- END:
deposable: false
depart: false
fin: true
personnes:
descriptions:
- Description1:
texte: "END description"
condition: true
objets:
connaissances:
Chemins:
- Warp:
lieu_in: preWarp
lieu_out: postWarp
ouvert: true
visible: true
obligatoire: false
connaissances:
objets_recus:
objets_conso:
- warpToken
descriptions:
- DescriptionToken:
texte: "preWarp description (need token)"
condition: warpToken == 0
- DescriptionNoToken:
texte: "preWarp description (token acquired)"
condition: warpToken == 1
- EndChemin:
lieu_in: postWarp
lieu_out: END
ouvert: true
visible: true
obligatoire: false
connaissances:
objets_recus:
objets_conso:
descriptions:
- DescriptionToken:
texte: "END description"
condition: true

View file

@ -81,7 +81,7 @@ List<Objet> explorateur_inventaire = new ArrayList<>();
[/for] [/for]
List<Connaissance> explorateur_connaissances = new ArrayList<>(); List<Connaissance> explorateur_connaissances = new ArrayList<>();
[for (c : Objet | jeu.explorateur.connaissances)] [for (c : Connaissance | jeu.explorateur.connaissances)]
explorateur_inventaire.add(connaissance_[c.name/]); explorateur_inventaire.add(connaissance_[c.name/]);
[/for] [/for]

View file

@ -81,7 +81,7 @@ List<Objet> explorateur_inventaire = new ArrayList<>();
[/for] [/for]
List<Connaissance> explorateur_connaissances = new ArrayList<>(); List<Connaissance> explorateur_connaissances = new ArrayList<>();
[for (c : Objet | jeu.explorateur.connaissances)] [for (c : Connaissance | jeu.explorateur.connaissances)]
explorateur_inventaire.add(connaissance_[c.name/]); explorateur_inventaire.add(connaissance_[c.name/]);
[/for] [/for]

View file

@ -4,6 +4,10 @@ package game
context Explorateur context Explorateur
inv negativeQuantity: self.tailleInventaire >= 0 inv negativeQuantity: self.tailleInventaire >= 0
inv capaciteMax:
self.objets
->collect(o: Objet | o.taille)
->sum() <= self.tailleInventaire
context Objet context Objet
inv negativeQuantity: self.taille >= 0 inv negativeQuantity: self.taille >= 0